BTDB.EventStoreLayer.TypeSerializers.StoreDescriptor C# (CSharp) Method

StoreDescriptor() public method

public StoreDescriptor ( ITypeDescriptor descriptor, AbstractBufferedWriter writer, uint>.Func descriptor2Id ) : void
descriptor ITypeDescriptor
writer BTDB.StreamLayer.AbstractBufferedWriter
descriptor2Id uint>.Func
return void
        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)));
        }

Usage Example

 public void FinishNewDescriptors(AbstractBufferedWriter writer)
 {
     if (SomeTypeStored)
     {
         for (int i = _id2InfoMap.Count - 1; i >= 0; i--)
         {
             writer.WriteVUInt32((uint)(i + _typeSerializersMapping._id2DescriptorMap.Count));
             _typeSerializers.StoreDescriptor(_id2InfoMap[i].Descriptor, writer, Descriptor2Id);
         }
         writer.WriteUInt8(0);
     }
 }