1179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// Use of this source code is governed by a BSD-style license that can be 3179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// found in the LICENSE file. See the AUTHORS file for names of contributors. 4179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 5179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#ifndef STORAGE_LEVELDB_DB_LOG_WRITER_H_ 6179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#define STORAGE_LEVELDB_DB_LOG_WRITER_H_ 7179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 8179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#include <stdint.h> 9179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#include "db/log_format.h" 10fbd97aa4c5325eace57d24b89845b9581bac9324jorlow@chromium.org#include "leveldb/slice.h" 11fbd97aa4c5325eace57d24b89845b9581bac9324jorlow@chromium.org#include "leveldb/status.h" 12179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 13179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgnamespace leveldb { 14179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 15179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgclass WritableFile; 16179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 17179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgnamespace log { 18179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 19179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgclass Writer { 20179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org public: 21179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org // Create a writer that will append data to "*dest". 22179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org // "*dest" must be initially empty. 23179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org // "*dest" must remain live while this Writer is in use. 24179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org explicit Writer(WritableFile* dest); 25179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org ~Writer(); 26179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 27179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org Status AddRecord(const Slice& slice); 28179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 29179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org private: 30179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org WritableFile* dest_; 31179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org int block_offset_; // Current offset in block 32179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 33179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org // crc32c values for all supported record types. These are 34179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org // pre-computed to reduce the overhead of computing the crc of the 35179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org // record type stored in the header. 36179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org uint32_t type_crc_[kMaxRecordType + 1]; 37179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 38179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org Status EmitPhysicalRecord(RecordType type, const char* ptr, size_t length); 39179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 40179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org // No copying allowed 41179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org Writer(const Writer&); 42179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org void operator=(const Writer&); 43179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org}; 44179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 4545b9940be332834440bd5299419f396e38085ebehans@chromium.org} // namespace log 4645b9940be332834440bd5299419f396e38085ebehans@chromium.org} // namespace leveldb 47179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 48179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org#endif // STORAGE_LEVELDB_DB_LOG_WRITER_H_ 49