From c78d628182fe56dadb2c25ce08de92908e106e53 Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Mon, 23 Jan 2023 16:59:34 -0500 Subject: zero copy buffer layout --- c_layer/survival_curve.hpp | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) (limited to 'c_layer/survival_curve.hpp') diff --git a/c_layer/survival_curve.hpp b/c_layer/survival_curve.hpp index ce71cc1..b3dcebd 100644 --- a/c_layer/survival_curve.hpp +++ b/c_layer/survival_curve.hpp @@ -1,56 +1,35 @@ -#include +#include struct CurveName { - enum class __attribute__ ((__packed__)) Seniority { + enum class Seniority: std::uint8_t { Senior, Subordinated }; - enum class __attribute__ ((__packed__)) DocClause { + enum class DocClause: std::uint8_t { 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; + std::string r = {ticker.begin(), ticker.end()}; 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) { + CurveName(const char* buf) : name(buf) { memcpy(&seniority, buf, sizeof(Seniority)); buf += sizeof(Seniority); memcpy(&doc_clause, buf, sizeof(DocClause)); buf += sizeof(DocClause); - ticker = std::string((char*)buf); + ticker = std::string_view((const char*)buf); } CurveName() {}; - size_t size() { - return sizeof(Seniority) + sizeof(DocClause) + ticker.length() + 1; + size_t size() const { + return sizeof(Seniority) + sizeof(DocClause) + ticker.size() + 1; }; bool operator<(const CurveName &other) const { @@ -82,7 +61,8 @@ struct CurveName { } } - std::string ticker; + const char* name; + std::string_view ticker; Seniority seniority; DocClause doc_clause; }; -- cgit v1.2.3-70-g09d2