X-Git-Url: http://ecere.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ecere%2Fsrc%2Fcom%2Fcontainers%2FContainer.ec;h=483c362ee4145d21fc5eecdc381e0878d7609b75;hb=58f3bdd708079e55fbfcb4e5afb7771c57b445e5;hp=d357a5f6833f488b6e3b38c4f1a73d5d9ead1984;hpb=92e2282dc6bcc0ec458e69d116861066a30f3006;p=sdk diff --git a/ecere/src/com/containers/Container.ec b/ecere/src/com/containers/Container.ec index d357a5f..483c362 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)