-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathdbn_file_store.cpp
53 lines (43 loc) · 1.49 KB
/
dbn_file_store.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "databento/dbn_file_store.hpp"
#include <memory> // unique_ptr
#include <utility> // move
#include "databento/file_stream.hpp"
#include "databento/record.hpp"
using databento::DbnFileStore;
DbnFileStore::DbnFileStore(const std::string& file_path)
: decoder_{ILogReceiver::Default(), InFileStream{file_path}} {}
DbnFileStore::DbnFileStore(ILogReceiver* log_receiver,
const std::string& file_path,
VersionUpgradePolicy upgrade_policy)
: decoder_{log_receiver, std::make_unique<InFileStream>(file_path),
upgrade_policy} {}
void DbnFileStore::Replay(const MetadataCallback& metadata_callback,
const RecordCallback& record_callback) {
auto metadata = decoder_.DecodeMetadata();
if (metadata_callback) {
metadata_callback(std::move(metadata));
}
const databento::Record* record;
while ((record = decoder_.DecodeRecord()) != nullptr) {
if (record_callback(*record) == KeepGoing::Stop) {
break;
}
}
}
void DbnFileStore::Replay(const RecordCallback& record_callback) {
Replay({}, record_callback);
}
const databento::Metadata& DbnFileStore::GetMetadata() {
MaybeDecodeMetadata();
return metadata_;
}
const databento::Record* DbnFileStore::NextRecord() {
MaybeDecodeMetadata();
return decoder_.DecodeRecord();
}
void DbnFileStore::MaybeDecodeMetadata() {
if (!has_decoded_metadata_) {
metadata_ = decoder_.DecodeMetadata();
has_decoded_metadata_ = true;
}
}