{
Class Tclass = class(MT);
// Copy key here
- if(Tclass.type == systemClass || Tclass.type == bitClass || Tclass.type == enumClass || Tclass.type == unitClass)
+ if((Tclass.type == systemClass && !Tclass.byValueSystemClass) || Tclass.type == bitClass || Tclass.type == enumClass || Tclass.type == unitClass)
{
((void (*)(void *, void *, void *))(void *)Tclass._vTbl[__ecereVMethodID_class_OnCopy])(Tclass, (((byte *)&(uint64)newNode.key) + __ENDIAN_PAD(Tclass.typeSize)),
(((byte *)&(uint64)newNode.key) + __ENDIAN_PAD(Tclass.typeSize)));
{
node = MapNode<MT, V> { key = pos };
}
- if(Tclass.type == systemClass || Tclass.type == bitClass || Tclass.type == enumClass || Tclass.type == unitClass)
+ if((Tclass.type == systemClass && !Tclass.byValueSystemClass) || Tclass.type == bitClass || Tclass.type == enumClass || Tclass.type == unitClass)
{
((void (*)(void *, void *, void *))(void *)Tclass._vTbl[__ecereVMethodID_class_OnCopy])(Tclass, (((byte *)&(uint64)node.key) + __ENDIAN_PAD(Tclass.typeSize)),
(((byte *)&(uint64)pos) + __ENDIAN_PAD(Tclass.typeSize)));
IteratorPointer i;
Class Kclass = class(MT);
Class Dclass = class(V);
+ bool kIsNormalClass = Kclass.type == normalClass;
+ bool dIsNormalClass = Dclass.type == normalClass;
channel.Put(count);
for(i = GetFirst(); i; i = GetNext(i))
MapNode<MT, V> srcNode = (MapNode<MT, V>)i;
MT key = GetKey((MapNode<KT, V>)srcNode);
D data = GetData(srcNode);
+ Class kEclass = dIsNormalClass ? ((Instance)key)._class : Kclass;
+ Class dEclass = dIsNormalClass ? ((Instance)data)._class : Dclass;
- ((void (*)(void *, void *, void *))(void *)Kclass._vTbl[__ecereVMethodID_class_OnSerialize])(Kclass,
- (Kclass.type == systemClass || Kclass.type == bitClass || Kclass.type == enumClass || Kclass.type == unitClass) ? &key : (void *)key, channel);
- ((void (*)(void *, void *, void *))(void *)Dclass._vTbl[__ecereVMethodID_class_OnSerialize])(Dclass,
- (Dclass.type == systemClass || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, channel);
+ ((void (*)(void *, void *, void *))(void *)kEclass._vTbl[__ecereVMethodID_class_OnSerialize])(kEclass,
+ ((Kclass.type == systemClass && !Kclass.byValueSystemClass) || Kclass.type == bitClass || Kclass.type == enumClass || Kclass.type == unitClass) ? &key : (void *)key, channel);
+ ((void (*)(void *, void *, void *))(void *)dEclass._vTbl[__ecereVMethodID_class_OnSerialize])(dEclass,
+ ((Dclass.type == systemClass && !Dclass.byValueSystemClass) || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, channel);
}
}