MCPcopy Create free account
hub / github.com/PlotJuggler/PlotJuggler / decodeNumericExact

Function decodeNumericExact

pj_datastore/src/plugin_data_host.cpp:109–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

107
108template <typename T>
109[[nodiscard]] T decodeNumericExact(const TopicChunk& chunk, std::size_t col_index, std::size_t row) {
110 switch (chunk.columnEncoding(col_index)) {
111 case EncodingType::kConstant: {
112 const auto& enc = std::get<encoding::ConstantEncoded>(chunk.columns[col_index].data);
113 return loadFromBytes<T>(enc.value_bytes.data());
114 }
115 case EncodingType::kFrameOfReference: {
116 const auto& enc = std::get<encoding::FrameOfReferenceEncoded>(chunk.columns[col_index].data);
117 const uint64_t offset = readForOffset(enc, row);
118 return static_cast<T>(enc.reference + static_cast<int64_t>(offset));
119 }
120 case EncodingType::kRaw: {
121 const StorageKind kind = storageKindOf(chunk.columns[col_index].descriptor->logical_type);
122 const uint8_t* base = std::get<RawBuffer>(chunk.columns[col_index].data).data();
123 switch (kind) {
124 case StorageKind::kFloat32:
125 return static_cast<T>(loadFromBytes<float>(base + row * sizeof(float)));
126 case StorageKind::kFloat64:
127 return static_cast<T>(loadFromBytes<double>(base + row * sizeof(double)));
128 case StorageKind::kInt32:
129 return static_cast<T>(loadFromBytes<int32_t>(base + row * sizeof(int32_t)));
130 case StorageKind::kInt64:
131 return static_cast<T>(loadFromBytes<int64_t>(base + row * sizeof(int64_t)));
132 case StorageKind::kUint64:
133 return static_cast<T>(loadFromBytes<uint64_t>(base + row * sizeof(uint64_t)));
134 case StorageKind::kBool:
135 return static_cast<T>(chunk.readBool(col_index, row));
136 case StorageKind::kString:
137 return T{};
138 }
139 return T{};
140 }
141 default:
142 return T{};
143 }
144}
145
146void flattenColumnsImpl(
147 const TypeTreeNode& node, std::string_view prefix, FieldId& next_id, std::vector<ColumnDescriptor>& out) {

Callers

nothing calls this directly

Calls 5

readForOffsetFunction · 0.85
storageKindOfFunction · 0.85
columnEncodingMethod · 0.80
dataMethod · 0.45
readBoolMethod · 0.45

Tested by

no test coverage detected