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_ 65