50 &footer_input, footer_space);
51 if (!s.
ok())
return s;
55 if (!s.
ok())
return s;
67 index_block =
new Block(contents);
82 *table =
new Table(rep);
83 (*table)->ReadMeta(footer);
110 std::string key =
"filter.";
121 Slice v = filter_handle_value;
148 delete reinterpret_cast<Block*
>(arg);
152 Block* block =
reinterpret_cast<Block*
>(value);
166 const Slice& index_value) {
173 Slice input = index_value;
180 if (block_cache != NULL) {
181 char cache_key_buffer[16];
184 Slice key(cache_key_buffer,
sizeof(cache_key_buffer));
185 cache_handle = block_cache->
Lookup(key);
186 if (cache_handle != NULL) {
187 block =
reinterpret_cast<Block*
>(block_cache->
Value(cache_handle));
191 block =
new Block(contents);
193 cache_handle = block_cache->
Insert(
201 block =
new Block(contents);
209 if (cache_handle == NULL) {
228 void (*saver)(
void*,
const Slice&,
const Slice&)) {
232 if (iiter->
Valid()) {
236 if (filter != NULL &&
243 if (block_iter->
Valid()) {
244 (*saver)(arg, block_iter->
key(), block_iter->
value());
261 index_iter->
Seek(key);
263 if (index_iter->
Valid()) {
virtual Status status() const =0
virtual Handle * Insert(const Slice &key, void *value, size_t charge, void(*deleter)(const Slice &key, void *value))=0
Iterator * NewIterator(const ReadOptions &) const
virtual uint64_t NewId()=0
virtual Slice key() const =0
virtual void Release(Handle *handle)=0
virtual Slice value() const =0
virtual void * Value(Handle *handle)=0
static Status Open(const Options &options, RandomAccessFile *file, uint64_t file_size, Table **table)
BlockHandle metaindex_handle
virtual void Seek(const Slice &target)=0
Iterator * NewIterator(const Comparator *comparator)
virtual Handle * Lookup(const Slice &key)=0
virtual const char * Name() const =0
void ReadMeta(const Footer &footer)
static Status Corruption(const Slice &msg, const Slice &msg2=Slice())
void EncodeFixed64(char *buf, uint64_t value)
Status InternalGet(const ReadOptions &, const Slice &key, void *arg, void(*handle_result)(void *arg, const Slice &k, const Slice &v))
bool KeyMayMatch(uint64_t block_offset, const Slice &key)
static Iterator * BlockReader(void *, const ReadOptions &, const Slice &)
static void ReleaseBlock(void *arg, void *h)
Iterator * NewErrorIterator(const Status &status)
static void DeleteCachedBlock(const Slice &key, void *value)
static void DeleteBlock(void *arg, void *ignored)
uint64_t ApproximateOffsetOf(const Slice &key) const
const Comparator * BytewiseComparator()
const FilterPolicy * filter_policy
void ReadFilter(const Slice &filter_handle_value)
Iterator * NewTwoLevelIterator(Iterator *index_iter, BlockFunction block_function, void *arg, const ReadOptions &options)
const Comparator * comparator
FilterBlockReader * filter
Status DecodeFrom(Slice *input)
void RegisterCleanup(CleanupFunction function, void *arg1, void *arg2)
const char * data() const
virtual Status Read(uint64_t offset, size_t n, Slice *result, char *scratch) const =0
virtual bool Valid() const =0
Status ReadBlock(RandomAccessFile *file, const ReadOptions &options, const BlockHandle &handle, BlockContents *result)