Home | History | Annotate | Download | only in db
      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 #ifndef STORAGE_LEVELDB_DB_LOG_WRITER_H_
      6 #define STORAGE_LEVELDB_DB_LOG_WRITER_H_
      7 
      8 #include <stdint.h>
      9 #include "db/log_format.h"
     10 #include "leveldb/slice.h"
     11 #include "leveldb/status.h"
     12 
     13 namespace leveldb {
     14 
     15 class WritableFile;
     16 
     17 namespace log {
     18 
     19 class Writer {
     20  public:
     21   // Create a writer that will append data to "*dest".
     22   // "*dest" must be initially empty.
     23   // "*dest" must remain live while this Writer is in use.
     24   explicit Writer(WritableFile* dest);
     25   ~Writer();
     26 
     27   Status AddRecord(const Slice& slice);
     28 
     29  private:
     30   WritableFile* dest_;
     31   int block_offset_;       // Current offset in block
     32 
     33   // crc32c values for all supported record types.  These are
     34   // pre-computed to reduce the overhead of computing the crc of the
     35   // record type stored in the header.
     36   uint32_t type_crc_[kMaxRecordType + 1];
     37 
     38   Status EmitPhysicalRecord(RecordType type, const char* ptr, size_t length);
     39 
     40   // No copying allowed
     41   Writer(const Writer&);
     42   void operator=(const Writer&);
     43 };
     44 
     45 }  // namespace log
     46 }  // namespace leveldb
     47 
     48 #endif  // STORAGE_LEVELDB_DB_LOG_WRITER_H_
     49