xref: /aosp_15_r20/external/leveldb/db/log_writer.h (revision 9507f98c5f32dee4b5f9e4a38cd499f3ff5c4490)
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 
14 namespace leveldb {
15 
16 class WritableFile;
17 
18 namespace log {
19 
20 class 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