public void StoreDescriptor(ITypeDescriptor descriptor, AbstractBufferedWriter writer, Func<ITypeDescriptor, uint> descriptor2Id)
{
if (descriptor is ListTypeDescriptor)
{
writer.WriteUInt8((byte)TypeCategory.List);
}
else if (descriptor is DictionaryTypeDescriptor)
{
writer.WriteUInt8((byte)TypeCategory.Dictionary);
}
else if (descriptor is ObjectTypeDescriptor)
{
writer.WriteUInt8((byte)TypeCategory.Class);
}
else if (descriptor is EnumTypeDescriptor)
{
writer.WriteUInt8((byte)TypeCategory.Enum);
}
else
{
throw new ArgumentOutOfRangeException();
}
var p = descriptor as IPersistTypeDescriptor;
p.Persist(writer, (w, d) => w.WriteVUInt32(descriptor2Id(d)));
}