1// Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. See the AUTHORS file for names of contributors. 4// 5// Thread-safe (provides internal synchronization) 6 7#ifndef STORAGE_LEVELDB_DB_TABLE_CACHE_H_ 8#define STORAGE_LEVELDB_DB_TABLE_CACHE_H_ 9 10#include <string> 11#include <stdint.h> 12#include "db/dbformat.h" 13#include "leveldb/cache.h" 14#include "leveldb/table.h" 15#include "port/port.h" 16 17namespace leveldb { 18 19class Env; 20 21class TableCache { 22 public: 23 TableCache(const std::string& dbname, const Options* options, int entries); 24 ~TableCache(); 25 26 // Return an iterator for the specified file number (the corresponding 27 // file length must be exactly "file_size" bytes). If "tableptr" is 28 // non-NULL, also sets "*tableptr" to point to the Table object 29 // underlying the returned iterator, or NULL if no Table object underlies 30 // the returned iterator. The returned "*tableptr" object is owned by 31 // the cache and should not be deleted, and is valid for as long as the 32 // returned iterator is live. 33 Iterator* NewIterator(const ReadOptions& options, 34 uint64_t file_number, 35 uint64_t file_size, 36 Table** tableptr = NULL); 37 38 // If a seek to internal key "k" in specified file finds an entry, 39 // call (*handle_result)(arg, found_key, found_value). 40 Status Get(const ReadOptions& options, 41 uint64_t file_number, 42 uint64_t file_size, 43 const Slice& k, 44 void* arg, 45 void (*handle_result)(void*, const Slice&, const Slice&)); 46 47 // Evict any entry for the specified file number 48 void Evict(uint64_t file_number); 49 50 private: 51 Env* const env_; 52 const std::string dbname_; 53 const Options* options_; 54 Cache* cache_; 55 56 Status FindTable(uint64_t file_number, uint64_t file_size, Cache::Handle**); 57}; 58 59} // namespace leveldb 60 61#endif // STORAGE_LEVELDB_DB_TABLE_CACHE_H_ 62