/ src / leveldb / include / leveldb / write_batch.h
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  
26  #include "leveldb/export.h"
27  #include "leveldb/status.h"
28  
29  namespace leveldb {
30  
31  class Slice;
32  
33  class LEVELDB_EXPORT WriteBatch {
34   public:
35    class LEVELDB_EXPORT Handler {
36     public:
37      virtual ~Handler();
38      virtual void Put(const Slice& key, const Slice& value) = 0;
39      virtual void Delete(const Slice& key) = 0;
40    };
41  
42    WriteBatch();
43  
44    // Intentionally copyable.
45    WriteBatch(const WriteBatch&) = default;
46    WriteBatch& operator=(const WriteBatch&) = default;
47  
48    ~WriteBatch();
49  
50    // Store the mapping "key->value" in the database.
51    void Put(const Slice& key, const Slice& value);
52  
53    // If the database contains a mapping for "key", erase it.  Else do nothing.
54    void Delete(const Slice& key);
55  
56    // Clear all updates buffered in this batch.
57    void Clear();
58  
59    // The size of the database changes caused by this batch.
60    //
61    // This number is tied to implementation details, and may change across
62    // releases. It is intended for LevelDB usage metrics.
63    size_t ApproximateSize() const;
64  
65    // Copies the operations in "source" to this batch.
66    //
67    // This runs in O(source size) time. However, the constant factor is better
68    // than calling Iterate() over the source batch with a Handler that replicates
69    // the operations into this batch.
70    void Append(const WriteBatch& source);
71  
72    // Support for iterating over the contents of a batch.
73    Status Iterate(Handler* handler) const;
74  
75   private:
76    friend class WriteBatchInternal;
77  
78    std::string rep_;  // See comment in write_batch.cc for the format of rep_
79  };
80  
81  }  // namespace leveldb
82  
83  #endif  // STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_