Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
table_builder.h
Go to the documentation of this file.
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_
void Add(const Slice &key, const Slice &value)
std::string * value
Definition: version_set.cc:270
void WriteRawBlock(const Slice &data, CompressionType, BlockHandle *handle)
Status status() const
Status ChangeOptions(const Options &options)
void operator=(const TableBuilder &)
CompressionType
Definition: options.h:23
unsigned long long uint64_t
Definition: stdint.h:22
uint64_t FileSize() const
void WriteBlock(BlockBuilder *block, BlockHandle *handle)
bool ok() const
Definition: status.h:52
TableBuilder(const Options &options, WritableFile *file)
uint64_t NumEntries() const