Bitcoin Core 30.99.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{
43private:
44 const fs::path m_dir;
45 const char* const m_prefix;
46 const size_t m_chunk_size;
47
48public:
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
FlatFileSeq represents a sequence of numbered files storing raw data.
Definition: flatfile.h:42
FILE * Open(const FlatFilePos &pos, bool read_only=false) const
Open a handle to the file at the given position.
Definition: flatfile.cpp:33
fs::path FileName(const FlatFilePos &pos) const
Get the name of the file at the given position.
Definition: flatfile.cpp:28
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:86
const fs::path m_dir
Definition: flatfile.h:44
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:57
const size_t m_chunk_size
Definition: flatfile.h:46
const char *const m_prefix
Definition: flatfile.h:45
FlatFileSeq(fs::path dir, const char *prefix, size_t chunk_size)
Constructor.
Definition: flatfile.cpp:13
const char * prefix
Definition: rest.cpp:1142
#define VARINT(obj)
Definition: serialize.h:491
#define VARINT_MODE(obj, mode)
Definition: serialize.h:490
@ NONNEGATIVE_SIGNED
#define READWRITE(...)
Definition: serialize.h:145
friend bool operator==(const FlatFilePos &a, const FlatFilePos &b)
Definition: flatfile.h:28
FlatFilePos()=default
uint32_t nPos
Definition: flatfile.h:17
std::string ToString() const
Definition: flatfile.cpp:23
FlatFilePos(int32_t nFileIn, uint32_t nPosIn)
Definition: flatfile.h:23
SERIALIZE_METHODS(FlatFilePos, obj)
Definition: flatfile.h:19
bool IsNull() const
Definition: flatfile.h:32
int32_t nFile
Definition: flatfile.h:16