aboutsummaryrefslogtreecommitdiff
path: root/odb/traversal
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-10-15 07:01:17 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-10-15 07:01:17 +0200
commita482f1c4dd4efab83d3b19309900f1cbf54383a5 (patch)
tree3c1ab27e420cbf760a54a1c4be61bbd0448a4873 /odb/traversal
parent400d258aab3722be3a4b8548870afad1574f3ad8 (diff)
Automatically map C++11 enum classes (strong enums)
Diffstat (limited to 'odb/traversal')
-rw-r--r--odb/traversal/enum.cxx21
-rw-r--r--odb/traversal/enum.hxx23
2 files changed, 40 insertions, 4 deletions
diff --git a/odb/traversal/enum.cxx b/odb/traversal/enum.cxx
index 149f962..fd4ff89 100644
--- a/odb/traversal/enum.cxx
+++ b/odb/traversal/enum.cxx
@@ -14,13 +14,34 @@ namespace traversal
//
//
+ void underlies::
+ traverse (type& u)
+ {
+ dispatch (u.type ());
+ }
+
+ //
+ //
void enum_::
traverse (type& e)
{
+ underlied (e);
enumerates (e);
}
void enum_::
+ underlied (type& e)
+ {
+ underlied (e, *this);
+ }
+
+ void enum_::
+ underlied (type& e, edge_dispatcher& d)
+ {
+ d.dispatch (e.underlied ());
+ }
+
+ void enum_::
enumerates (type& e)
{
enumerates (e, *this);
diff --git a/odb/traversal/enum.hxx b/odb/traversal/enum.hxx
index 1efccaa..c949934 100644
--- a/odb/traversal/enum.hxx
+++ b/odb/traversal/enum.hxx
@@ -12,10 +12,7 @@ namespace traversal
{
struct enumerates: edge<semantics::enumerates>
{
- enumerates ()
- {
- }
-
+ enumerates () {}
enumerates (node_dispatcher& n)
{
node_traverser (n);
@@ -27,12 +24,30 @@ namespace traversal
struct enumerator: node<semantics::enumerator> {};
+ struct underlies: edge<semantics::underlies>
+ {
+ underlies () {}
+ underlies (node_dispatcher& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual void
+ traverse (type&);
+ };
+
struct enum_: node<semantics::enum_>
{
virtual void
traverse (type&);
virtual void
+ underlied (type&);
+
+ virtual void
+ underlied (type&, edge_dispatcher&);
+
+ virtual void
enumerates (type&);
virtual void