Bitcoin Core  0.20.99
P2P Digital Currency
flatfile.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2020 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_FLATFILE_H
7 #define BITCOIN_FLATFILE_H
8 
9 #include <string>
10 
11 #include <fs.h>
12 #include <serialize.h>
13 
15 {
16  int nFile;
17  unsigned int nPos;
18 
20 
21  FlatFilePos() : nFile(-1), nPos(0) {}
22 
23  FlatFilePos(int nFileIn, unsigned int nPosIn) :
24  nFile(nFileIn),
25  nPos(nPosIn)
26  {}
27 
28  friend bool operator==(const FlatFilePos &a, const FlatFilePos &b) {
29  return (a.nFile == b.nFile && a.nPos == b.nPos);
30  }
31 
32  friend bool operator!=(const FlatFilePos &a, const FlatFilePos &b) {
33  return !(a == b);
34  }
35 
36  void SetNull() { nFile = -1; nPos = 0; }
37  bool IsNull() const { return (nFile == -1); }
38 
39  std::string ToString() const;
40 };
41 
47 {
48 private:
49  const fs::path m_dir;
50  const char* const m_prefix;
51  const size_t m_chunk_size;
52 
53 public:
61  FlatFileSeq(fs::path dir, const char* prefix, size_t chunk_size);
62 
64  fs::path FileName(const FlatFilePos& pos) const;
65 
67  FILE* Open(const FlatFilePos& pos, bool read_only = false);
68 
78  size_t Allocate(const FlatFilePos& pos, size_t add_size, bool& out_of_space);
79 
87  bool Flush(const FlatFilePos& pos, bool finalize = false);
88 };
89 
90 #endif // BITCOIN_FLATFILE_H
#define VARINT(obj)
Definition: serialize.h:479
const fs::path m_dir
Definition: flatfile.h:49
bool IsNull() const
Definition: flatfile.h:37
const char * prefix
Definition: rest.cpp:670
int nFile
Definition: flatfile.h:16
#define VARINT_MODE(obj, mode)
Definition: serialize.h:478
const char *const m_prefix
Definition: flatfile.h:50
void SetNull()
Definition: flatfile.h:36
FlatFilePos(int nFileIn, unsigned int nPosIn)
Definition: flatfile.h:23
friend bool operator!=(const FlatFilePos &a, const FlatFilePos &b)
Definition: flatfile.h:32
std::string ToString() const
Definition: flatfile.cpp:23
FlatFilePos()
Definition: flatfile.h:21
SERIALIZE_METHODS(FlatFilePos, obj)
Definition: flatfile.h:19
friend bool operator==(const FlatFilePos &a, const FlatFilePos &b)
Definition: flatfile.h:28
const size_t m_chunk_size
Definition: flatfile.h:51
#define READWRITE(...)
Definition: serialize.h:175
FlatFileSeq represents a sequence of numbered files storing raw data.
Definition: flatfile.h:46
unsigned int nPos
Definition: flatfile.h:17