From 1d438c0c211d21e33f3eec833a307416000b32a2 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 2 Jul 2015 11:43:37 +0200 Subject: C++ type mapping support for container elements --- odb/relational/header.hxx | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'odb/relational/header.hxx') diff --git a/odb/relational/header.hxx b/odb/relational/header.hxx index 63dea09..032884a 100644 --- a/odb/relational/header.hxx +++ b/odb/relational/header.hxx @@ -21,17 +21,14 @@ namespace relational typedef image_member base; image_member (string const& var = string ()) - : member_base (var, 0, string (), string ()) - { - } + : member_base (var, 0, 0, string (), string ()) {} image_member (string const& var, semantics::type& t, + const custom_cxx_type* ct, string const& fq_type, string const& key_prefix) - : member_base (var, &t, fq_type, key_prefix) - { - } + : member_base (var, &t, ct, fq_type, key_prefix) {} }; template @@ -43,6 +40,7 @@ namespace relational : member_base::base (x), // virtual base base (x), member_image_type_ (base::type_override_, + base::custom_override_, base::fq_type_override_, base::key_prefix_) { @@ -283,7 +281,11 @@ namespace relational container_kind_type ck (container_kind (c)); - type& vt (container_vt (c)); + const custom_cxx_type* vct (0); + const custom_cxx_type* ict (0); + const custom_cxx_type* kct (0); + + type& vt (container_vt (m, &vct)); type* it (0); type* kt (0); @@ -296,7 +298,7 @@ namespace relational { if (!unordered (m)) { - it = &container_it (c); + it = &container_it (m, &ict); ordered = true; } break; @@ -304,7 +306,7 @@ namespace relational case ck_map: case ck_multimap: { - kt = &container_kt (c); + kt = &container_kt (m, &kct); break; } case ck_set: @@ -578,7 +580,7 @@ namespace relational os << "// index" << endl << "//" << endl; instance im ( - "index_", *it, "index_type", "index"); + "index_", *it, ict, "index_type", "index"); im->traverse (m); } break; @@ -588,7 +590,7 @@ namespace relational { os << "// key" << endl << "//" << endl; - instance im ("key_", *kt, "key_type", "key"); + instance im ("key_", *kt, kct, "key_type", "key"); im->traverse (m); break; } @@ -597,7 +599,8 @@ namespace relational { os << "// value" << endl << "//" << endl; - instance im ("value_", vt, "value_type", "value"); + instance im ( + "value_", vt, vct, "value_type", "value"); im->traverse (m); break; } @@ -620,7 +623,8 @@ namespace relational { os << "// index" << endl << "//" << endl; - instance im ("index_", *it, "index_type", "index"); + instance im ( + "index_", *it, ict, "index_type", "index"); im->traverse (m); } break; @@ -630,7 +634,7 @@ namespace relational { os << "// key" << endl << "//" << endl; - instance im ("key_", *kt, "key_type", "key"); + instance im ("key_", *kt, kct, "key_type", "key"); im->traverse (m); break; } @@ -643,7 +647,7 @@ namespace relational os << "// value" << endl << "//" << endl; - instance im ("value_", vt, "value_type", "value"); + instance im ("value_", vt, vct, "value_type", "value"); im->traverse (m); os << "std::size_t version;" -- cgit v1.1