From c1c45a5db9ba52111978f69eea8a6823ee467459 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 7 Apr 2014 15:28:07 -0400 Subject: [PATCH] Do not clear all extension items tied to objects when unserializing. Instead, pass the old object to the unserialization functions and let them incrementally update the object. --- include/extensible.h | 4 ++++ src/extensible.cpp | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/extensible.h b/include/extensible.h index f33312393..2a852ff47 100644 --- a/include/extensible.h +++ b/include/extensible.h @@ -176,6 +176,8 @@ class SerializableExtensibleItem : public PrimitiveExtensibleItem T t; if (data[this->name] >> t) this->Set(e, t); + else + this->Unset(e); } }; @@ -196,6 +198,8 @@ class SerializableExtensibleItem : public PrimitiveExtensibleItem data[this->name] >> b; if (b) this->Set(e); + else + this->Unset(e); } }; diff --git a/src/extensible.cpp b/src/extensible.cpp index 552ad5d2b..37206f7c1 100644 --- a/src/extensible.cpp +++ b/src/extensible.cpp @@ -49,9 +49,6 @@ void Extensible::ExtensibleSerialize(const Extensible *e, const Serializable *s, void Extensible::ExtensibleUnserialize(Extensible *e, Serializable *s, Serialize::Data &data) { - while (!e->extension_items.empty()) - (*e->extension_items.begin())->Unset(e); - for (std::set::iterator it = extensible_items.begin(); it != extensible_items.end(); ++it) { ExtensibleBase *eb = *it;