Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDirective.java')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDirective.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDirective.java
new file mode 100644
index 00000000000..dd957b2264b
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDirective.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Markus Schorn - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.core.pdom.dom.cpp;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.dom.IPDOMNode;
+import org.eclipse.cdt.core.dom.IPDOMVisitor;
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDirective;
+import org.eclipse.cdt.internal.core.pdom.db.Database;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Stores using directives for global or namespace scope. Directives for block-scopes
+ * are not persisted in the index.
+ * For performance reasons the directives are not stored with their container. Rather
+ * than that they are stored with the file, in which they are encountered.
+ * When parsing a file the directives from headers that are skipped are collected.
+ */
+public class PDOMCPPUsingDirective implements ICPPUsingDirective, IPDOMNode {
+ private static final int CONTAINER_NAMESPACE = 0;
+ private static final int NOMINATED_NAMESPACE = 4;
+ private static final int PREV_DIRECTIVE_OF_FILE = 8;
+ private static final int RECORD_SIZE = 12;
+
+ private final PDOMCPPLinkage fLinkage;
+ private final int fRecord;
+
+ PDOMCPPUsingDirective(PDOMCPPLinkage pdom, int record) {
+ fLinkage= pdom;
+ fRecord= record;
+ }
+
+ public PDOMCPPUsingDirective(PDOMCPPLinkage linkage, int prevRecInFile, PDOMCPPNamespace containerNS, PDOMBinding nominated) throws CoreException {
+ final Database db= linkage.getPDOM().getDB();
+ final int containerRec= containerNS == null ? 0 : containerNS.getRecord();
+ final int nominatedRec= nominated.getRecord();
+
+ fLinkage= linkage;
+ fRecord= db.malloc(RECORD_SIZE);
+ db.putInt(fRecord + CONTAINER_NAMESPACE, containerRec);
+ db.putInt(fRecord + NOMINATED_NAMESPACE, nominatedRec);
+ db.putInt(fRecord + PREV_DIRECTIVE_OF_FILE, prevRecInFile);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDirective#getNamespace()
+ */
+ public ICPPNamespaceScope getNominatedScope() {
+ try {
+ int rec = fLinkage.getPDOM().getDB().getInt(fRecord + NOMINATED_NAMESPACE);
+ PDOMNode node= fLinkage.getNode(rec);
+ if (node instanceof ICPPNamespace) {
+ return ((ICPPNamespace) node).getNamespaceScope();
+ }
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ } catch (DOMException e) {
+ }
+ return null;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDirective#getContainingScope()
+ */
+ public IScope getContainingScope() {
+ try {
+ int rec = fLinkage.getPDOM().getDB().getInt(fRecord + CONTAINER_NAMESPACE);
+ if (rec != 0) {
+ PDOMNode node= fLinkage.getNode(rec);
+ if (node instanceof PDOMCPPNamespace) {
+ return (PDOMCPPNamespace) node;
+ }
+ }
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDirective#getPointOfDeclaration()
+ */
+ public int getPointOfDeclaration() {
+ return 0;
+ }
+
+ public int getRecord() {
+ return fRecord;
+ }
+
+ public int getPreviousRec() throws CoreException {
+ final Database db= fLinkage.getPDOM().getDB();
+ return db.getInt(fRecord + PREV_DIRECTIVE_OF_FILE);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.IPDOMNode#accept(org.eclipse.cdt.core.dom.IPDOMVisitor)
+ */
+ public void accept(IPDOMVisitor visitor) throws CoreException {
+ }
+
+ public void delete(PDOMLinkage linkage) throws CoreException {
+ fLinkage.getPDOM().getDB().free(fRecord);
+ }
+}

Back to the top