From 475a7c89e1c858ae8fec466670af4628129a42d4 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 28 Aug 2011 11:39:17 +0200 Subject: Add wrapper support for containers --- odb/context.cxx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'odb/context.cxx') diff --git a/odb/context.cxx b/odb/context.cxx index 9d89879..fc82f29 100644 --- a/odb/context.cxx +++ b/odb/context.cxx @@ -318,7 +318,14 @@ member_type (semantics::data_member& m, string const& key_prefix) if (m.count (key)) return *indirect_value (m, key); - return *indirect_value (m.type (), key); + // "See throught" wrappers. + // + semantics::type& t (m.type ()); + + if (semantics::type* wt = wrapper (t)) + return *indirect_value (*wt, key); + else + return *indirect_value (t, key); } bool context:: @@ -938,7 +945,7 @@ namespace } virtual void - container (semantics::data_member& m) + container (semantics::data_member& m, semantics::type& c) { // We don't cross the container boundaries (separate table). // @@ -947,7 +954,7 @@ namespace flags_ & (context::test_container | context::test_straight_container | context::test_inverse_container), - context::container_vt (m.type ()), + context::container_vt (c), "value"); } @@ -982,17 +989,17 @@ is_a (semantics::data_member& m, if (f & test_container) { - r = r || container (m.type ()); + r = r || container_wrapper (m.type ()); } if (f & test_straight_container) { - r = r || (container (m.type ()) && !inverse (m, kp)); + r = r || (container_wrapper (m.type ()) && !inverse (m, kp)); } if (f & test_inverse_container) { - r = r || (container (m.type ()) && inverse (m, kp)); + r = r || (container_wrapper (m.type ()) && inverse (m, kp)); } return r; -- cgit v1.1