From: Jerome St-Louis Date: Thu, 16 Apr 2015 21:20:21 +0000 (-0400) Subject: ecere/containers: Saving null containers as empty X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?p=sdk;a=commitdiff_plain;h=d28fcdc289b3d7d15fa8bdccef11d3d785581a08;hp=2a6d80f91b8125a60f61e8780de3be6ec1675c36 ecere/containers: Saving null containers as empty --- diff --git a/ecere/src/com/containers/Container.ec b/ecere/src/com/containers/Container.ec index 532758d..34f7dce 100644 --- a/ecere/src/com/containers/Container.ec +++ b/ecere/src/com/containers/Container.ec @@ -288,19 +288,21 @@ public: void OnSerialize(IOChannel channel) { - uint count = GetCount(); + // NOTE: Null containers currently get serialized as empty + uint count = this ? GetCount() : 0; IteratorPointer i; Class Dclass = class(D); bool isNormalClass = (Dclass.type == normalClass) && Dclass.structSize; channel.Put(count); - for(i = GetFirst(); i; i = GetNext(i)) - { - D data = GetData(i); - Class Eclass = isNormalClass ? ((Instance)data)._class : Dclass; - ((void (*)(void *, void *, void *))(void *)Eclass._vTbl[__ecereVMethodID_class_OnSerialize])(Eclass, - ((Dclass.type == systemClass && !Dclass.byValueSystemClass) || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, channel); - } + if(this) + for(i = GetFirst(); i; i = GetNext(i)) + { + D data = GetData(i); + Class Eclass = isNormalClass ? ((Instance)data)._class : Dclass; + ((void (*)(void *, void *, void *))(void *)Eclass._vTbl[__ecereVMethodID_class_OnSerialize])(Eclass, + ((Dclass.type == systemClass && !Dclass.byValueSystemClass) || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, channel); + } } void OnUnserialize(IOChannel channel)