Add Google's LevelDB support
[novacoin.git] / src / leveldb / include / leveldb / write_batch.h
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 // WriteBatch holds a collection of updates to apply atomically to a DB.
6 //
7 // The updates are applied in the order in which they are added
8 // to the WriteBatch.  For example, the value of "key" will be "v3"
9 // after the following batch is written:
10 //
11 //    batch.Put("key", "v1");
12 //    batch.Delete("key");
13 //    batch.Put("key", "v2");
14 //    batch.Put("key", "v3");
15 //
16 // Multiple threads can invoke const methods on a WriteBatch without
17 // external synchronization, but if any of the threads may call a
18 // non-const method, all threads accessing the same WriteBatch must use
19 // external synchronization.
20
21 #ifndef STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_
22 #define STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_
23
24 #include <string>
25 #include "leveldb/status.h"
26
27 namespace leveldb {
28
29 class Slice;
30
31 class WriteBatch {
32  public:
33   WriteBatch();
34   ~WriteBatch();
35
36   // Store the mapping "key->value" in the database.
37   void Put(const Slice& key, const Slice& value);
38
39   // If the database contains a mapping for "key", erase it.  Else do nothing.
40   void Delete(const Slice& key);
41
42   // Clear all updates buffered in this batch.
43   void Clear();
44
45   // Support for iterating over the contents of a batch.
46   class Handler {
47    public:
48     virtual ~Handler();
49     virtual void Put(const Slice& key, const Slice& value) = 0;
50     virtual void Delete(const Slice& key) = 0;
51   };
52   Status Iterate(Handler* handler) const;
53
54  private:
55   friend class WriteBatchInternal;
56
57   std::string rep_;  // See comment in write_batch.cc for the format of rep_
58
59   // Intentionally copyable
60 };
61
62 }  // namespace leveldb
63
64 #endif  // STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_