1*9507f98cSAndroid Build Coastguard Worker // Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2*9507f98cSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*9507f98cSAndroid Build Coastguard Worker // found in the LICENSE file. See the AUTHORS file for names of contributors. 4*9507f98cSAndroid Build Coastguard Worker 5*9507f98cSAndroid Build Coastguard Worker #ifndef STORAGE_LEVELDB_DB_LOG_WRITER_H_ 6*9507f98cSAndroid Build Coastguard Worker #define STORAGE_LEVELDB_DB_LOG_WRITER_H_ 7*9507f98cSAndroid Build Coastguard Worker 8*9507f98cSAndroid Build Coastguard Worker #include <cstdint> 9*9507f98cSAndroid Build Coastguard Worker 10*9507f98cSAndroid Build Coastguard Worker #include "db/log_format.h" 11*9507f98cSAndroid Build Coastguard Worker #include "leveldb/slice.h" 12*9507f98cSAndroid Build Coastguard Worker #include "leveldb/status.h" 13*9507f98cSAndroid Build Coastguard Worker 14*9507f98cSAndroid Build Coastguard Worker namespace leveldb { 15*9507f98cSAndroid Build Coastguard Worker 16*9507f98cSAndroid Build Coastguard Worker class WritableFile; 17*9507f98cSAndroid Build Coastguard Worker 18*9507f98cSAndroid Build Coastguard Worker namespace log { 19*9507f98cSAndroid Build Coastguard Worker 20*9507f98cSAndroid Build Coastguard Worker class Writer { 21*9507f98cSAndroid Build Coastguard Worker public: 22*9507f98cSAndroid Build Coastguard Worker // Create a writer that will append data to "*dest". 23*9507f98cSAndroid Build Coastguard Worker // "*dest" must be initially empty. 24*9507f98cSAndroid Build Coastguard Worker // "*dest" must remain live while this Writer is in use. 25*9507f98cSAndroid Build Coastguard Worker explicit Writer(WritableFile* dest); 26*9507f98cSAndroid Build Coastguard Worker 27*9507f98cSAndroid Build Coastguard Worker // Create a writer that will append data to "*dest". 28*9507f98cSAndroid Build Coastguard Worker // "*dest" must have initial length "dest_length". 29*9507f98cSAndroid Build Coastguard Worker // "*dest" must remain live while this Writer is in use. 30*9507f98cSAndroid Build Coastguard Worker Writer(WritableFile* dest, uint64_t dest_length); 31*9507f98cSAndroid Build Coastguard Worker 32*9507f98cSAndroid Build Coastguard Worker Writer(const Writer&) = delete; 33*9507f98cSAndroid Build Coastguard Worker Writer& operator=(const Writer&) = delete; 34*9507f98cSAndroid Build Coastguard Worker 35*9507f98cSAndroid Build Coastguard Worker ~Writer(); 36*9507f98cSAndroid Build Coastguard Worker 37*9507f98cSAndroid Build Coastguard Worker Status AddRecord(const Slice& slice); 38*9507f98cSAndroid Build Coastguard Worker 39*9507f98cSAndroid Build Coastguard Worker private: 40*9507f98cSAndroid Build Coastguard Worker Status EmitPhysicalRecord(RecordType type, const char* ptr, size_t length); 41*9507f98cSAndroid Build Coastguard Worker 42*9507f98cSAndroid Build Coastguard Worker WritableFile* dest_; 43*9507f98cSAndroid Build Coastguard Worker int block_offset_; // Current offset in block 44*9507f98cSAndroid Build Coastguard Worker 45*9507f98cSAndroid Build Coastguard Worker // crc32c values for all supported record types. These are 46*9507f98cSAndroid Build Coastguard Worker // pre-computed to reduce the overhead of computing the crc of the 47*9507f98cSAndroid Build Coastguard Worker // record type stored in the header. 48*9507f98cSAndroid Build Coastguard Worker uint32_t type_crc_[kMaxRecordType + 1]; 49*9507f98cSAndroid Build Coastguard Worker }; 50*9507f98cSAndroid Build Coastguard Worker 51*9507f98cSAndroid Build Coastguard Worker } // namespace log 52*9507f98cSAndroid Build Coastguard Worker } // namespace leveldb 53*9507f98cSAndroid Build Coastguard Worker 54*9507f98cSAndroid Build Coastguard Worker #endif // STORAGE_LEVELDB_DB_LOG_WRITER_H_ 55