github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb.chai2010/include/table/block_builder.h (about)

     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  #ifndef STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_
     6  #define STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_
     7  
     8  #include <vector>
     9  
    10  #include <stdint.h>
    11  #include "leveldb/slice.h"
    12  
    13  namespace leveldb {
    14  
    15  struct Options;
    16  
    17  class BlockBuilder {
    18   public:
    19    explicit BlockBuilder(const Options* options);
    20  
    21    // Reset the contents as if the BlockBuilder was just constructed.
    22    void Reset();
    23  
    24    // REQUIRES: Finish() has not been callled since the last call to Reset().
    25    // REQUIRES: key is larger than any previously added key
    26    void Add(const Slice& key, const Slice& value);
    27  
    28    // Finish building the block and return a slice that refers to the
    29    // block contents.  The returned slice will remain valid for the
    30    // lifetime of this builder or until Reset() is called.
    31    Slice Finish();
    32  
    33    // Returns an estimate of the current (uncompressed) size of the block
    34    // we are building.
    35    size_t CurrentSizeEstimate() const;
    36  
    37    // Return true iff no entries have been added since the last Reset()
    38    bool empty() const {
    39      return buffer_.empty();
    40    }
    41  
    42   private:
    43    const Options*        options_;
    44    std::string           buffer_;      // Destination buffer
    45    std::vector<uint32_t> restarts_;    // Restart points
    46    int                   counter_;     // Number of entries emitted since restart
    47    bool                  finished_;    // Has Finish() been called?
    48    std::string           last_key_;
    49  
    50    // No copying allowed
    51    BlockBuilder(const BlockBuilder&);
    52    void operator=(const BlockBuilder&);
    53  };
    54  
    55  }  // namespace leveldb
    56  
    57  #endif  // STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_