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
|
#include <string>
struct CurveName {
enum class __attribute__ ((__packed__)) Seniority {
Senior,
Subordinated
};
enum class __attribute__ ((__packed__)) DocClause {
XR14,
MR14,
MM14,
CR14
};
void serialize(unsigned char* buf) {
memcpy(buf, &seniority, sizeof(Seniority));
buf += sizeof(Seniority);
memcpy(buf, &doc_clause, sizeof(DocClause));
buf += sizeof(DocClause);
strcpy((char*)buf, ticker.c_str());
};
std::string full_ticker() const {
std::string r = ticker;
return r.append("_").append(str_seniority()).
append("_").append(str_doc_clause());
}
void serialize(unsigned char* buf, size_t num) {
memcpy(buf, &seniority, sizeof(Seniority));
buf += sizeof(Seniority);
memcpy(buf, &doc_clause, sizeof(DocClause));
buf += sizeof(DocClause);
strncpy((char*)buf, ticker.c_str(), num);
};
CurveName(std::string& ticker, Seniority seniority, DocClause doc_clause) :
ticker(ticker),
seniority(seniority),
doc_clause(doc_clause) {};
CurveName(const unsigned char* buf) {
memcpy(&seniority, buf, sizeof(Seniority));
buf += sizeof(Seniority);
memcpy(&doc_clause, buf, sizeof(DocClause));
buf += sizeof(DocClause);
ticker = std::string((char*)buf);
}
CurveName() {};
size_t size() {
return sizeof(Seniority) + sizeof(DocClause) + ticker.length() + 1;
};
bool operator<(const CurveName &other) const {
return ticker < other.ticker ||
((ticker == other.ticker) && (seniority < other.seniority)) ||
((ticker == other.ticker) && (seniority == other.seniority) && (doc_clause < other.doc_clause));
}
std::string str_seniority() const {
switch (seniority) {
case Seniority::Senior:
return "Senior";
case Seniority::Subordinated:
return "Subordinated";
};
}
std::string str_doc_clause() const {
switch (doc_clause) {
case DocClause::XR14:
return "XR14";
case DocClause::MR14:
return "MR14";
case DocClause::MM14:
return "MM14";
case DocClause::CR14:
return "CR14";
}
}
std::string ticker;
Seniority seniority;
DocClause doc_clause;
};
|