From a482f1c4dd4efab83d3b19309900f1cbf54383a5 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 15 Oct 2013 07:01:17 +0200 Subject: Automatically map C++11 enum classes (strong enums) --- odb/traversal/enum.cxx | 21 +++++++++++++++++++++ odb/traversal/enum.hxx | 23 +++++++++++++++++++---- 2 files changed, 40 insertions(+), 4 deletions(-) (limited to 'odb/traversal') 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 { - enumerates () - { - } - + enumerates () {} enumerates (node_dispatcher& n) { node_traverser (n); @@ -27,12 +24,30 @@ namespace traversal struct enumerator: node {}; + struct underlies: edge + { + underlies () {} + underlies (node_dispatcher& n) + { + node_traverser (n); + } + + virtual void + traverse (type&); + }; + struct enum_: node { virtual void traverse (type&); virtual void + underlied (type&); + + virtual void + underlied (type&, edge_dispatcher&); + + virtual void enumerates (type&); virtual void -- cgit v1.1