示例#1
0
 public override TableMemberModel AdjustTableMember(TableMemberModel source)
 {
     // Force the vector to be sorted.
     return(new TableMemberModel(
                source.ItemTypeModel,
                source.PropertyInfo,
                source.Index,
                source.HasDefaultValue,
                source.DefaultValue,
                isSortedVector: true,
                source.IsKey));
 }
示例#2
0
        public override void OnInitialize()
        {
            if (!this.ClrType.IsGenericType ||
                this.ClrType.GetGenericTypeDefinition() != typeof(IIndexedVector <,>))
            {
                throw new InvalidFlatBufferDefinitionException($"Indexed vectors must be of type IIndexedVector. Type = {this.GetCompilableTypeName()}.");
            }

            Type keyType   = this.ClrType.GetGenericArguments()[0];
            Type valueType = this.ClrType.GetGenericArguments()[1];

            this.keyTypeModel   = this.typeModelContainer.CreateTypeModel(keyType);
            this.valueTypeModel = this.typeModelContainer.CreateTypeModel(valueType);

            if (this.valueTypeModel.SchemaType != FlatBufferSchemaType.Table)
            {
                throw new InvalidFlatBufferDefinitionException(
                          $"Indexed vector values must be flatbuffer tables. Type = '{this.valueTypeModel.GetCompilableTypeName()}'");
            }

            if (!this.valueTypeModel.TryGetTableKeyMember(out TableMemberModel? tempKeyMemberModel))
            {
                throw new InvalidFlatBufferDefinitionException(
                          $"Indexed vector values must have a property with the key attribute defined. Table = '{this.valueTypeModel.GetCompilableTypeName()}'");
            }
            else
            {
                this.keyMemberModel = tempKeyMemberModel;
            }

            if (!this.keyMemberModel.ItemTypeModel.TryGetSpanComparerType(out _))
            {
                throw new InvalidFlatBufferDefinitionException(
                          $"FlatSharp indexed vector keys must supply a span comparer. KeyType = '{this.keyMemberModel.ItemTypeModel.GetCompilableTypeName()}'.");
            }

            if (keyMemberModel.ItemTypeModel.ClrType != this.keyTypeModel.ClrType)
            {
                throw new InvalidFlatBufferDefinitionException(
                          $"FlatSharp indexed vector keys must have the same type as the key of the value. KeyType = {this.keyTypeModel.GetCompilableTypeName()}, Value Key Type = '{this.valueTypeModel.GetCompilableTypeName()}'.");
            }
        }
示例#3
0
 public void AdjustTableMember(TableMemberModel source) => this.underlyingModel.AdjustTableMember(source);
示例#4
0
 public virtual void AdjustTableMember(TableMemberModel source)
 {
 }
示例#5
0
 public virtual TableMemberModel AdjustTableMember(TableMemberModel source)
 {
     return(source);
 }
示例#6
0
 public override void AdjustTableMember(TableMemberModel source)
 {
     // Force the vector to be sorted.
     source.IsSortedVector = true;
 }
示例#7
0
 internal IndexedVectorTypeModel(Type vectorType, TypeModelContainer provider) : base(vectorType, provider)
 {
     this.keyTypeModel   = null !;
     this.valueTypeModel = null !;
     this.keyMemberModel = null !;
 }
示例#8
0
 public virtual bool TryGetTableKeyMember(out TableMemberModel tableMember)
 {
     tableMember = null;
     return(false);
 }