-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathdbn.cpp
107 lines (96 loc) · 3.83 KB
/
dbn.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "databento/dbn.hpp"
#include <array>
#include <sstream> // ostringstream
#include "databento/constants.hpp"
#include "databento/symbol_map.hpp"
#include "stream_op_helper.hpp"
namespace databento {
PitSymbolMap Metadata::CreateSymbolMapForDate(date::year_month_day date) const {
return PitSymbolMap{*this, date};
}
TsSymbolMap Metadata::CreateSymbolMap() const { return TsSymbolMap{*this}; }
void Metadata::Upgrade(VersionUpgradePolicy upgrade_policy) {
if (version < kDbnVersion &&
upgrade_policy == VersionUpgradePolicy::UpgradeToV2) {
version = kDbnVersion;
symbol_cstr_len = kSymbolCstrLen;
}
}
std::string ToString(const Metadata& metadata) { return MakeString(metadata); }
std::ostream& operator<<(std::ostream& stream, const Metadata& metadata) {
auto helper = StreamOpBuilder{stream}
.SetTypeName("Metadata")
.SetSpacer("\n ")
.Build()
.AddField("version", metadata.version)
.AddField("dataset", metadata.dataset)
.AddField("has_mixed_schema", metadata.has_mixed_schema)
.AddField("schema", metadata.schema)
.AddField("start", metadata.start)
.AddField("end", metadata.end)
.AddField("limit", metadata.limit)
.AddField("has_mixed_stype_in", metadata.has_mixed_stype_in)
.AddField("stype_in", metadata.stype_in)
.AddField("stype_out", metadata.stype_out)
.AddField("ts_out", metadata.ts_out)
.AddField("symbol_cstr_len", metadata.symbol_cstr_len);
// format symbols, partial, and not_found
constexpr auto kVecCount = 3;
constexpr std::array<std::vector<std::string> Metadata::*, kVecCount>
kStrVecs{&Metadata::symbols, &Metadata::partial, &Metadata::not_found};
constexpr std::array<char const*, kVecCount> kStrVecNames{
"symbols", "partial", "not_found"};
for (std::size_t i = 0; i < kVecCount; ++i) {
std::ostringstream vec_stream;
auto vec_helper = StreamOpBuilder{vec_stream}.SetSpacer(" ").Build();
for (const auto& str : metadata.*(kStrVecs[i])) {
vec_helper.AddItem(str);
}
helper.AddField(kStrVecNames[i],
static_cast<std::ostringstream&>(vec_helper.Finish()));
}
// format mappings
std::ostringstream mappings;
auto mappings_helper =
StreamOpBuilder{mappings}.SetIndent(" ").SetSpacer("\n ").Build();
for (const auto& mapping : metadata.mappings) {
mappings_helper.AddItem(mapping);
}
return helper
.AddField("mappings",
static_cast<std::ostringstream&>(mappings_helper.Finish()))
.Finish();
}
std::string ToString(const SymbolMapping& mapping) {
return MakeString(mapping);
}
std::ostream& operator<<(std::ostream& stream, const SymbolMapping& mapping) {
std::ostringstream intervals;
auto intervals_helper = StreamOpBuilder{intervals}.SetSpacer(" ").Build();
for (const auto& interval : mapping.intervals) {
intervals_helper.AddItem(interval);
}
return StreamOpBuilder{stream}
.SetSpacer(" ")
.SetTypeName("SymbolMapping")
.Build()
.AddField("raw_symbol", mapping.raw_symbol)
.AddField("intervals",
static_cast<std::ostringstream&>(intervals_helper.Finish()))
.Finish();
}
std::string ToString(const MappingInterval& interval) {
return MakeString(interval);
}
std::ostream& operator<<(std::ostream& stream,
const MappingInterval& interval) {
return StreamOpBuilder{stream}
.SetSpacer(" ")
.SetTypeName("MappingInterval")
.Build()
.AddField("start_date", interval.start_date)
.AddField("end_date", interval.end_date)
.AddField("symbol", interval.symbol)
.Finish();
}
} // namespace databento