bool MergeTypesByShapeAndStoreNew()
{
List<SerializerTypeInfo> toStore = null;
foreach (var typeDescriptor in _typeOrDescriptor2InfoNew)
{
var info = typeDescriptor.Value;
if (info.Id == 0)
{
var d = info.Descriptor;
foreach (var existingTypeDescriptor in _typeOrDescriptor2Info)
{
if (d.Equals(existingTypeDescriptor.Value.Descriptor))
{
info.Id = existingTypeDescriptor.Value.Id;
break;
}
}
}
if (info.Id == 0)
{
if (toStore == null) toStore = new List<SerializerTypeInfo>();
toStore.Add(info);
info.Id = -toStore.Count;
}
else if (info.Id > 0)
{
if (typeDescriptor.Key is Type)
{
_typeOrDescriptor2Info[typeDescriptor.Key] = _id2Info[info.Id];
}
}
}
if (toStore != null)
{
for (int i = toStore.Count - 1; i >= 0; i--)
{
_writer.WriteVInt32(toStore[i].Id);
StoreDescriptor(toStore[i].Descriptor, _writer);
}
_writer.WriteVInt32(0);
return true;
}
return false;
}