コード例 #1
0
 void StoreDescriptor(ITypeDescriptor descriptor, AbstractBufferedWriter writer)
 {
     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();
     }
     ((IPersistTypeDescriptor)descriptor).Persist(writer, (w, d) =>
     {
         SerializerTypeInfo result;
         if (!_typeOrDescriptor2Info.TryGetValue(d, out result))
         {
             if (!_typeOrDescriptor2InfoNew.TryGetValue(d, out result))
             {
                 throw new BTDBException("Invalid state unknown descriptor " + d.Name);
             }
         }
         w.WriteVInt32(result.Id);
     });
 }
コード例 #2
0
ファイル: TypeSerializers.cs プロジェクト: martindrlik/BTDB
        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 if (descriptor is NullableTypeDescriptor)
            {
                writer.WriteUInt8((byte)TypeCategory.Nullable);
            }
            else
            {
                throw new ArgumentOutOfRangeException();
            }
            var p = descriptor as IPersistTypeDescriptor;

            p.Persist(writer, (w, d) => w.WriteVUInt32(descriptor2Id(d)));
        }
コード例 #3
0
ファイル: FileKeyIndex.cs プロジェクト: saryn/BTDB
 internal void WriteHeader(AbstractBufferedWriter writer)
 {
     FileCollectionWithFileInfos.WriteHeader(writer, _guid);
     writer.WriteUInt8((byte)KVFileType.ModernKeyIndex);
     writer.WriteVInt64(_generation);
     writer.WriteVUInt32(_trLogFileId);
     writer.WriteVUInt32(_trLogOffset);
     writer.WriteVUInt64((ulong)_keyValueCount);
     writer.WriteVUInt64(_commitUlong);
     writer.WriteUInt8((byte)_compressionType);
 }
コード例 #4
0
ファイル: KeyValueDBReplayProxy.cs プロジェクト: quyenbc/BTDB
        public void Dispose()
        {
            lock (_log)
            {
                _log.WriteUInt8((byte)KVReplayOperation.KeyValueDBDispose);
                _log.FlushBuffer();
            }
            var disposableLog = _log as IDisposable;

            if (disposableLog != null)
            {
                disposableLog.Dispose();
            }
            _db.Dispose();
        }
コード例 #5
0
ファイル: FileTransactionLog.cs プロジェクト: keeema/bbcore
 internal void WriteHeader(AbstractBufferedWriter writer)
 {
     FileCollectionWithFileInfos.WriteHeader(writer, _guid);
     writer.WriteUInt8((byte)KVFileType.TransactionLog);
     writer.WriteVInt64(_generation);
     writer.WriteVInt32((int)_previousFileId);
 }
コード例 #6
0
ファイル: FilePureValuesWithId.cs プロジェクト: keeema/bbcore
 public void WriteHeader(AbstractBufferedWriter writer)
 {
     FileCollectionWithFileInfos.WriteHeader(writer, _guid);
     writer.WriteUInt8((byte)KVFileType.PureValuesWithId);
     writer.WriteVInt64(_subId);
     writer.WriteVInt64(_generation);
 }
コード例 #7
0
ファイル: FileHashIndex.cs プロジェクト: keeema/bbcore
 internal void WriteHeader(AbstractBufferedWriter writer)
 {
     writer.WriteByteArrayRaw(DiskChunkCache.MagicStartOfFile);
     writer.WriteUInt8((byte)DiskChunkFileType.HashIndex);
     writer.WriteVInt64(_generation);
     writer.WriteVUInt32((uint)KeySize);
     writer.WriteVUInt64((ulong)KeyValueCount);
 }
コード例 #8
0
ファイル: HashKeyIndex.cs プロジェクト: keeema/bbcore
 internal void WriteHeader(AbstractBufferedWriter writer)
 {
     FileCollectionWithFileInfos.WriteHeader(writer, _guid);
     writer.WriteUInt8((byte)KVFileType.HashKeyIndex);
     writer.WriteVInt64(_subId);
     writer.WriteVInt64(_generation);
     writer.WriteVUInt32(_keyLen);
 }
