From 98acbdd43a32018c29f2f83dbfeef1ef751e5911 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 17 Nov 2010 18:19:02 +0200 Subject: Minor code rework --- odb/mysql/context.cxx | 67 ++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 43 deletions(-) (limited to 'odb/mysql') diff --git a/odb/mysql/context.cxx b/odb/mysql/context.cxx index de3eed0..b3c753b 100644 --- a/odb/mysql/context.cxx +++ b/odb/mysql/context.cxx @@ -81,19 +81,12 @@ namespace mysql { struct has_grow: traversal::class_ { - has_grow () + has_grow (bool& r) + : r_ (r) { *this >> inherits_ >> *this; } - bool - dispatch (type& c) - { - r_ = false; - traverse (c); - return r_; - } - virtual void traverse (type& c) { @@ -113,76 +106,65 @@ namespace mysql } private: - friend class has_grow_member; - - bool r_; + bool& r_; traversal::inherits inherits_; }; struct has_grow_member: member_base { - has_grow_member (context& c, has_grow& hg) - : member_base (c), hg_ (hg) + has_grow_member (context& c, bool& r) + : member_base (c), r_ (r) { } has_grow_member (context& c, - has_grow& hg, + bool& r, semantics::type& type, string const& key_prefix) - : member_base (c, "", type, "", key_prefix), hg_ (hg) - { - } - - bool - dispatch (semantics::data_member& m) + : member_base (c, "", type, "", key_prefix), r_ (r) { - hg_.r_ = false; - member_base::traverse (m); - return hg_.r_; } virtual void traverse_composite (member_info& mi) { - // Reset any overrides. + // By calling grow() instead of recursing, we reset any overrides. // - if (!hg_.r_) - hg_.r_ = context::grow (dynamic_cast (mi.t)); + r_ = r_ || context::grow (dynamic_cast (mi.t)); } virtual void traverse_decimal (member_info&) { - hg_.r_ = true; + r_ = true; } virtual void traverse_long_string (member_info&) { - hg_.r_ = true; + r_ = true; } virtual void traverse_short_string (member_info&) { - hg_.r_ = true; // @@ Short string optimization disabled. + r_ = true; // @@ Short string optimization disabled. } virtual void traverse_enum (member_info&) { - hg_.r_ = true; + r_ = true; } virtual void traverse_set (member_info&) { - hg_.r_ = true; + r_ = true; } private: - has_grow& hg_; + bool& r_; }; } @@ -192,23 +174,22 @@ namespace mysql if (c.count ("mysql::grow")) return c.get ("mysql::grow"); - has_grow ct; - has_grow_member mt (*this, ct); + bool r (false); + has_grow ct (r); + has_grow_member mt (*this, r); traversal::names names; ct >> names >> mt; - - return ct.dispatch (c); + ct.traverse (c); + return r; } bool context:: grow (semantics::data_member& m, semantics::type& t, string const& kp) { - has_grow ct; - has_grow_member mt (*this, ct, t, kp); - traversal::names names; - ct >> names >> mt; - - return mt.dispatch (m); + bool r (false); + has_grow_member mt (*this, r, t, kp); + mt.traverse (m); + return r; } // -- cgit v1.1