summaryrefslogtreecommitdiff
path: root/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx')
-rw-r--r--libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx121
1 files changed, 56 insertions, 65 deletions
diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx
index f812797..d1cbf25 100644
--- a/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx
+++ b/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx
@@ -1,32 +1,64 @@
// file : xsd-frontend/semantic-graph/schema.cxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+#include <cutl/compiler/type-info.hxx>
+
#include <xsd-frontend/semantic-graph/schema.hxx>
namespace XSDFrontend
{
namespace SemanticGraph
{
- namespace RTTI = Cult::RTTI;
+ // Schema
+ //
+ Schema::NamesIteratorPair Schema::
+ find (Name const& name) const
+ {
+ // Here we are going to create an illusion that the namespace
+ // hierarchy is flat.
+ names_.clear ();
+ schemas_.clear ();
+
+ find_ (name, names_, schemas_);
+
+ return NamesIteratorPair (NamesConstIterator (names_.begin ()),
+ NamesConstIterator (names_.end ()));
+ }
+
+ void Schema::
+ find_ (Name const& name, NamesList& names, SchemaSet& set) const
+ {
+ set.insert (this);
+
+ // Check our own namespace first so it will end up first in the list.
+ //
+ NamesIteratorPair pair (Scope::find (name));
+ names.insert (names.end (), pair.first.base (), pair.second.base ());
- using RTTI::Access;
- using RTTI::TypeInfo;
+ for (UsesIterator i (uses_begin ()), end (uses_end ()); i != end; ++i)
+ {
+ Schema& s (i->schema ());
+
+ if (set.find (&s) == set.end ())
+ s.find_ (name, names, set);
+ }
+ }
namespace
{
+ using compiler::type_info;
+
// Uses
//
struct UsesInit
{
UsesInit ()
{
- TypeInfo ti (typeid (Uses));
- ti.add_base (Access::public_, true, typeid (Edge));
- RTTI::insert (ti);
+ type_info ti (typeid (Uses));
+ ti.add_base (typeid (Edge));
+ insert (ti);
}
-
} uses_init_;
@@ -36,11 +68,10 @@ namespace XSDFrontend
{
ImpliesInit ()
{
- TypeInfo ti (typeid (Implies));
- ti.add_base (Access::public_, true, typeid (Uses));
- RTTI::insert (ti);
+ type_info ti (typeid (Implies));
+ ti.add_base (typeid (Uses));
+ insert (ti);
}
-
} implies_init_;
@@ -50,11 +81,10 @@ namespace XSDFrontend
{
SourcesInit ()
{
- TypeInfo ti (typeid (Sources));
- ti.add_base (Access::public_, true, typeid (Uses));
- RTTI::insert (ti);
+ type_info ti (typeid (Sources));
+ ti.add_base (typeid (Uses));
+ insert (ti);
}
-
} sources_init_;
@@ -64,11 +94,10 @@ namespace XSDFrontend
{
IncludesInit ()
{
- TypeInfo ti (typeid (Includes));
- ti.add_base (Access::public_, true, typeid (Uses));
- RTTI::insert (ti);
+ type_info ti (typeid (Includes));
+ ti.add_base (typeid (Uses));
+ insert (ti);
}
-
} includes_init_;
@@ -78,11 +107,10 @@ namespace XSDFrontend
{
ImportsInit ()
{
- TypeInfo ti (typeid (Imports));
- ti.add_base (Access::public_, true, typeid (Uses));
- RTTI::insert (ti);
+ type_info ti (typeid (Imports));
+ ti.add_base (typeid (Uses));
+ insert (ti);
}
-
} imports_init_;
@@ -92,48 +120,11 @@ namespace XSDFrontend
{
SchemaInit ()
{
- TypeInfo ti (typeid (Schema));
- ti.add_base (Access::public_, true, typeid (Scope));
- RTTI::insert (ti);
+ type_info ti (typeid (Schema));
+ ti.add_base (typeid (Scope));
+ insert (ti);
}
-
} schema_init_;
}
-
-
- // Schema
- //
- Schema::NamesIteratorPair Schema::
- find (Name const& name) const
- {
- // Here we are going to create an illusion that the namespace
- // hierarchy is flat.
- names_.clear ();
- schemas_.clear ();
-
- find_ (name, names_, schemas_);
-
- return NamesIteratorPair (NamesConstIterator (names_.begin ()),
- NamesConstIterator (names_.end ()));
- }
-
- Void Schema::
- find_ (Name const& name, NamesList& names, SchemaSet& set) const
- {
- set.insert (this);
-
- // Check our own namespace first so it will end up first in the list.
- //
- NamesIteratorPair pair (Scope::find (name));
- names.insert (names.end (), pair.first.base (), pair.second.base ());
-
- for (UsesIterator i (uses_begin ()), end (uses_end ()); i != end; ++i)
- {
- Schema& s (i->schema ());
-
- if (set.find (&s) == set.end ())
- s.find_ (name, names, set);
- }
- }
}
}