コード例 #9
0
        internal void WriteHeader(AbstractBufferedWriter writer)
        {
            FileCollectionWithFileInfos.WriteHeader(writer, _guid);
            writer.WriteUInt8((byte)KVFileType.ModernKeyIndexWithUlongs);
            writer.WriteVInt64(_generation);
            writer.WriteVUInt32(_trLogFileId);
            writer.WriteVUInt32(_trLogOffset);
            writer.WriteVUInt64((ulong)_keyValueCount);
            writer.WriteVUInt64(_commitUlong);
            writer.WriteUInt8((byte)_compressionType);
            var ulongCount = (uint)(_ulongs?.Length ?? 0);

            writer.WriteVUInt32(ulongCount);
            if (ulongCount > 0)
            {
                for (var i = 0; i < ulongCount; i++)
                {
                    writer.WriteVUInt64(_ulongs ![i]);
コード例 #10
0
            public void StoreObject(object obj)
            {
                if (obj == null)
                {
                    _writer.WriteUInt8(0);
                    return;
                }
                uint backRefId;

                if (_backrefs.TryGetValue(obj, out backRefId))
                {
                    _writer.WriteUInt8(1);
                    _writer.WriteVUInt32(backRefId);
                    return;
                }
                _backrefs.Add(obj, (uint)_backrefs.Count);
                TypeSerializers typeSerializers;
                var             infoForType = _mapping.GetInfoFromObject(obj, out typeSerializers);

                _writer.WriteVUInt32((uint)infoForType.Id);
                if (!infoForType.KnownSimpleSaver)
                {
                    infoForType.SimpleSaver      = typeSerializers.GetSimpleSaver(infoForType.Descriptor);
                    infoForType.KnownSimpleSaver = true;
                }
                var simpleSaver = infoForType.SimpleSaver;

                if (simpleSaver != null)
                {
                    simpleSaver(_writer, obj);
                    return;
                }
                if (!infoForType.KnownComplexSaver)
                {
                    infoForType.ComplexSaver      = typeSerializers.GetComplexSaver(infoForType.Descriptor);
                    infoForType.KnownComplexSaver = true;
                }
                var complexSaver = infoForType.ComplexSaver;

                complexSaver(_writer, this, obj);
            }
コード例 #11
0
        public void StoreObject(AbstractBufferedWriter writer, object obj)
        {
            if (obj == null)
            {
                writer.WriteUInt8(0);
                return;
            }
            TypeSerializers typeSerializers;
            var             infoForType = GetInfoFromObject(obj, out typeSerializers);

            StoreObjectCore(typeSerializers, writer, obj, infoForType, this);
        }
コード例 #12
0
 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);
     }
 }
コード例 #13
0
ファイル: KeyValueDB.cs プロジェクト: pavolpr/BTDB
 public void Dispose()
 {
     _compactorScheduler?.RemoveCompactAction(_compactFunc);
     lock (_writeLock)
     {
         if (_writingTransaction != null)
         {
             throw new BTDBException("Cannot dispose KeyValueDB when writting transaction still running");
         }
         while (_writeWaitingQueue.Count > 0)
         {
             _writeWaitingQueue.Dequeue().TrySetCanceled();
         }
     }
     if (_writerWithTransactionLog != null)
     {
         _writerWithTransactionLog.WriteUInt8((byte)KVCommandType.TemporaryEndOfFile);
         _writerWithTransactionLog.FlushBuffer();
         _fileWithTransactionLog.HardFlush();
         _fileWithTransactionLog.Truncate();
     }
 }
コード例 #14
0
 void LogSimpleOperation(KVReplayOperation operation)
 {
     lock (_log)
     {
         _log.WriteUInt8((byte)operation);
         _log.WriteVUInt32(TrIndex);
         _log.FlushBuffer();
     }
 }
コード例 #15
0
ファイル: FilePureValues.cs プロジェクト: keeema/bbcore
 public void WriteHeader(AbstractBufferedWriter writer)
 {
     writer.WriteByteArrayRaw(DiskChunkCache.MagicStartOfFile);
     writer.WriteUInt8((byte)DiskChunkFileType.PureValues);
     writer.WriteVInt64(_generation);
 }
コード例 #16
0
 public void WriteRelationSKPrefix(AbstractBufferedWriter writer, uint secondaryKeyIndex)
 {
     writer.WriteBlock(_relationInfo.PrefixSecondary);
     writer.WriteUInt8((byte)secondaryKeyIndex);
 }