diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-08-19 13:47:18 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-08-19 13:47:18 +0200 |
commit | 7615f4dd87092aec82569bce68d75efcb82a90ae (patch) | |
tree | 5e64c96a12317be6ea381b512a7513203457273d | |
parent | cd804ef787b1225f3bc59f845bbe66c98b5c1013 (diff) |
Prevent nested class/typedef traversal
-rw-r--r-- | odb/common.hxx | 70 | ||||
-rw-r--r-- | odb/mysql/header.cxx | 2 | ||||
-rw-r--r-- | odb/mysql/inline.cxx | 2 | ||||
-rw-r--r-- | odb/mysql/source.cxx | 2 | ||||
-rw-r--r-- | odb/tracer/header.cxx | 2 | ||||
-rw-r--r-- | odb/tracer/inline.cxx | 2 | ||||
-rw-r--r-- | odb/tracer/source.cxx | 2 |
7 files changed, 41 insertions, 41 deletions
diff --git a/odb/common.hxx b/odb/common.hxx index ef188d8..e0fbbab 100644 --- a/odb/common.hxx +++ b/odb/common.hxx @@ -11,76 +11,80 @@ // Find id member. // -struct id_member: traversal::class_, - traversal::data_member, - context +struct id_member: traversal::class_ { - id_member (context& c) - : context (c) + id_member () { - *this >> names_ >> *this; + *this >> names_ >> member_; } semantics::data_member* member () const { - return m_; - } - - virtual void - traverse (semantics::data_member& m) - { - if (m.count ("id")) - m_ = &m; + return member_.m_; } virtual void traverse (semantics::class_& c) { - m_ = 0; + member_.m_ = 0; names (c); } private: + struct data_member: traversal::data_member + { + virtual void + traverse (semantics::data_member& m) + { + if (m.count ("id")) + m_ = &m; + } + + semantics::data_member* m_; + }; + + data_member member_; traversal::names names_; - semantics::data_member* m_; }; -// Find id member. +// Count persistent members. // -struct member_count: traversal::class_, - traversal::data_member, - context +struct member_count: traversal::class_ { - member_count (context& c) - : context (c) + member_count () { - *this >> names_ >> *this; + *this >> names_ >> member_; } std::size_t count () const { - return count_; - } - - virtual void - traverse (semantics::data_member& m) - { - if (!m.count ("transient")) - count_++; + return member_.count_; } virtual void traverse (semantics::class_& c) { - count_ = 0; + member_.count_ = 0; names (c); } private: + struct data_member: traversal::data_member + { + virtual void + traverse (semantics::data_member& m) + { + if (!m.count ("transient")) + count_++; + } + + std::size_t count_; + }; + + data_member member_; traversal::names names_; - std::size_t count_; }; #endif // ODB_COMMON_HXX diff --git a/odb/mysql/header.cxx b/odb/mysql/header.cxx index 8239d55..5e64c12 100644 --- a/odb/mysql/header.cxx +++ b/odb/mysql/header.cxx @@ -198,8 +198,6 @@ namespace mysql { class_ (context& c) : context (c), - id_member_ (c), - member_count_ (c), image_type_ (c), id_image_type_ (c), query_column_ (c) diff --git a/odb/mysql/inline.cxx b/odb/mysql/inline.cxx index 1bb5fef..4a1fffa 100644 --- a/odb/mysql/inline.cxx +++ b/odb/mysql/inline.cxx @@ -29,7 +29,7 @@ namespace mysql string const& type (c.fq_name ()); string traits ("access::object_traits< " + type + " >"); - id_member t (*this); + id_member t; t.traverse (c); semantics::data_member& id (*t.member ()); diff --git a/odb/mysql/source.cxx b/odb/mysql/source.cxx index 9d47541..9cf69b1 100644 --- a/odb/mysql/source.cxx +++ b/odb/mysql/source.cxx @@ -631,8 +631,6 @@ namespace mysql { class_ (context& c) : context (c), - id_member_ (c), - member_count_ (c), init_image_member_ (c, false), init_id_image_member_ (c, true), init_value_member_ (c) diff --git a/odb/tracer/header.cxx b/odb/tracer/header.cxx index 7efe5df..011ff9d 100644 --- a/odb/tracer/header.cxx +++ b/odb/tracer/header.cxx @@ -30,7 +30,7 @@ namespace tracer // Find the id member and type. // - id_member t (*this); + id_member t; t.traverse (c); if (t.member () == 0) diff --git a/odb/tracer/inline.cxx b/odb/tracer/inline.cxx index ef8cf15..10839a6 100644 --- a/odb/tracer/inline.cxx +++ b/odb/tracer/inline.cxx @@ -29,7 +29,7 @@ namespace tracer string const& type (c.fq_name ()); string traits ("access::object_traits< " + type + " >"); - id_member t (*this); + id_member t; t.traverse (c); semantics::data_member& id (*t.member ()); diff --git a/odb/tracer/source.cxx b/odb/tracer/source.cxx index 77dfa7a..0734099 100644 --- a/odb/tracer/source.cxx +++ b/odb/tracer/source.cxx @@ -29,7 +29,7 @@ namespace tracer string const& type (c.fq_name ()); string traits ("access::object_traits< " + type + " >"); - id_member t (*this); + id_member t; t.traverse (c); semantics::data_member& id (*t.member ()); |