From 7f6c64f2211d37db76a97fbc79a4b5492302ef2f Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 27 Oct 2010 17:36:59 +0200 Subject: Implement support for composite value types New test: common/composite. --- odb/common.hxx | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) (limited to 'odb/common.hxx') diff --git a/odb/common.hxx b/odb/common.hxx index 952a7dd..dcfe87f 100644 --- a/odb/common.hxx +++ b/odb/common.hxx @@ -6,7 +6,9 @@ #ifndef ODB_COMMON_HXX #define ODB_COMMON_HXX +#include #include // std::size_t + #include // Find id member. @@ -48,43 +50,49 @@ private: traversal::names names_; }; -// Count persistent members. +// Traverse object columns. // -struct member_count: traversal::class_ +struct object_columns_base: traversal::class_ { - member_count () - { - *this >> names_ >> member_; - } + virtual void + column (semantics::data_member&, std::string const& name, bool first) = 0; - std::size_t - count () const + // If you override this callback, always call the base. + // + virtual void + composite (semantics::data_member&); + + object_columns_base (context& c) + : member_ (c, *this) { - return member_.count_; + *this >> names_ >> member_; + *this >> inherits_ >> *this; } virtual void - traverse (semantics::class_& c) - { - member_.count_ = 0; - names (c); - } + traverse (semantics::class_&); private: - struct data_member: traversal::data_member + struct member: traversal::data_member, context { - virtual void - traverse (semantics::data_member& m) + member (context& c, object_columns_base& oc) + : context (c), oc_ (oc), first_ (true) { - if (!m.count ("transient")) - count_++; } - std::size_t count_; + virtual void + traverse (semantics::data_member&); + + private: + object_columns_base& oc_; + + string prefix_; + bool first_; }; - data_member member_; + member member_; traversal::names names_; + traversal::inherits inherits_; }; #endif // ODB_COMMON_HXX -- cgit v1.1