diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-04-25 12:30:04 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-04-25 12:30:04 +0200 |
commit | d7662d2cc72668eee0a21737edfcc1bbe41c229b (patch) | |
tree | 7a7c61af162e1bdb870a701cb54a747f6bafa0eb /odb/common.cxx | |
parent | 82d1a3918899958cb26ed77119fbf908beb94dbc (diff) |
Reuse container traits from composite values
Diffstat (limited to 'odb/common.cxx')
-rw-r--r-- | odb/common.cxx | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/odb/common.cxx b/odb/common.cxx index bf163d4..20fd354 100644 --- a/odb/common.cxx +++ b/odb/common.cxx @@ -17,21 +17,28 @@ simple (semantics::data_member&) } void object_members_base:: -composite (semantics::data_member&, semantics::class_& c) +container (semantics::data_member&) +{ +} + +void object_members_base:: +composite (semantics::data_member*, semantics::class_& c) { inherits (c); names (c); } void object_members_base:: -container (semantics::data_member&) +object (semantics::class_& c) { + inherits (c); + names (c); } void object_members_base:: traverse_composite (semantics::data_member& m, semantics::class_& c) { - composite (m, c); + composite (&m, c); } void object_members_base:: @@ -47,8 +54,8 @@ traverse (semantics::class_& c) semantics::class_* prev; if (obj) { - prev = object; - object = &c; + prev = context::object; + context::object = &c; } if (obj && build_table_prefix_) @@ -65,8 +72,7 @@ traverse (semantics::class_& c) tb = true; } - inherits (c); - names (c); + object (c); if (tb) { @@ -76,12 +82,14 @@ traverse (semantics::class_& c) } else { - inherits (c); - names (c); + if (obj) + object (c); + else + composite (0, c); } if (obj) - object = prev; + context::object = prev; } void object_members_base::member:: @@ -134,7 +142,7 @@ traverse (semantics::data_member& m) om_.table_prefix_.level++; } - om_.composite (m, *comp); + om_.composite (&m, *comp); if (om_.build_table_prefix_) { |