summaryrefslogtreecommitdiff
path: root/odb/odb/semantics/namespace.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/odb/semantics/namespace.hxx')
-rw-r--r--odb/odb/semantics/namespace.hxx71
1 files changed, 71 insertions, 0 deletions
diff --git a/odb/odb/semantics/namespace.hxx b/odb/odb/semantics/namespace.hxx
new file mode 100644
index 0000000..b025c2e
--- /dev/null
+++ b/odb/odb/semantics/namespace.hxx
@@ -0,0 +1,71 @@
+// file : odb/semantics/namespace.hxx
+// license : GNU GPL v3; see accompanying LICENSE file
+
+#ifndef ODB_SEMANTICS_NAMESPACE_HXX
+#define ODB_SEMANTICS_NAMESPACE_HXX
+
+#include <vector>
+
+#include <odb/semantics/elements.hxx>
+
+namespace semantics
+{
+ class namespace_: public scope
+ {
+ typedef std::vector<namespace_*> extensions_type;
+
+ public:
+ bool
+ extension () const
+ {
+ return original_ != 0;
+ }
+
+ namespace_&
+ original ()
+ {
+ return *original_;
+ }
+
+ void
+ original (namespace_& ns)
+ {
+ original_ = &ns;
+ ns.extensions_.push_back (this);
+ }
+
+ public:
+ typedef extensions_type::const_iterator extensions_iterator;
+
+ extensions_iterator
+ extensions_begin () const {return extensions_.begin ();}
+
+ extensions_iterator
+ extensions_end () const {return extensions_.end ();}
+
+ public:
+ virtual names*
+ lookup (string const& name,
+ type_id const&,
+ unsigned int flags = 0,
+ bool* hidden = 0) const;
+
+ using scope::lookup;
+
+ public:
+ namespace_ (path const&, size_t line, size_t column, tree);
+
+ // Resolve conflict between scope::scope and nameable::scope.
+ //
+ using nameable::scope;
+
+ protected:
+ namespace_ ();
+
+ private:
+ namespace_* original_;
+ extensions_type extensions_;
+ };
+}
+
+#endif // ODB_SEMANTICS_NAMESPACE_HXX