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