github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb.chai2010/include/leveldb/write_batch.h (about)

     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_