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)); }
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()}'."); } }
public void AdjustTableMember(TableMemberModel source) => this.underlyingModel.AdjustTableMember(source);
public virtual void AdjustTableMember(TableMemberModel source) { }
public virtual TableMemberModel AdjustTableMember(TableMemberModel source) { return(source); }
public override void AdjustTableMember(TableMemberModel source) { // Force the vector to be sorted. source.IsSortedVector = true; }
internal IndexedVectorTypeModel(Type vectorType, TypeModelContainer provider) : base(vectorType, provider) { this.keyTypeModel = null !; this.valueTypeModel = null !; this.keyMemberModel = null !; }
public virtual bool TryGetTableKeyMember(out TableMemberModel tableMember) { tableMember = null; return(false); }