From 6aab653d6975b92c11eef1b56f025c11e6d8e612 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 30 Jul 2010 13:30:16 +0200 Subject: Add support for the rest of database operations --- odb/common.hxx | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'odb/common.hxx') diff --git a/odb/common.hxx b/odb/common.hxx index 5588f00..ef188d8 100644 --- a/odb/common.hxx +++ b/odb/common.hxx @@ -6,6 +6,7 @@ #ifndef ODB_COMMON_HXX #define ODB_COMMON_HXX +#include // std::size_t #include // Find id member. @@ -15,7 +16,7 @@ struct id_member: traversal::class_, context { id_member (context& c) - : context (c), m_ (0) + : context (c) { *this >> names_ >> *this; } @@ -33,11 +34,53 @@ struct id_member: traversal::class_, m_ = &m; } - using class_::traverse; + virtual void + traverse (semantics::class_& c) + { + m_ = 0; + names (c); + } private: traversal::names names_; semantics::data_member* m_; }; +// Find id member. +// +struct member_count: traversal::class_, + traversal::data_member, + context +{ + member_count (context& c) + : context (c) + { + *this >> names_ >> *this; + } + + std::size_t + count () const + { + return count_; + } + + virtual void + traverse (semantics::data_member& m) + { + if (!m.count ("transient")) + count_++; + } + + virtual void + traverse (semantics::class_& c) + { + count_ = 0; + names (c); + } + +private: + traversal::names names_; + std::size_t count_; +}; + #endif // ODB_COMMON_HXX -- cgit v1.1