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