protected override void ReadContent(LiteDB.ByteReader reader) { this.Nodes = new Dictionary <ushort, IndexNode>(this.ItemCount); for (var i = 0; i < this.ItemCount; i++) { var index = reader.ReadUInt16(); var levels = reader.ReadByte(); var node = new IndexNode(levels); node.Page = this; node.Position = new LiteDB.PageAddress(this.PageID, index); node.KeyLength = reader.ReadUInt16(); node.Key = ReadBsonValue(reader, node.KeyLength); node.DataBlock = reader.ReadPageAddress(); for (var j = 0; j < node.Prev.Length; j++) { node.Prev[j] = reader.ReadPageAddress(); node.Next[j] = reader.ReadPageAddress(); } this.Nodes.Add(node.Position.Index, node); } }
private void ReadHeader(LiteDB.ByteReader reader) { // first 5 bytes (pageID + pageType) was readed before class create // this.PageID // this.PageType this.PrevPageID = reader.ReadUInt32(); this.NextPageID = reader.ReadUInt32(); this.ItemCount = reader.ReadUInt16(); reader.ReadUInt16(); // FreeBytes; reader.Skip(8); // reserved 8 bytes }
/// <summary> /// Read a page with correct instance page object. Checks for pageType /// </summary> public static BasePage ReadPage(byte[] buffer) { var reader = new LiteDB.ByteReader(buffer); var pageID = reader.ReadUInt32(); var pageType = (PageType)reader.ReadByte(); var page = CreateInstance(pageID, pageType); page.ReadHeader(reader); page.ReadContent(reader); return(page); }
protected override void ReadContent(LiteDB.ByteReader reader) { reader.ReadString(HEADER_INFO.Length); reader.ReadByte(); this.ChangeID = reader.ReadUInt16(); this.FreeEmptyPageID = reader.ReadUInt32(); this.LastPageID = reader.ReadUInt32(); this.DbVersion = reader.ReadUInt16(); this.Password = reader.ReadBytes(this.Password.Length); // read page collections references (position on end of page) var cols = reader.ReadByte(); for (var i = 0; i < cols; i++) { this.CollectionPages.Add(reader.ReadString(), reader.ReadUInt32()); } }
/// <summary> /// Write a custom ReadBsonValue because BsonType changed from v6 to v7 /// </summary> private LiteDB.BsonValue ReadBsonValue(LiteDB.ByteReader reader, ushort length) { var type = reader.ReadByte(); // using numbers because BsonType changed switch (type) { case 1: return(LiteDB.BsonValue.Null); case 2: return(reader.ReadInt32()); case 3: return(reader.ReadInt64()); case 4: return(reader.ReadDouble()); case 5: return(reader.ReadString(length)); case 6: return(new LiteDB.BsonReader(false).ReadDocument(reader)); case 7: return(new LiteDB.BsonReader(false).ReadArray(reader)); case 8: return(reader.ReadBytes(length)); case 9: return(reader.ReadObjectId()); case 10: return(reader.ReadGuid()); case 11: return(reader.ReadBoolean()); case 12: return(reader.ReadDateTime()); case 13: return(reader.ReadDateTimeOffset(length)); case 0: return(LiteDB.BsonValue.MinValue); case 14: return(LiteDB.BsonValue.MaxValue); } throw new NotImplementedException(); }
protected override void ReadContent(LiteDB.ByteReader reader) { this.DataBlocks = new Dictionary <ushort, DataBlock>(ItemCount); for (var i = 0; i < ItemCount; i++) { var block = new DataBlock(); block.Page = this; block.Position = new LiteDB.PageAddress(this.PageID, reader.ReadUInt16()); block.ExtendPageID = reader.ReadUInt32(); for (var j = 0; j < CollectionIndex.INDEX_PER_COLLECTION; j++) { block.IndexRef[j] = reader.ReadPageAddress(); } var size = reader.ReadUInt16(); block.Data = reader.ReadBytes(size); this.DataBlocks.Add(block.Position.Index, block); } }
protected override void ReadContent(LiteDB.ByteReader reader) { this.CollectionName = reader.ReadString(); this.FreeDataPageID = reader.ReadUInt32(); var uintCount = reader.ReadUInt32(); // read as uint (4 bytes) foreach (var index in this.Indexes) { index.Field = reader.ReadString(); index.HeadNode = reader.ReadPageAddress(); index.TailNode = reader.ReadPageAddress(); index.FreeIndexPageID = reader.ReadUInt32(); index.Unique = reader.ReadBoolean(); reader.ReadBoolean(); // IgnoreCase reader.ReadBoolean(); // TrimWhitespace reader.ReadBoolean(); // EmptyStringToNull reader.ReadBoolean(); // RemoveAccents } // be compatible with v2_beta var longCount = reader.ReadInt64(); this.DocumentCount = Math.Max(uintCount, longCount); }
protected abstract void ReadContent(LiteDB.ByteReader reader);
protected override void ReadContent(LiteDB.ByteReader reader) { this.Data = reader.ReadBytes(this.ItemCount); }