#include "types.h"
#include <h5cpp/all>
#include "generated.h"
#include <iostream>
#include <complex>
#include <map>
#include <set>
#include <tuple>
#include <utility>
#include <vector>
#include <string>
int main() {
<<
" wrote " << devices.
size() <<
" device_t rows\n"
<< " read " << v_dev.size() << " device_t rows back\n"
<< " devices[0].region_code = " << v_dev[0].region_code << "\n\n";
sn::iot::event_t e1;
e1.timestamp_ns = 1'700'000'000'000'000'000ULL;
e1.source_id = "rack-3.sensor-7";
e1.connection_attempts = 5;
e1.payload = {0x4d, 0xcc, 0xa1, 0xfe, 0x00};
e1.temperatures = {21.5f, 21.8f, 22.1f};
e1.vibrations = {0.001, 0.005, 0.002, 0.003};
e1.error_codes = {0, 12, 0};
sn::iot::event_t e2;
e2.timestamp_ns = 1'700'000'001'000'000'000ULL;
e2.source_id = "rack-3.sensor-2";
e2.connection_attempts = 0;
e2.payload = {0xab, 0xcd};
e2.temperatures = {19.0f};
e2.vibrations = {};
e2.error_codes = {404};
sn::iot::event_t e_back;
h5::gather(fd, "/events", e_back);
<< " last event timestamp = " << e_back.timestamp_ns << "\n"
<< " source (renamed in file) = \"" << e_back.source_id << "\"\n"
<< " connection_attempts = " << e_back.connection_attempts
<< " (zero-init; [[h5::ignore]])\n"
<< " payload.size = " << e_back.payload.size() << "\n"
<< " temperatures.size = " << e_back.temperatures.size() << "\n"
<< " vibrations.size = " << e_back.vibrations.size() << "\n"
<< " error_codes.size = " << e_back.error_codes.size() << "\n\n";
sensors[0].timestamp_ns = 1'700'000'000'000'000'001ULL;
sensors[0].label = 42.0f;
sensors[0].value = 98.6;
sensors[1].timestamp_ns = 1'700'000'000'000'000'002ULL;
sensors[1].label = 43.0f;
sensors[1].value = 99.1;
sensors[2].timestamp_ns = 1'700'000'000'000'000'003ULL;
sensors[2].label = 44.0f;
sensors[2].value = 97.8;
<< " wrote " << sensors.size() << " sensor_t rows\n"
<< " read " << v_sens.size() << " sensor_t rows back\n"
<< " sensors[0].value = " << v_sens[0].value << "\n\n";
sn::iot::session_t s1;
s1.timestamp_ns = 1'700'000'000'000'000'004ULL;
s1.label = "session-alpha";
s1.internal_id = 99;
s1.readings = {1.1, 2.2, 3.3};
sn::iot::session_t s_back;
h5::gather(fd, "/sessions", s_back);
<< " last session label = \"" << s_back.label << "\"\n"
<< " readings.size = " << s_back.readings.size() << "\n"
<< " internal_id = " << s_back.internal_id
<< " (zero-init; [[h5::ignore]])\n\n";
sn::iot::probe_t probe;
h5::gather(fd, "/probe_missing", probe);
<< " gather on absent path returned early\n"
<< " probe.codes.size = " << probe.codes.size() << "\n\n";
installs[0].installed_at = 1'700'000'000'000'000'005ULL;
installs[0].device.device_id = 0xDEADBEEFULL;
installs[0].device.firmware_version[0] = 1.0f;
installs[0].device.firmware_version[1] = 2.0f;
installs[0].device.firmware_version[2] = 3.0f;
installs[0].rack_id = 7;
installs[1].installed_at = 1'700'000'000'000'000'006ULL;
installs[1].device.device_id = 0xCAFEBABEULL;
installs[1].device.firmware_version[0] = 4.0f;
installs[1].device.firmware_version[1] = 5.0f;
installs[1].device.firmware_version[2] = 6.0f;
installs[1].rack_id = 12;
<<
" wrote " << installs.
size() <<
" install_t rows\n"
<< " read " << v_inst.size() << " install_t rows back\n"
<<
" installs[0].device.device_id = 0x" <<
std::hex
<< v_inst[0].device.device_id <<
std::dec <<
"\n\n";
sn::iot::raw_blob_t blob;
blob.timestamp_ns = 1'700'000'000'000'000'007ULL;
blob.label = "opaque-label";
blob.samples = {9.9, 8.8, 7.7};
blob.checksum = 0x1234;
std::cout <<
"tier-1 serialize_full (opaque blob):\n"
<< " wrote raw_blob_t as opaque compound (sizeof = "
<< sizeof(sn::iot::raw_blob_t) << ")\n"
<< " non-POD fields (label, samples) skipped by compiler\n\n";
<< " read back = (" << std::get<0>(tup_back) << ", "
<< std::get<1>(tup_back) << ", '" << std::get<2>(tup_back) << "')\n\n";
std::cout <<
"std::vector<std::tuple<int,float>>:\n"
<< " wrote " << vtups.size() << " tuples\n"
<< " read " << vtups_back.size() << " tuples back\n\n";
std::cout <<
"std::vector<std::complex<double>>:\n"
<< " read back = [(" << vc_back[0].real() << ", " << vc_back[0].imag() << "), ...]\n\n";
<< " wrote " << m.size() << " entries\n"
<< " read " << m_back.size() << " entries back\n"
<< " m[2] = " << m_back[2] << "\n\n";
<< " wrote " << st.size() << " unique entries\n"
<< " read " << st_back.size() << " unique entries back\n\n";
<< " read back = [\"" << vs_back[0] << "\", \""
<< vs_back[1] << "\", \"" << vs_back[2] << "\"]\n\n";
std::cout <<
"std::vector<std::vector<double>> (ragged VLEN):\n"
<< " rows = " << ragged_back.size() << "\n"
<< " row[0].size = " << ragged_back[0].size() << "\n"
<< " row[1].size = " << ragged_back[1].size() << "\n"
<< " row[2].size = " << ragged_back[2].size() << "\n";
}
h5::at_t create(const hid_t &parent, const std::string &path, args_t &&... args)
Create a new attribute of element type T on a parent HDF5 object.
Definition H5Acreate.hpp:100
T aread(const hid_t &ds, const std::string &name, const h5::acpl_t &acpl=h5::default_acpl)
Read an attribute by name and return its value as type T.
Definition H5Aread.hpp:76
h5::gr_t write(const LOC &parent, const std::string &path, const T &src)
Write a sparse matrix or vector as a CSC group.
Definition H5Dsparse.hpp:185
h5::ds_t scatter(hid_t fd, const std::string &path, const T &obj)
Generic scatter (write) template for tier-2+ types.