示例#1
0
        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);
            }
        }
示例#2
0
        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());
            }
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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();
        }