You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.7 KiB
57 lines
1.7 KiB
// Copyright (c) 2011 The LevelDB Authors. All rights reserved. |
|
// Use of this source code is governed by a BSD-style license that can be |
|
// found in the LICENSE file. See the AUTHORS file for names of contributors. |
|
|
|
#ifndef STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ |
|
#define STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ |
|
|
|
#include <vector> |
|
|
|
#include <stdint.h> |
|
#include "leveldb/slice.h" |
|
|
|
namespace leveldb { |
|
|
|
struct Options; |
|
|
|
class BlockBuilder { |
|
public: |
|
explicit BlockBuilder(const Options* options); |
|
|
|
// Reset the contents as if the BlockBuilder was just constructed. |
|
void Reset(); |
|
|
|
// REQUIRES: Finish() has not been callled since the last call to Reset(). |
|
// REQUIRES: key is larger than any previously added key |
|
void Add(const Slice& key, const Slice& value); |
|
|
|
// Finish building the block and return a slice that refers to the |
|
// block contents. The returned slice will remain valid for the |
|
// lifetime of this builder or until Reset() is called. |
|
Slice Finish(); |
|
|
|
// Returns an estimate of the current (uncompressed) size of the block |
|
// we are building. |
|
size_t CurrentSizeEstimate() const; |
|
|
|
// Return true iff no entries have been added since the last Reset() |
|
bool empty() const { |
|
return buffer_.empty(); |
|
} |
|
|
|
private: |
|
const Options* options_; |
|
std::string buffer_; // Destination buffer |
|
std::vector<uint32_t> restarts_; // Restart points |
|
int counter_; // Number of entries emitted since restart |
|
bool finished_; // Has Finish() been called? |
|
std::string last_key_; |
|
|
|
// No copying allowed |
|
BlockBuilder(const BlockBuilder&); |
|
void operator=(const BlockBuilder&); |
|
}; |
|
|
|
} // namespace leveldb |
|
|
|
#endif // STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_
|
|
|