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