Bitcoin Core  31.0.0
P2P Digital Currency
flatfile.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-present 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 <serialize.h>
12 #include <util/fs.h>
13 
15 {
16  int32_t nFile{-1};
17  uint32_t nPos{0};
18 
20 
21  FlatFilePos() = default;
22 
23  FlatFilePos(int32_t nFileIn, uint32_t 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  bool IsNull() const { return (nFile == -1); }
33 
34  std::string ToString() const;
35 };
36 
42 {
43 private:
44  const fs::path m_dir;
45  const char* const m_prefix;
46  const size_t m_chunk_size;
47 
48 public:
56  FlatFileSeq(fs::path dir, const char* prefix, size_t chunk_size);
57 
59  fs::path FileName(const FlatFilePos& pos) const;
60 
62  FILE* Open(const FlatFilePos& pos, bool read_only = false) const;
63 
73  size_t Allocate(const FlatFilePos& pos, size_t add_size, bool& out_of_space) const;
74 
82  bool Flush(const FlatFilePos& pos, bool finalize = false) const;
83 };
84 
85 #endif // BITCOIN_FLATFILE_H
#define VARINT(obj)
Definition: serialize.h:491
const fs::path m_dir
Definition: flatfile.h:44
bool IsNull() const
Definition: flatfile.h:32
const char * prefix
Definition: rest.cpp:1141
int32_t nFile
Definition: flatfile.h:16
#define VARINT_MODE(obj, mode)
Definition: serialize.h:490
uint32_t nPos
Definition: flatfile.h:17
size_t Allocate(const FlatFilePos &pos, size_t add_size, bool &out_of_space) const
Allocate additional space in a file after the given starting position.
Definition: flatfile.cpp:58
const char *const m_prefix
Definition: flatfile.h:45
FlatFilePos(int32_t nFileIn, uint32_t nPosIn)
Definition: flatfile.h:23
bool Flush(const FlatFilePos &pos, bool finalize=false) const
Commit a file to disk, and optionally truncate off extra pre-allocated bytes if final.
Definition: flatfile.cpp:87
FlatFilePos()=default
FILE * Open(const FlatFilePos &pos, bool read_only=false) const
Open a handle to the file at the given position.
Definition: flatfile.cpp:34
std::string ToString() const
Definition: flatfile.cpp:24
fs::path FileName(const FlatFilePos &pos) const
Get the name of the file at the given position.
Definition: flatfile.cpp:29
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:46
FlatFileSeq(fs::path dir, const char *prefix, size_t chunk_size)
Constructor.
Definition: flatfile.cpp:14
#define READWRITE(...)
Definition: serialize.h:145
FlatFileSeq represents a sequence of numbered files storing raw data.
Definition: flatfile.h:41
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
Definition: fs.h:33