27#include "columnsdata/columnsdata.hpp"
30namespace nsTimeSeries {
33 Parameters(
size_t nchan = 0,
size_t nsamp = 0,
double rate = 1.0)
36 Parameters(
const std::vector<std::string>& labels,
size_t nsamp = 0,
double rate = 1.0)
43using Base = ColumnsType<T>;
50 typedef stride_iter<T*> column_iterator;
51 typedef T* sample_iterator;
62 Data(
const std::vector<std::string>& labels,
size_t nsamples,
double sample_rate)
63 : BaseClass(labels, nsamples) {
64 if (sample_rate <= 0) {
65 throw std::runtime_error(
66 "Time Series Data::Data - sample rate "
67 "needs to be larger than 0.");
70 sample_rate_ = sample_rate;
71 timestamps_.resize(nsamples);
84 Data(
size_t ncolumns,
size_t nsamples,
double sample_rate)
85 :
Data(generate_labels(ncolumns), ncolumns, nsamples, sample_rate) {}
94 :
Data(parameters.labels, parameters.nsamples, parameters.sample_rate) {}
96 static const std::string static_datatype() {
97 return "time series [" + get_type_string<T>() +
"]";
99 static const std::string static_dataname() {
return "data"; }
106 BaseClass::ClearData();
107 std::fill(timestamps_.begin(), timestamps_.end(), 0);
111 return Parameters(this->labels_, this->nsamples_, sample_rate_);
114 double sample_rate()
const {
return sample_rate_; }
137 if (sample >= this->nsamples_) {
138 throw std::out_of_range(
". Sample index " + std::to_string(sample) +
139 " out of range. Max index is " +
140 std::to_string(this->nsamples_ - 1));
142 timestamps_[sample] = t;
151 if (t.size() != this->nsamples_) {
152 throw std::length_error(
153 ". the timestamps vector to set should have the same size as "
154 "the number of samples (" +
155 std::to_string(this->nsamples_) +
" samples)");
169 BaseClass::SerializeFlatBuffer(flex_builder);
170 flex_builder.TypedVector(
"timestamps", [&] {
171 for (
auto samples : timestamps_) flex_builder.Add(samples);
185 Serialization::Format::FULL)
const override {
186 BaseClass::SerializeBinary(stream, format);
188 if (format == Serialization::Format::FULL || format == Serialization::Format::COMPACT) {
189 stream.write(
reinterpret_cast<const char*
>(timestamps_.data()),
190 timestamps_.size() *
sizeof(uint64_t));
194 std::string_view serialized_type_name()
const override {
195 if constexpr (std::is_same_v<T, double>) {
196 return "TimeSeriesType<double>";
197 }
else if constexpr (std::is_same_v<T, float>) {
198 return "TimeSeriesType<float>";
199 }
else if constexpr (std::is_same_v<T, uint8_t>) {
200 return "TimeSeriesType<uint8_t>";
202 return "TimeSeriesType<Unknown>";
215 Serialization::Format format = Serialization::Format::FULL)
const override {
216 BaseClass::SerializeYAML(node, format);
218 if (format == Serialization::Format::FULL || format == Serialization::Format::COMPACT) {
219 node[
"timestamps"] = timestamps_;
231 Serialization::Format::FULL)
const override {
232 BaseClass::YAMLDescription(node, format);
234 if (format == Serialization::Format::FULL) {
235 node.push_back(
"timestamps uint64 (" + std::to_string(this->nsamples()) +
")");
238 if (format == Serialization::Format::COMPACT) {
239 node.push_back(
"timestamps uint64 (1)");
245 std::vector<uint64_t> timestamps_;
Convenient template class to define data types.
Definition idata.hpp:75
Base class of all data object classes.
Definition idata.hpp:95
Definition columnsdata.hpp:465
void set_sample_timestamps(const std::vector< uint64_t > &t)
set_sample_timestamps - set all timestamps for all sample
Definition timeseriesdata.hpp:150
void SerializeYAML(YAML::Node &node, Serialization::Format format=Serialization::Format::FULL) const override
SerializeYAML - This datatype add as a yaml node the timestamps.
Definition timeseriesdata.hpp:214
void set_sample_timestamp(size_t sample, uint64_t t)
set_sample_timestamp - set one timestamp for a given sample number
Definition timeseriesdata.hpp:136
void ClearData() override
ClearData - clear the timestamps and the data (done in the columndatatype::Data).
Definition timeseriesdata.hpp:105
Data(const std::vector< std::string > &labels, size_t nsamples, double sample_rate)
Data constructor with the label of the columns, the number of samples and the sample rate.
Definition timeseriesdata.hpp:62
void YAMLDescription(YAML::Node &node, Serialization::Format format=Serialization::Format::FULL) const override
YAMLDescription - this datatype add to the metadata describing the data format the timestamp format.
Definition timeseriesdata.hpp:230
void SerializeBinary(std::ostream &stream, Serialization::Format format=Serialization::Format::FULL) const override
SerializeBinary - This datatype add in the binary stream the timestamps.
Definition timeseriesdata.hpp:184
uint64_t sample_timestamp(size_t sample=0) const
sample_timestamp - give the timestamp corresponding to a sample number
Definition timeseriesdata.hpp:122
Data(size_t ncolumns, size_t nsamples, double sample_rate)
Data constructor with only the number of columns, the number of samples and the sample rate.
Definition timeseriesdata.hpp:84
const std::vector< uint64_t > & sample_timestamps() const
sample_timestamps - give all the timestamps in the packet
Definition timeseriesdata.hpp:128
void SerializeFlatBuffer(flexbuffers::Builder &flex_builder) override
FlatbufferDescription - This datatype add in the flexbuffer stream the timestamps and the type name.
Definition timeseriesdata.hpp:168
Data(const Parameters ¶meters)
Data constructor based on the parameters object.
Definition timeseriesdata.hpp:93
Definition columnsdata.hpp:41
Definition timeseriesdata.hpp:32