static KeyValuePair <Key, Value> ReadPair(byte[] block, ref int offset) { offset += 1; // skip over header flag offset += 4; // skip over the tree pointers int keySize = Helper.Decode7BitInt(block, ref offset); var key = new Key(ByteArray.From(block, offset, keySize)); offset += keySize; int valueSize = Helper.Decode7BitInt(block, ref offset); var val = Value.From(block, offset, valueSize); offset += valueSize; // if the next keySize bit is zero then we have exhausted this block. Set to -1 to terminate enumeration if (offset >= Config.SortedBlockSize || block [offset] == (byte)RecordHeaderFlag.EndOfBlock) { offset = -1; } return(new KeyValuePair <Key, Value> (key, val)); }