summaryrefslogtreecommitdiff
path: root/odb/semantics/relational/elements.txx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/semantics/relational/elements.txx')
-rw-r--r--odb/semantics/relational/elements.txx216
1 files changed, 0 insertions, 216 deletions
diff --git a/odb/semantics/relational/elements.txx b/odb/semantics/relational/elements.txx
deleted file mode 100644
index be82197..0000000
--- a/odb/semantics/relational/elements.txx
+++ /dev/null
@@ -1,216 +0,0 @@
-// file : odb/semantics/relational/elements.txx
-// copyright : Copyright (c) 2009-2019 Code Synthesis Tools CC
-// license : GNU GPL v3; see accompanying LICENSE file
-
-namespace semantics
-{
- namespace relational
- {
- // nameable
- //
- template <typename N>
- typename nameable<N>::parser_map nameable<N>::parser_map_;
-
- template <typename N>
- template <typename T>
- void nameable<N>::
- parser_impl (xml::parser& p, scope_type& s, graph& g)
- {
- name_type n (p.attribute ("name", name_type ()));
- T& x (g.new_node<T> (p, s, g));
- g.new_edge<names_type> (s, x, n);
- }
-
- template <typename N>
- nameable<N>::
- nameable (nameable const& n, graph&)
- : id_ (n.id_), named_ (0)
- {
- }
-
- template <typename N>
- nameable<N>::
- nameable (xml::parser&, graph&)
- // : id_ (p.attribute<string> ("id"))
- : named_ (0)
- {
- // The name attribute is handled in parser_impl().
- }
-
- template <typename N>
- void nameable<N>::
- serialize_attributes (xml::serializer& s) const
- {
- // Omit empty names (e.g., a primary key).
- //
- name_type const& n (name ());
- if (!n.empty ())
- s.attribute ("name", n);
-
- //s.attribute ("id", id_);
- }
-
- // scope
- //
-
- template <typename N>
- template <typename T, typename S>
- T* scope<N>::
- lookup (name_type const& name)
- {
- if (T* r = find<T> (name))
- return r;
-
- if (scope* b = base ())
- {
- if (find<S> (name) == 0)
- return b->lookup<T, S> (name);
- }
-
- return 0;
- }
-
- template <typename N>
- template <typename T>
- T* scope<N>::
- find (name_type const& name)
- {
- typename names_map::iterator i (names_map_.find (name));
- return i != names_map_.end ()
- ? dynamic_cast<T*> (&(*i->second)->nameable ())
- : 0;
- }
-
- template <typename N>
- typename scope<N>::names_iterator scope<N>::
- find (name_type const& name)
- {
- typename names_map::iterator i (names_map_.find (name));
-
- if (i == names_map_.end ())
- return names_.end ();
- else
- return i->second;
- }
-
- template <typename N>
- typename scope<N>::names_const_iterator scope<N>::
- find (name_type const& name) const
- {
- typename names_map::const_iterator i (names_map_.find (name));
-
- if (i == names_map_.end ())
- return names_.end ();
- else
- return names_const_iterator (i->second);
- }
-
- template <typename N>
- typename scope<N>::names_iterator scope<N>::
- find (names_type const& e)
- {
- typename names_iterator_map::iterator i (iterator_map_.find (&e));
- return i != iterator_map_.end () ? i->second : names_.end ();
- }
-
- template <typename N>
- typename scope<N>::names_const_iterator scope<N>::
- find (names_type const& e) const
- {
- typename names_iterator_map::const_iterator i (iterator_map_.find (&e));
- return i != iterator_map_.end () ? i->second : names_.end ();
- }
-
- template <typename N>
- scope<N>::
- scope (scope const& s, scope* base, graph& g)
- : first_key_ (names_.end ()),
- first_drop_column_ (names_.end ()),
- alters_ (0)
- {
- // Set the alters edge for lookup.
- //
- if (base != 0)
- g.new_edge<alters> (*this, *base);
-
- for (names_const_iterator i (s.names_begin ());
- i != s.names_end (); ++i)
- {
- nameable_type& n (i->nameable ().clone (*this, g));
- g.new_edge<names_type> (*this, n, i->name ());
- }
- }
-
- template <typename N>
- scope<N>::
- scope (xml::parser& p, scope* base, graph& g)
- : first_key_ (names_.end ()),
- first_drop_column_ (names_.end ()),
- alters_ (0)
- {
- // Set the alters edge for lookup.
- //
- if (base != 0)
- g.new_edge<alters> (*this, *base);
-
- using namespace xml;
- p.content (content::complex);
-
- for (parser::event_type e (p.peek ());
- e == parser::start_element;
- e = p.peek ())
- {
- typename nameable_type::parser_map::iterator i (
- nameable_type::parser_map_.find (p.name ()));
-
- if (p.namespace_ () != xmlns || i == nameable_type::parser_map_.end ())
- break; // Not one of our elements.
-
- p.next ();
- i->second (p, *this, g);
- p.next_expect (parser::end_element);
- }
- }
-
- template <typename N>
- void scope<N>::
- serialize_content (xml::serializer& s) const
- {
- for (names_const_iterator i (names_begin ()); i != names_end (); ++i)
- i->nameable ().serialize (s);
- }
-
- class column;
- class primary_key;
-
- template <typename N>
- void scope<N>::
- add_edge_left (names_type& e)
- {
- name_type const& name (e.name ());
-
- typename names_map::iterator i (names_map_.find (name));
-
- if (i == names_map_.end ())
- {
- typename names_list::iterator i (names_.insert (names_.end (), &e));
- names_map_[name] = i;
- iterator_map_[&e] = i;
- }
- else
- throw duplicate_name (*this, (*i->second)->nameable (), e.nameable ());
- }
-
- template <typename N>
- void scope<N>::
- remove_edge_left (names_type& e)
- {
- typename names_iterator_map::iterator i (iterator_map_.find (&e));
- assert (i != iterator_map_.end ());
-
- names_.erase (i->second);
- names_map_.erase (e.name ());
- iterator_map_.erase (i);
- }
- }
-}