internal RelationInfo CreateByName(IInternalObjectDBTransaction tr, string name, Type interfaceType) { name = string.Intern(name); uint id; if (!_name2Id.TryGetValue(name, out id)) { id = _freeId++; _name2Id[name] = id; tr.KeyValueDBTransaction.SetKeyPrefixUnsafe(ObjectDB.RelationNamesPrefix); var nameWriter = new ByteBufferWriter(); nameWriter.WriteString(name); var idWriter = new ByteBufferWriter(); idWriter.WriteVUInt32(id); tr.KeyValueDBTransaction.CreateOrUpdateKeyValue(nameWriter.Data, idWriter.Data); } RelationInfo relation; if (_id2Relation.TryGetValue(id, out relation)) { throw new BTDBException($"Relation with name '{name}' was already initialized"); } var clientType = FindClientType(interfaceType); relation = new RelationInfo(id, name, _relationInfoResolver, interfaceType, clientType, tr); _id2Relation[id] = relation; return relation; }
public ServiceObjectFieldHandler(IServiceInternal service, Type type) { _service = service; _type = type; _typeName = _service.RegisterType(type); var writer = new ByteBufferWriter(); writer.WriteString(_typeName); _configuration = writer.Data.ToByteArray(); }
public DBObjectFieldHandler(IObjectDB objectDB, Type type) { _objectDB = objectDB; _type = Unwrap(type); _indirect = _type != type; _typeName = _objectDB.RegisterType(_type); var writer = new ByteBufferWriter(); writer.WriteString(_typeName); _configuration = writer.Data.ToByteArray(); }
public byte[] ToConfiguration() { var writer = new ByteBufferWriter(); writer.WriteVUInt32((_signed ? 1u : 0) + (Flags ? 2u : 0) + 4u * (uint)Names.Length); foreach (var name in Names) { writer.WriteString(name); } foreach (var value in Values) { if (_signed) writer.WriteVInt64((long)value); else writer.WriteVUInt64(value); } return writer.Data.ToByteArray(); }