diff options
Diffstat (limited to 'libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx')
| -rw-r--r-- | libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx | 997 | 
1 files changed, 0 insertions, 997 deletions
diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx deleted file mode 100644 index 98fb180..0000000 --- a/libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx +++ /dev/null @@ -1,997 +0,0 @@ -// file      : xsd-frontend/semantic-graph/elements.hxx -// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC -// license   : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENTS_HXX -#define XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENTS_HXX - -#include <set> -#include <map> -#include <list> -#include <vector> -#include <iosfwd> -#include <utility> // std::pair -#include <cstdlib> // abort -#include <cassert> - -#include <cutl/container/graph.hxx> -#include <cutl/container/pointer-iterator.hxx> -#include <cutl/compiler/context.hxx> -#include <cutl/fs/path.hxx> - -#include <xsd-frontend/types.hxx> - -namespace XSDFrontend -{ -  namespace SemanticGraph -  { -    using namespace cutl; - -    using container::pointer_iterator; - -    // -    // -    typedef fs::path Path; -    typedef fs::invalid_path InvalidPath; -    typedef std::vector<Path> Paths; - -    typedef compiler::context Context; - -    // -    // -    class Node; -    class Edge; - -    // -    // -    class Annotates; -    class Annotation; - -    // -    // -    class Edge -    { -    public: -      Context& -      context () const -      { -        return context_; -      } - -      virtual -      ~Edge () -      { -      } - -    public: -      template <typename X> -      bool -      is_a () const -      { -        return dynamic_cast<X const*> (this) != 0; -      } - -    private: -      mutable Context context_; -    }; - -    inline bool -    operator== (Edge const& x, Edge const& y) -    { -      return &x == &y; -    } - - -    // -    // -    class Node -    { -    public: -      Context& -      context () const -      { -        return context_; -      } - -    public: -      Path const& -      file () const -      { -        return file_; -      } - -      unsigned long -      line () const -      { -        return line_; -      } - -      unsigned long -      column () const -      { -        return column_; -      } - -    public: -      bool -      annotated_p () const -      { -        return annotates_ != 0; -      } - -      Annotates& -      annotated () const -      { -        return *annotates_; -      } - -      Annotation& -      annotation (); - -    public: -      template <typename X> -      bool -      is_a () const -      { -        return dynamic_cast<X const*> (this) != 0; -      } - -    public: -      virtual -      ~Node () {} - -      Node (Path const& file, unsigned long line, unsigned long column) -          : annotates_ (0), file_ (file), line_ (line), column_ (column) -      { -      } - -      void -      add_edge_right (Annotates& a) -      { -        annotates_ = &a; -      } - -    protected: -      Node () // For virtual inheritance. -      { -        abort (); // Told you so! -      } - -    private: -      mutable Context context_; -      Annotates* annotates_; -      Path file_; -      unsigned long line_; -      unsigned long column_; -    }; - -    inline bool -    operator== (Node const& x, Node const& y) -    { -      return &x == &y; -    } - -    // -    // -    typedef container::graph<Node, Edge> graph; - -    // -    // -    typedef String Name; - - -    // -    // -    class Scope; -    class Nameable; - - -    // -    // -    class Names: public virtual Edge -    { -    public: -      Name -      name () const -      { -        return name_; -      } - -      Scope& -      scope () const -      { -        return *scope_; -      } - -      Nameable& -      named () const -      { -        return *named_; -      } - -    public: -      Names (Name const& name): name_ (name) {} - -      void -      set_left_node (Scope& n) -      { -        scope_ = &n; -      } - -      void -      set_right_node (Nameable& n) -      { -        named_ = &n; -      } - -      void -      clear_left_node (Scope& n) -      { -        assert (scope_ == &n); -        scope_ = 0; -      } - -      void -      clear_right_node (Nameable& n) -      { -        assert (named_ == &n); -        named_ = 0; -      } - -    private: -      Scope* scope_; -      Nameable* named_; -      Name name_; -    }; - - -    class Nameable: public virtual Node -    { -    public: -      bool -      named_p () const -      { -        return named_ != 0; -      } - -      Name -      name () const -      { -        assert (named_p ()); -        return named_->name (); -      } - -      Scope& -      scope () -      { -        assert (named_p ()); -        return named_->scope (); -      } - -      Names& -      named () -      { -        assert (named_p ()); -        return *named_; -      } - -    public: -      Nameable (): named_ (0) {} - -      void -      add_edge_right (Names& e) -      { -        named_ = &e; -      } - -      void -      remove_edge_right (Names& e) -      { -        assert (named_ == &e); -        named_ = 0; -      } - -      using Node::add_edge_right; - -    private: -      Names* named_; -    }; - -    // -    // -    typedef std::set<Nameable*> Nameables; - -    // -    // -    class Scope: public virtual Nameable -    { -    protected: -      typedef std::list<Names*> NamesList; -      typedef std::map<Names*, NamesList::iterator> ListIteratorMap; -      typedef std::map<Name, NamesList> NamesMap; - -    public: -      typedef pointer_iterator<NamesList::iterator> NamesIterator; -      typedef pointer_iterator<NamesList::const_iterator> NamesConstIterator; - -      typedef -      std::pair<NamesConstIterator, NamesConstIterator> -      NamesIteratorPair; - -      NamesIterator -      names_begin () -      { -        return names_.begin (); -      } - -      NamesIterator -      names_end () -      { -        return names_.end (); -      } - -      NamesConstIterator -      names_begin () const -      { -        return names_.begin (); -      } - -      NamesConstIterator -      names_end () const -      { -        return names_.end (); -      } - -      virtual NamesIteratorPair -      find (Name const& name) const -      { -        NamesMap::const_iterator i (names_map_.find (name)); - -        if (i == names_map_.end ()) -          return NamesIteratorPair (names_.end (), names_.end ()); -        else -          return NamesIteratorPair (i->second.begin (), i->second.end ()); -      } - -      NamesIterator -      find (Names& e) -      { -        ListIteratorMap::iterator i (iterator_map_.find (&e)); -        return i != iterator_map_.end () ? i->second : names_.end (); -      } - -    public: -      Scope (Path const& file, unsigned long line, unsigned long column) -          : Node (file, line, column) -      { -      } - -      void -      add_edge_left (Names& e) -      { -        NamesList::iterator i (names_.insert (names_.end (), &e)); -        iterator_map_[&e] = i; -        names_map_[e.name ()].push_back (&e); -      } - -      void -      remove_edge_left (Names& e) -      { -        ListIteratorMap::iterator i (iterator_map_.find (&e)); -        assert (i != iterator_map_.end ()); - -        names_.erase (i->second); -        iterator_map_.erase (i); - -        NamesMap::iterator j (names_map_.find (e.name ())); - -        for (NamesList::iterator i (j->second.begin ()); -             i != j->second.end (); ++i) -        { -          if (*i == &e) -            i = j->second.erase (i); -        } -      } - -      void -      add_edge_left (Names& e, NamesIterator const& after) -      { -        NamesList::iterator i; - -        if (after.base () == names_.end ()) -          i = names_.insert (names_.begin (), &e); -        else -        { -          NamesList::iterator j (after.base ()); -          i = names_.insert (++j, &e); -        } - -        iterator_map_[&e] = i; -        names_map_[e.name ()].push_back (&e); -      } - -      using Nameable::add_edge_right; - -    protected: -      Scope () {} - -    private: -      NamesList names_; -      ListIteratorMap iterator_map_; -      NamesMap names_map_; -    }; - - -    // -    // -    class Belongs; -    class Inherits; -    class Arguments; - -    class Type: public virtual Nameable -    { -    protected: -      typedef std::vector<Belongs*> Classifies; -      typedef std::vector<Inherits*> Begets; -      typedef std::set<Arguments*> ArgumentsSet; - -    public: -      typedef pointer_iterator<Classifies::const_iterator> ClassifiesIterator; - -      ClassifiesIterator -      classifies_begin () const -      { -        return classifies_.begin (); -      } - -      ClassifiesIterator -      classifies_end () const -      { -        return classifies_.end (); -      } - -      // -      // -      bool -      inherits_p () const -      { -        return inherits_ != 0; -      } - -      Inherits& -      inherits () const -      { -        assert (inherits_ != 0); -        return *inherits_; -      } - -      // -      // -      typedef pointer_iterator<Begets::const_iterator> BegetsIterator; - -      BegetsIterator -      begets_begin () const -      { -        return begets_.begin (); -      } - -      BegetsIterator -      begets_end () const -      { -        return begets_.end (); -      } - -      // -      // -      typedef pointer_iterator<ArgumentsSet::const_iterator> ArgumentsIterator; - -      ArgumentsIterator -      arguments_begin () const -      { -        return arguments_.begin (); -      } - -      ArgumentsIterator -      arguments_end () const -      { -        return arguments_.end (); -      } - -    public: -      Type (): inherits_ (0) {} - -      void -      add_edge_right (Belongs& e) -      { -        classifies_.push_back (&e); -      } - -      void -      add_edge_right (Inherits& e) -      { -        begets_.push_back (&e); -      } - -      using Nameable::add_edge_right; - -      void -      add_edge_left (Arguments& a) -      { -        arguments_.insert (&a); -      } - -      void -      remove_edge_left (Arguments&); - -      void -      add_edge_left (Inherits& e) -      { -        inherits_ = &e; -      } - -    private: -      Inherits* inherits_; -      Begets begets_; -      Classifies classifies_; -      ArgumentsSet arguments_; -    }; - -    class Instance: public virtual Nameable -    { -    public: -      Belongs& -      belongs () const -      { -        return *belongs_; -      } - -      Type& -      type () const; - -      bool -      typed_p () const -      { -        return belongs_ != 0; -      } - -    public: -      Instance (): belongs_ (0) {} - -      void -      add_edge_left (Belongs& e) -      { -        belongs_ = &e; -      } - -    private: -      Belongs* belongs_; -    }; - - -    class Belongs: public virtual Edge -    { -    public: -      Instance& -      instance () const -      { -        return *instance_; -      } - -      Type& -      type () const -      { -        return *type_; -      } - -    public: -      void -      set_left_node (Instance& n) -      { -        instance_ = &n; -      } - -      void -      set_right_node (Type& n) -      { -        type_ = &n; -      } - -    private: -      Instance* instance_; -      Type* type_; -    }; - - -    // -    // -    class Inherits: public virtual Edge -    { -    public: -      Type& -      base () const -      { -        return *base_; -      } - -      Type& -      derived () const -      { -        return *derived_; -      } - -    public: -      void -      set_left_node (Type& n) -      { -        derived_ = &n; -      } - -      void -      set_right_node (Type& n) -      { -        base_ = &n; -      } - -    private: -      Type* base_; -      Type* derived_; -    }; - -    class Extends: public virtual Inherits -    { -    }; - -    class Restricts: public virtual Inherits -    { -    public: -      typedef std::map<String, String> Facets; -      typedef Facets::iterator FacetIterator; - -      bool -      facet_empty () -      { -        return facets_.empty (); -      } - -      FacetIterator -      facet_begin () -      { -        return facets_.begin (); -      } - -      FacetIterator -      facet_end () -      { -        return facets_.end (); -      } - -      FacetIterator -      facet_find (String const& name) -      { -        return facets_.find (name); -      } - -      void -      facet_insert (String const& name, String const& value) -      { -        facets_[name] = value; -      } - -      Facets const& -      facets () const -      { -        return facets_; -      } - -    protected: -      Facets facets_; -    }; - - -    // -    // -    class Member; -    class Namespace; - -    class BelongsToNamespace: public virtual Edge -    { -    public: -      Member& -      member () const -      { -        assert (member_ != 0); -        return *member_; -      } - -      Namespace& -      namespace_ () const -      { -        assert (namespace__ != 0); -        return *namespace__; -      } - -    public: -      BelongsToNamespace (): member_ (0), namespace__ (0) {} - -      void -      set_left_node (Member& n) -      { -        member_ = &n; -      } - -      void -      set_right_node (Namespace& n) -      { -        namespace__ = &n; -      } - -    private: -      Member* member_; -      Namespace* namespace__; -    }; - -    // -    // -    class Member: public virtual Instance -    { -    public: -      // Member is global either if it is defined outside any type -      // or it is a ref="" of a global member. -      // -      bool -      global_p () const -      { -        return global_; -      } - -      bool -      qualified_p () const -      { -        return qualified_; -      } - -      // Note that only qualified members belong to a namespace. -      // -      Namespace& -      namespace_ () const -      { -        assert (belongs_to_namespace_ != 0); -        return belongs_to_namespace_->namespace_ (); -      } - - -      // Default and fixed value API. Note that the fixed value semantics -      // is a superset of the default value semantics. As such setting the -      // fixed value appears as if the default value was also set. -      // -      bool -      default_p () const -      { -        return value_type_ != ValueType::none; -      } - -      bool -      fixed_p () const -      { -        return value_type_ == ValueType::fixed; -      } - -      struct NoValue {}; - -      String -      value () const -      { -        if (value_type_ != ValueType::none) -          return value_; -        else -          throw NoValue (); -      } - -      // -      // -      void -      default_ (String const& v) -      { -        value_ = v; -        value_type_ = ValueType::default_; -      } - -      void -      fixed (String const& v) -      { -        value_ = v; -        value_type_ = ValueType::fixed; -      } - -    public: -      Member (bool global, bool qualified) -          : global_ (global), -            qualified_ (qualified), -            belongs_to_namespace_ (0), -            value_type_ (ValueType::none) -      { -      } - -      void -      add_edge_left (BelongsToNamespace& e) -      { -        // In the parser we sometimes re-add the same adge. -        // -        belongs_to_namespace_ = &e; -      } - -      using Instance::add_edge_left; - -    private: -      bool global_; -      bool qualified_; -      BelongsToNamespace* belongs_to_namespace_; - -      struct ValueType -      { -        enum Value -        { -          none, -          default_, -          fixed -        }; -      }; - -      String value_; -      ValueType::Value value_type_; -    }; - - -    // Parametric types. -    // - -    class Specialization: public virtual Type -    { -      typedef std::vector<Arguments*> Argumented; - -    public: -      typedef pointer_iterator<Argumented::iterator> ArgumentedIterator; -      typedef -      pointer_iterator<Argumented::const_iterator> -      ArgumentedConstIterator; - -      ArgumentedIterator -      argumented_begin () -      { -        return argumented_.begin (); -      } - -      ArgumentedConstIterator -      argumented_begin () const -      { -        return argumented_.begin (); -      } - -      ArgumentedIterator -      argumented_end () -      { -        return argumented_.end (); -      } - -      ArgumentedConstIterator -      argumented_end () const -      { -        return argumented_.end (); -      } - -      // Shortcut for one-argument specializations. -      // -      Arguments& -      argumented () const -      { -        return *argumented_[0]; -      } - -    public: -      using Type::add_edge_right; - -      void -      add_edge_right (Arguments& a) -      { -        argumented_.push_back (&a); -      } - -      void -      add_edge_right (Arguments& a, ArgumentedIterator const& pos) -      { -        argumented_.insert (pos.base (), &a); -      } - -      void -      remove_edge_right (Arguments&); - -    private: -      Argumented argumented_; -    }; - -    class Arguments: public virtual Edge -    { -    public: -      Type& -      type () const -      { -        return *type_; -      } - -      Specialization& -      specialization () const -      { -        return *specialization_; -      } - -    public: -      void -      set_left_node (Type& n) -      { -        type_ = &n; -      } - -      void -      clear_left_node (Type& n) -      { -        assert (type_ == &n); -        type_ = 0; -      } - -      void -      set_right_node (Specialization& s) -      { -        specialization_ = &s; -      } - -      void -      clear_right_node (Specialization& s) -      { -        assert (specialization_ == &s); -        specialization_ = 0; -      } - -    private: -      Type* type_; -      Specialization* specialization_; -    }; - - -    // -    // -    class AnyType: public virtual Type -    { -    public: -      AnyType (Path const& file, unsigned long line, unsigned long column) -          : Node (file, line, column) -      { -      } - -    protected: -      AnyType () {} // For virtual inheritance. -    }; - - -    // -    // -    class AnySimpleType: public virtual Type -    { -    public: -      AnySimpleType (Path const& file, unsigned long line, unsigned long column) -          : Node (file, line, column) -      { -      } - -    protected: -      AnySimpleType () {} // For virtual inheritance. -    }; -  } -} - -// ADL won't find it because Path is a typedef. Note that this -// function prints in native format. -// -std::wostream& -operator<< (std::wostream& os, XSDFrontend::SemanticGraph::Path const& path); - -#endif  // XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENTS_HXX  | 
