コード例 #1
0
        private Block GetBlock(byte[] key)
        {
            if (m_stream != null)
            {
                var handle = BlockHandle.DecodeFrom(new Slice(key));
                if (m_blockCache != null && m_blockCache.TryGetValue(handle, out var block))
                {
                    return(block);
                }

                block = ReadBlock(m_stream, handle);
                m_blockCache?.Add(handle, block);
                return(block);
            }
            throw new Exception("TableFile not open");
        }
コード例 #2
0
ファイル: Footer.cs プロジェクト: tvandijck/LevelDB.NET
        public static Footer DecodeFrom(Slice slice)
        {
            uint startOffset = slice.Offset;
            uint startLength = slice.Length;

            uint  magic_lo = Coding.DecodeFixed32(slice.NewSlice(kEncodedLength - 8, 4));
            uint  magic_hi = Coding.DecodeFixed32(slice.NewSlice(kEncodedLength - 4, 4));
            ulong magic    = (unchecked ((ulong)magic_hi) << 32) | unchecked ((ulong)magic_lo);

            if (magic != kTableMagicNumber)
            {
                throw new Exception("not an sstable (bad magic number)");
            }

            var metaIndexHandle = BlockHandle.DecodeFrom(slice);
            var indexHandle     = BlockHandle.DecodeFrom(slice);

            slice.Update(startOffset + kEncodedLength, startLength - kEncodedLength);
            return(new Footer(metaIndexHandle, indexHandle));
        }