diff --git a/slsDetectorSoftware/tests/master_file/Context.h b/slsDetectorSoftware/tests/master_file/Context.h index b597ac19f..e5fd13048 100644 --- a/slsDetectorSoftware/tests/master_file/Context.h +++ b/slsDetectorSoftware/tests/master_file/Context.h @@ -13,7 +13,7 @@ namespace sls::test::master_file { struct JsonContext { - const rapidjson::Document doc; + rapidjson::Document doc; }; #ifdef HDF5C struct H5Context { diff --git a/slsDetectorSoftware/tests/master_file/Readers.cpp b/slsDetectorSoftware/tests/master_file/Readers.cpp index a97932ec0..d9e14745c 100644 --- a/slsDetectorSoftware/tests/master_file/Readers.cpp +++ b/slsDetectorSoftware/tests/master_file/Readers.cpp @@ -1,7 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #include "Readers.h" -#include "Context.h" #include "sls/ToString.h" diff --git a/slsDetectorSoftware/tests/master_file/Readers.h b/slsDetectorSoftware/tests/master_file/Readers.h index 71d2e8f7c..84b160fb9 100644 --- a/slsDetectorSoftware/tests/master_file/Readers.h +++ b/slsDetectorSoftware/tests/master_file/Readers.h @@ -2,152 +2,20 @@ // Copyright (C) 2021 Contributors to the SLS Detector Package #pragma once -#include "sls/sls_detector_defs.h" +#include "Context.h" #ifdef HDF5C #include "H5Cpp.h" #endif -#include -#include #include -#include -#include namespace sls::test::master_file { -using ns = std::chrono::nanoseconds; -using rapidjson::Document; +template struct Reader; -/* -struct JsonDoc { - const rapidjson::Document &doc; -}; -#ifdef HDF5C -struct H5Doc { - const H5::DataSet& ds; -}; -#endif - -template -T read(const doc& b, const std::string& name); -*/ - -/** ---scalar reads--- */ -/** std::string */ -/* -template <> -inline std::string read( - const JsonDoc& b, - const std::string& name) -{ - return b.doc[name.c_str()].GetString(); +template +T read(const Context &ctx, const std::string &name) { + return Reader::read(ctx, name); } -#ifdef HDF5C -template <> -inline std::string read( - const H5Doc& b, - const std::string& name) -{ - std::string out; - b.ds.read(out, ds.getStrType()); - return out; -} -#endif -*/ -void read_from_json(const Document &doc, const std::string &name, - std::string &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - std::string &out); -#endif - -/** int */ -void read_from_json(const Document &doc, const std::string &name, int &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - int &out); -#endif - -/** uint32_t */ -void read_from_json(const Document &doc, const std::string &name, - uint32_t &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - uint32_t &out); -#endif - -/** uint64_t */ -void read_from_json(const Document &doc, const std::string &name, - uint64_t &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - uint64_t &out); -#endif - -/** double */ -void read_from_json(const Document &doc, const std::string &name, double &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - double &out); -#endif - -/* ---vector reads--- */ -/** int64_t */ -void read_from_json(const Document &doc, const std::string &name, - std::vector &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - std::vector &out); -#endif - -/* ---arrays/ maps--- */ -/** std::array */ -void read_from_json(const Document &doc, const std::string &name, - std::array &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - std::array &out); -#endif - -/** std::array */ -void read_from_json(const Document &doc, const std::string &name, - std::array &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - std::array &out); -#endif - -/** std::map */ -void read_from_json(const Document &doc, const std::string &name, - std::map &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - std::map &out); -#endif - -/* complex types */ -/* std::vector */ -void read_from_json(const Document &doc, const std::string &name, - std::vector &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - std::vector &out); -#endif - -/** defs::xy */ -void read_from_json(const Document &doc, const std::string &name, - defs::xy &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - defs::xy &out); -#endif - -/** defs::scanParameters */ -void read_from_json(const Document &doc, const std::string &name, - defs::scanParameters &out); -#ifdef HDF5C -void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, - defs::scanParameters &out); -#endif } // namespace sls::test::master_file diff --git a/slsDetectorSoftware/tests/master_file/ReadersH5.cpp b/slsDetectorSoftware/tests/master_file/ReadersH5.cpp new file mode 100644 index 000000000..647197b6b --- /dev/null +++ b/slsDetectorSoftware/tests/master_file/ReadersH5.cpp @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package + +#include "Readers.h" + +#ifdef HDF5C + +namespace sls::test::master_file { + +template <> +struct Reader { + + static int read(const H5Context& ctx, + const std::string& name) { + + auto ds = ctx.file.openDataSet(HDF5_GROUP + name); + int out{}; + ds.read(&out, H5::PredType::NATIVE_INT); + return out; + } +}; + +} // namespace sls::test::master_file + +#endif \ No newline at end of file diff --git a/slsDetectorSoftware/tests/master_file/ReadersJson.cpp b/slsDetectorSoftware/tests/master_file/ReadersJson.cpp new file mode 100644 index 000000000..5fb2c7584 --- /dev/null +++ b/slsDetectorSoftware/tests/master_file/ReadersJson.cpp @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package + +#include "Readers.h" + +namespace sls::test::master_file { + +/* --scalar reads-- */ +template <> +struct Reader { + static int read(const JsonContext &ctx, const std::string &name) { + return ctx.doc[name.c_str()].GetInt(); + } +}; + +template<> +struct Reader { + + static uint32_t read(const JsonContext& ctx, + const std::string& name) { + + return ctx.doc[name.c_str()].GetUint(); + + } +}; + +template<> +struct Reader { + + static uint64_t read(const JsonContext& ctx, + const std::string& name) { + + return ctx.doc[name.c_str()].GetUint64(); + } +}; + +template<> +struct Reader { + + static double read(const JsonContext& ctx, + const std::string& name) { + + return ctx.doc[name.c_str()].GetDouble(); + } +}; + +template<> +struct Reader { + + static std::string read(const JsonContext& ctx, + const std::string& name) { + + return ctx.doc[name.c_str()].GetString(); + } +}; + +} // namespace sls::test::master_file \ No newline at end of file diff --git a/slsDetectorSoftware/tests/master_file/Readers_bak.h b/slsDetectorSoftware/tests/master_file/Readers_bak.h new file mode 100644 index 000000000..864501068 --- /dev/null +++ b/slsDetectorSoftware/tests/master_file/Readers_bak.h @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package +#pragma once + +#include "Context.h" +#include "sls/sls_detector_defs.h" + +#ifdef HDF5C +#include "H5Cpp.h" +#endif + +#include + +namespace sls::test::master_file { + +using ns = std::chrono::nanoseconds; + +void read_from_json(const Document &doc, const std::string &name, + std::string &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + std::string &out); +#endif + +/** int */ +void read_from_json(const Document &doc, const std::string &name, int &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + int &out); +#endif + +/** uint32_t */ +void read_from_json(const Document &doc, const std::string &name, + uint32_t &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + uint32_t &out); +#endif + +/** uint64_t */ +void read_from_json(const Document &doc, const std::string &name, + uint64_t &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + uint64_t &out); +#endif + +/** double */ +void read_from_json(const Document &doc, const std::string &name, double &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + double &out); +#endif + +/* ---vector reads--- */ +/** int64_t */ +void read_from_json(const Document &doc, const std::string &name, + std::vector &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + std::vector &out); +#endif + +/* ---arrays/ maps--- */ +/** std::array */ +void read_from_json(const Document &doc, const std::string &name, + std::array &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + std::array &out); +#endif + +/** std::array */ +void read_from_json(const Document &doc, const std::string &name, + std::array &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + std::array &out); +#endif + +/** std::map */ +void read_from_json(const Document &doc, const std::string &name, + std::map &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + std::map &out); +#endif + +/* complex types */ +/* std::vector */ +void read_from_json(const Document &doc, const std::string &name, + std::vector &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + std::vector &out); +#endif + +/** defs::xy */ +void read_from_json(const Document &doc, const std::string &name, + defs::xy &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + defs::xy &out); +#endif + +/** defs::scanParameters */ +void read_from_json(const Document &doc, const std::string &name, + defs::scanParameters &out); +#ifdef HDF5C +void read_from_h5_dataset(const H5::DataSet &ds, const std::string &name, + defs::scanParameters &out); +#endif + +} // namespace sls::test::master_file