github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb.chai2010/include/leveldb/table_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  // TableBuilder provides the interface used to build a Table
     6  // (an immutable and sorted map from keys to values).
     7  //
     8  // Multiple threads can invoke const methods on a TableBuilder without
     9  // external synchronization, but if any of the threads may call a
    10  // non-const method, all threads accessing the same TableBuilder must use
    11  // external synchronization.
    12  
    13  #ifndef STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_
    14  #define STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_
    15  
    16  #include <stdint.h>
    17  #include "leveldb/options.h"
    18  #include "leveldb/status.h"
    19  
    20  namespace leveldb {
    21  
    22  class BlockBuilder;
    23  class BlockHandle;
    24  class WritableFile;
    25  
    26  class TableBuilder {
    27   public:
    28    // Create a builder that will store the contents of the table it is
    29    // building in *file.  Does not close the file.  It is up to the
    30    // caller to close the file after calling Finish().
    31    TableBuilder(const Options& options, WritableFile* file);
    32  
    33    // REQUIRES: Either Finish() or Abandon() has been called.
    34    ~TableBuilder();
    35  
    36    // Change the options used by this builder.  Note: only some of the
    37    // option fields can be changed after construction.  If a field is
    38    // not allowed to change dynamically and its value in the structure
    39    // passed to the constructor is different from its value in the
    40    // structure passed to this method, this method will return an error
    41    // without changing any fields.
    42    Status ChangeOptions(const Options& options);
    43  
    44    // Add key,value to the table being constructed.
    45    // REQUIRES: key is after any previously added key according to comparator.
    46    // REQUIRES: Finish(), Abandon() have not been called
    47    void Add(const Slice& key, const Slice& value);
    48  
    49    // Advanced operation: flush any buffered key/value pairs to file.
    50    // Can be used to ensure that two adjacent entries never live in
    51    // the same data block.  Most clients should not need to use this method.
    52    // REQUIRES: Finish(), Abandon() have not been called
    53    void Flush();
    54  
    55    // Return non-ok iff some error has been detected.
    56    Status status() const;
    57  
    58    // Finish building the table.  Stops using the file passed to the
    59    // constructor after this function returns.
    60    // REQUIRES: Finish(), Abandon() have not been called
    61    Status Finish();
    62  
    63    // Indicate that the contents of this builder should be abandoned.  Stops
    64    // using the file passed to the constructor after this function returns.
    65    // If the caller is not going to call Finish(), it must call Abandon()
    66    // before destroying this builder.
    67    // REQUIRES: Finish(), Abandon() have not been called
    68    void Abandon();
    69  
    70    // Number of calls to Add() so far.
    71    uint64_t NumEntries() const;
    72  
    73    // Size of the file generated so far.  If invoked after a successful
    74    // Finish() call, returns the size of the final generated file.
    75    uint64_t FileSize() const;
    76  
    77   private:
    78    bool ok() const { return status().ok(); }
    79    void WriteBlock(BlockBuilder* block, BlockHandle* handle);
    80    void WriteRawBlock(const Slice& data, CompressionType, BlockHandle* handle);
    81  
    82    struct Rep;
    83    Rep* rep_;
    84  
    85    // No copying allowed
    86    TableBuilder(const TableBuilder&);
    87    void operator=(const TableBuilder&);
    88  };
    89  
    90  }  // namespace leveldb
    91  
    92  #endif  // STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_