xref: /aosp_15_r20/external/leveldb/include/leveldb/write_batch.h (revision 9507f98c5f32dee4b5f9e4a38cd499f3ff5c4490)
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_
84