aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/serializer
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2009-03-26 17:09:53 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2009-03-26 17:09:53 +0200
commite4c22d3686da0e973e21eae0561c1169c0eeff36 (patch)
tree0a49e9167edc88938b0287949080931314e8afea /libxsde/xsde/cxx/serializer
parent0d62005a3ff3b62d02c2eb3fd8644e0e19b202e8 (diff)
Implement support for XML Schema polymorphism in C++/Hybrid
examples/cxx/hybrid/polyroot/ examples/cxx/hybrid/polymorphism/: new examples tests/cxx/hybrid/polymorphism/: new tests
Diffstat (limited to 'libxsde/xsde/cxx/serializer')
-rw-r--r--libxsde/xsde/cxx/serializer/map.cxx8
-rw-r--r--libxsde/xsde/cxx/serializer/map.hxx1
-rw-r--r--libxsde/xsde/cxx/serializer/map.ixx2
3 files changed, 10 insertions, 1 deletions
diff --git a/libxsde/xsde/cxx/serializer/map.cxx b/libxsde/xsde/cxx/serializer/map.cxx
index 1ace4ac..f3c88f6 100644
--- a/libxsde/xsde/cxx/serializer/map.cxx
+++ b/libxsde/xsde/cxx/serializer/map.cxx
@@ -23,12 +23,20 @@ namespace xsde
void serializer_map_impl::
reset () const
{
+ if (resetting_)
+ return;
+
+ bool& r = const_cast<bool&> (resetting_);
+ r = true;
+
for (hashmap::const_iterator i (map_.begin ()), e (map_.end ());
i != e; ++i)
{
serializer_base* s = *static_cast<serializer_base* const*> (*i);
s->_reset ();
}
+
+ r = false;
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/map.hxx b/libxsde/xsde/cxx/serializer/map.hxx
index 2cfc755..1fe4eb0 100644
--- a/libxsde/xsde/cxx/serializer/map.hxx
+++ b/libxsde/xsde/cxx/serializer/map.hxx
@@ -86,6 +86,7 @@ namespace xsde
private:
hashmap map_;
+ bool resetting_;
};
}
}
diff --git a/libxsde/xsde/cxx/serializer/map.ixx b/libxsde/xsde/cxx/serializer/map.ixx
index 64eb19a..e1c2a28 100644
--- a/libxsde/xsde/cxx/serializer/map.ixx
+++ b/libxsde/xsde/cxx/serializer/map.ixx
@@ -19,7 +19,7 @@ namespace xsde
inline serializer_map_impl::
serializer_map_impl (size_t buckets)
- : map_ (buckets, sizeof (serializer_base*))
+ : map_ (buckets, sizeof (serializer_base*)), resetting_ (false)
{
}