public BTree(IBuffer data) { _data = data; byte[] headerInfo = StreamUtilities.ReadExact(_data, 0, 106); _header = new BTreeHeaderRecord(); _header.ReadFrom(headerInfo, 14); byte[] node0data = StreamUtilities.ReadExact(_data, 0, _header.NodeSize); BTreeHeaderNode node0 = BTreeNode.ReadNode(this, node0data, 0) as BTreeHeaderNode; node0.ReadFrom(node0data, 0); if (node0.HeaderRecord.RootNode != 0) { _rootNode = GetKeyedNode(node0.HeaderRecord.RootNode); } }
protected override IList <BTreeNodeRecord> ReadRecords(byte[] buffer, int offset) { int totalRecords = Descriptor.NumRecords; int nodeSize = Tree.NodeSize; int headerRecordOffset = EndianUtilities.ToUInt16BigEndian(buffer, nodeSize - 2); int userDataRecordOffset = EndianUtilities.ToUInt16BigEndian(buffer, nodeSize - 4); int mapRecordOffset = EndianUtilities.ToUInt16BigEndian(buffer, nodeSize - 6); BTreeNodeRecord[] results = new BTreeNodeRecord[3]; results[0] = new BTreeHeaderRecord(); results[0].ReadFrom(buffer, offset + headerRecordOffset); results[1] = new BTreeGenericRecord(mapRecordOffset - userDataRecordOffset); results[1].ReadFrom(buffer, offset + userDataRecordOffset); results[2] = new BTreeGenericRecord(nodeSize - (totalRecords * 2 + mapRecordOffset)); results[2].ReadFrom(buffer, offset + mapRecordOffset); return(results); }