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