From 19ba163feb74def218861b4b3981e713b358d1c8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 24 Nov 2010 10:18:09 +0200 Subject: Add support for unordered storage of ordered containers New pragma: unordered. --- odb/mysql/header.cxx | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) (limited to 'odb/mysql/header.cxx') diff --git a/odb/mysql/header.cxx b/odb/mysql/header.cxx index 4d604a4..119219a 100644 --- a/odb/mysql/header.cxx +++ b/odb/mysql/header.cxx @@ -244,11 +244,17 @@ namespace mysql type* it (0); type* kt (0); + bool ordered (false); + switch (ck) { case ck_ordered: { - it = &container_it (t); + if (!m.count ("unordered")) + { + it = &container_it (t); + ordered = true; + } break; } case ck_map: @@ -276,8 +282,11 @@ namespace mysql { // Add one for the index. // - data_columns++; - cond_columns++; + if (ordered) + { + data_columns++; + cond_columns++; + } break; } case ck_map: @@ -410,10 +419,13 @@ namespace mysql { case ck_ordered: { - os << "// index" << endl - << "//" << endl; - image_member im (*this, "index_", *it, "index_type", "index"); - im.traverse (m); + if (ordered) + { + os << "// index" << endl + << "//" << endl; + image_member im (*this, "index_", *it, "index_type", "index"); + im.traverse (m); + } break; } case ck_map: @@ -448,10 +460,13 @@ namespace mysql { case ck_ordered: { - os << "// index" << endl - << "//" << endl; - image_member im (*this, "index_", *it, "index_type", "index"); - im.traverse (m); + if (ordered) + { + os << "// index" << endl + << "//" << endl; + image_member im (*this, "index_", *it, "index_type", "index"); + im.traverse (m); + } break; } case ck_map: @@ -511,7 +526,10 @@ namespace mysql { case ck_ordered: { - os << "init (data_image_type&, index_type, const value_type&);"; + if (ordered) + os << "init (data_image_type&, index_type, const value_type&);"; + else + os << "init (data_image_type&, const value_type&);"; break; } case ck_map: @@ -538,7 +556,10 @@ namespace mysql { case ck_ordered: { - os << "init (index_type&, value_type&, "; + if (ordered) + os << "init (index_type&, value_type&, "; + else + os << "init (value_type&, "; break; } case ck_map: -- cgit v1.1