diff --git a/include/DRAMUtils/memspec/MemSpec.h b/include/DRAMUtils/memspec/MemSpec.h index 8412463..d963672 100644 --- a/include/DRAMUtils/memspec/MemSpec.h +++ b/include/DRAMUtils/memspec/MemSpec.h @@ -44,7 +44,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/util/types.h" #include "DRAMUtils/util/id_variant.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecDDR3.h b/include/DRAMUtils/memspec/standards/MemSpecDDR3.h index f4c8b86..c23c11b 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecDDR3.h +++ b/include/DRAMUtils/memspec/standards/MemSpecDDR3.h @@ -40,7 +40,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecDDR4.h b/include/DRAMUtils/memspec/standards/MemSpecDDR4.h index 9c4508f..720ca7f 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecDDR4.h +++ b/include/DRAMUtils/memspec/standards/MemSpecDDR4.h @@ -39,7 +39,7 @@ #include #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecDDR5.h b/include/DRAMUtils/memspec/standards/MemSpecDDR5.h index 01a0cfb..8d7ba02 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecDDR5.h +++ b/include/DRAMUtils/memspec/standards/MemSpecDDR5.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecGDDR5.h b/include/DRAMUtils/memspec/standards/MemSpecGDDR5.h index 8916932..b5cb35b 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecGDDR5.h +++ b/include/DRAMUtils/memspec/standards/MemSpecGDDR5.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecGDDR5X.h b/include/DRAMUtils/memspec/standards/MemSpecGDDR5X.h index 69fa6c1..a44e497 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecGDDR5X.h +++ b/include/DRAMUtils/memspec/standards/MemSpecGDDR5X.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecGDDR6.h b/include/DRAMUtils/memspec/standards/MemSpecGDDR6.h index d07affc..1931fde 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecGDDR6.h +++ b/include/DRAMUtils/memspec/standards/MemSpecGDDR6.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecHBM2.h b/include/DRAMUtils/memspec/standards/MemSpecHBM2.h index 5b77c0f..009de05 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecHBM2.h +++ b/include/DRAMUtils/memspec/standards/MemSpecHBM2.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecHBM3.h b/include/DRAMUtils/memspec/standards/MemSpecHBM3.h index 5929ae5..76d813d 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecHBM3.h +++ b/include/DRAMUtils/memspec/standards/MemSpecHBM3.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecLPDDR4.h b/include/DRAMUtils/memspec/standards/MemSpecLPDDR4.h index 3ab4fd9..b9ff929 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecLPDDR4.h +++ b/include/DRAMUtils/memspec/standards/MemSpecLPDDR4.h @@ -39,7 +39,7 @@ #include #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecLPDDR5.h b/include/DRAMUtils/memspec/standards/MemSpecLPDDR5.h index fe55236..2093acc 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecLPDDR5.h +++ b/include/DRAMUtils/memspec/standards/MemSpecLPDDR5.h @@ -40,7 +40,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" namespace DRAMUtils::MemSpec { diff --git a/include/DRAMUtils/memspec/standards/MemSpecSTTMRAM.h b/include/DRAMUtils/memspec/standards/MemSpecSTTMRAM.h index d3bb9c1..5e2a8fc 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecSTTMRAM.h +++ b/include/DRAMUtils/memspec/standards/MemSpecSTTMRAM.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecWideIO.h b/include/DRAMUtils/memspec/standards/MemSpecWideIO.h index d5c4459..199b890 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecWideIO.h +++ b/include/DRAMUtils/memspec/standards/MemSpecWideIO.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/memspec/standards/MemSpecWideIO2.h b/include/DRAMUtils/memspec/standards/MemSpecWideIO2.h index 8196591..ee27b7a 100644 --- a/include/DRAMUtils/memspec/standards/MemSpecWideIO2.h +++ b/include/DRAMUtils/memspec/standards/MemSpecWideIO2.h @@ -38,7 +38,7 @@ #include #include -#include "DRAMUtils/util/json.h" +#include "DRAMUtils/util/json_utils.h" #include "DRAMUtils/memspec/BaseMemSpec.h" diff --git a/include/DRAMUtils/util/id_variant.h b/include/DRAMUtils/util/id_variant.h index f02f4bd..016acaf 100644 --- a/include/DRAMUtils/util/id_variant.h +++ b/include/DRAMUtils/util/id_variant.h @@ -40,8 +40,8 @@ #include #include -#include -#include +#include "json.h" +#include "types.h" #define DRAMUTILS_DECLARE_IDVARIANT(VariantName, IDFieldName, VariantTypeSequence) \ namespace detail { \ @@ -73,17 +73,16 @@ class IdVariant> using VariantTypes = util::type_sequence; using Variant = util::type_sequence_id_variant_t; - using Json = ::json_t; Variant variant; private: template - bool variant_from_json(const Json& j, util::type_sequence_id_variant_t& data) { + bool variant_from_json(const json_t& j, util::type_sequence_id_variant_t& data) { return variant_from_json_impl(j, data, Seq{}); // Seq{} needed for type deduction } template - bool variant_from_json_impl(const Json& j, util::type_sequence_id_variant_t>& data, util::type_sequence) { + bool variant_from_json_impl(const json_t& j, util::type_sequence_id_variant_t>& data, util::type_sequence) { const std::string& key = j.at(id_field_name_); return (( key == Types::id && (data = j.get(), true)) || ...); } @@ -105,7 +104,7 @@ class IdVariant> } public: - void to_json(Json& j) const { + void to_json(json_t& j) const { std::visit( [&j](const auto& v) { j = v; @@ -113,130 +112,12 @@ class IdVariant> }, variant); } - bool from_json(const Json& j) { + bool from_json(const json_t& j) { return variant_from_json(j, variant); } }; - -// Json helper functions - -template -void id_variant_from_json(const nlohmann::json& j, IdVariant& data, std::optional key) -{ - if (key) - { - // Find key - const auto it = j.find(*key); - if (it != j.end()) - { - // Key in json - if (!data.from_json(j[*key])) - throw std::bad_variant_access{}; - } - else - { - // Key not in json - throw std::bad_variant_access{}; - } - } - else { - // No key - if (!data.from_json(j)) - throw std::bad_variant_access{}; - } -} - -template -void id_variant_to_json(nlohmann::json& j, const IdVariant& data, std::optional key) -{ - if (key) - data.to_json(j[*key]); - else - data.to_json(j); - -} - - -template -constexpr bool is_id_variant = false; -template -constexpr bool is_id_variant> = true; - - -template void extended_to_json(const char* key, nlohmann::json& j, const T& value) -{ - if constexpr (is_optional) - optional_to_json(j, value, key); - else if constexpr (is_id_variant) - id_variant_to_json(j, value, key); - else if constexpr (is_variant) - variant_to_json(j, value); - else - j[key] = value; -} - -template void extended_from_json(const char* key, const nlohmann::json& j, T& value) -{ - if constexpr (is_optional) - optional_from_json(j, value, key); - else if constexpr (is_id_variant) - id_variant_from_json(j, value, key); - else if constexpr (is_variant) - variant_from_json(j, value); - else - j.at(key).get_to(value); -} - - } // namespace DRAMUtils::util - -NLOHMANN_JSON_NAMESPACE_BEGIN - -template struct adl_serializer> -{ - static void to_json(nlohmann::json& j, const std::variant& data) - { - DRAMUtils::util::variant_to_json(j, data); - } - - static void from_json(const nlohmann::json& j, std::variant& data) - { - // Call variant_from_json for all types, only one will succeed - (DRAMUtils::util::variant_from_json(j, data), ...); - } -}; - - -template struct adl_serializer> -{ - static void to_json(nlohmann::json& j, const DRAMUtils::util::IdVariant& data) - { - DRAMUtils::util::id_variant_to_json(j, data, std::nullopt); - } - - static void from_json(const nlohmann::json& j, DRAMUtils::util::IdVariant& data) - { - // Match variant by id - DRAMUtils::util::id_variant_from_json(j, data, std::nullopt); - } -}; - - -NLOHMANN_JSON_NAMESPACE_END - -// NOLINTBEGIN(cppcoreguidelines-macro-usage) - -#define EXTEND_JSON_TO(v1) \ - DRAMUtils::util::extended_to_json(#v1, nlohmann_json_j, nlohmann_json_t.v1); -#define EXTEND_JSON_FROM(v1) \ - DRAMUtils::util::extended_from_json(#v1, nlohmann_json_j, nlohmann_json_t.v1); - -// NOLINTEND(cppcoreguidelines-macro-usage) - - - - #endif /* DRAMUTILS_UTIL_ID_VARIANT_H */ diff --git a/include/DRAMUtils/util/json.h b/include/DRAMUtils/util/json.h index 3d3da5e..eff3ce3 100644 --- a/include/DRAMUtils/util/json.h +++ b/include/DRAMUtils/util/json.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, RPTU Kaiserslautern-Landau + * Copyright (c) 2024, RPTU Kaiserslautern-Landau * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,8 +30,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Authors: - * Thomas Psota - * Derek Christ * Marco Mörz */ @@ -40,115 +38,6 @@ #include "nlohmann/json.hpp" -#include -#include -#include - using json_t = nlohmann::json; -namespace DRAMUtils::util -{ -// See https://www.kdab.com/jsonify-with-nlohmann-json/ -// Try to set the value of type T into the variant data if it fails, do nothing -template -void variant_from_json(const nlohmann::json& j, std::variant& data) -{ - try - { - data = j.get(); - } - catch (...) - { - } -} - -template -void variant_to_json(nlohmann::json& j, const std::variant &data) -{ - std::visit([&j](const auto& v) { j = v; }, data); -} - - -template -void optional_to_json(nlohmann::json& j, const std::optional& data, std::optional key) -{ - if(key && data) - j[*key] = *data; - else if(data) - j = *data; -} - -template -void optional_from_json(const nlohmann::json& j, std::optional& data, std::optional key) -{ - if(key) - { - const auto it = j.find(*key); - if (it != j.end()) - data = it->get(); - else - data = std::nullopt; - } - else - { - data = j.get(); - } - -} - -template -constexpr bool is_optional = false; -template -constexpr bool is_optional> = true; - -template -constexpr bool is_variant = false; -template -constexpr bool is_variant> = true; - -} // namespace DRAMUtils::util - -NLOHMANN_JSON_NAMESPACE_BEGIN - -template struct adl_serializer> -{ - static void to_json(json_t& j, const std::optional& opt) - { - if (opt == std::nullopt) - { - j = nullptr; - } - else - { - j = *opt; - } - } - - static void from_json(const json_t& j, std::optional& opt) - { - if (j.is_null()) - { - opt = std::nullopt; - } - else - { - opt = j.get(); - } - } -}; - - -#define NLOHMANN_JSONIFY_ALL_THINGS(Type, ...) \ - inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \ - { \ - NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_TO, __VA_ARGS__)) \ - } \ - inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \ - { \ - NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_FROM, __VA_ARGS__)) \ - } - - -NLOHMANN_JSON_NAMESPACE_END - #endif /* DRAMUTILS_UTIL_JSON_H */ diff --git a/include/DRAMUtils/util/json_utils.h b/include/DRAMUtils/util/json_utils.h new file mode 100644 index 0000000..46d9533 --- /dev/null +++ b/include/DRAMUtils/util/json_utils.h @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2021, RPTU Kaiserslautern-Landau + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: + * Thomas Psota + * Derek Christ + * Marco Mörz + */ + +#ifndef DRAMUTILS_UTIL_JSON_UTILS_H +#define DRAMUTILS_UTIL_JSON_UTILS_H + +#include "json.h" + +#include "id_variant.h" + +#include +#include +#include + + + +namespace DRAMUtils::util +{ +// See https://www.kdab.com/jsonify-with-nlohmann-json/ +// Try to set the value of type T into the variant data if it fails, do nothing +template +void variant_from_json(const json_t& j, std::variant& data) +{ + try + { + data = j.get(); + } + catch (...) + { + } +} + +template +void variant_to_json(json_t& j, const std::variant &data) +{ + std::visit([&j](const auto& v) { j = v; }, data); +} + + +template +void optional_to_json(json_t& j, const std::optional& data, std::optional key) +{ + if(key && data) + j[*key] = *data; + else if(data) + j = *data; +} + +template +void optional_from_json(const json_t& j, std::optional& data, std::optional key) +{ + if(key) + { + const auto it = j.find(*key); + if (it != j.end()) + data = it->get(); + else + data = std::nullopt; + } + else + { + data = j.get(); + } + +} + +template +void id_variant_from_json(const json_t& j, IdVariant& data, std::optional key) +{ + if (key) + { + // Find key + const auto it = j.find(*key); + if (it != j.end()) + { + // Key in json + if (!data.from_json(j[*key])) + throw std::bad_variant_access{}; + } + else + { + // Key not in json + throw std::bad_variant_access{}; + } + } + else { + // No key + if (!data.from_json(j)) + throw std::bad_variant_access{}; + } +} + +template +void id_variant_to_json(json_t& j, const IdVariant& data, std::optional key) +{ + if (key) + data.to_json(j[*key]); + else + data.to_json(j); + +} + +template +constexpr bool is_optional = false; +template +constexpr bool is_optional> = true; + +template +constexpr bool is_variant = false; +template +constexpr bool is_variant> = true; + +template +constexpr bool is_id_variant = false; +template +constexpr bool is_id_variant> = true; + + +template void extended_to_json(const char* key, json_t& j, const T& value) +{ + if constexpr (is_optional) + optional_to_json(j, value, key); + else if constexpr (is_id_variant) + id_variant_to_json(j, value, key); + else if constexpr (is_variant) + variant_to_json(j, value); + else + j[key] = value; +} + +template void extended_from_json(const char* key, const json_t& j, T& value) +{ + if constexpr (is_optional) + optional_from_json(j, value, key); + else if constexpr (is_id_variant) + id_variant_from_json(j, value, key); + else if constexpr (is_variant) + variant_from_json(j, value); + else + j.at(key).get_to(value); +} + +} // namespace DRAMUtils::util + +NLOHMANN_JSON_NAMESPACE_BEGIN + +template struct adl_serializer> +{ + static void to_json(json_t& j, const std::optional& opt) + { + if (opt == std::nullopt) + { + j = nullptr; + } + else + { + j = *opt; + } + } + + static void from_json(const json_t& j, std::optional& opt) + { + if (j.is_null()) + { + opt = std::nullopt; + } + else + { + opt = j.get(); + } + } +}; + +template struct adl_serializer> +{ + static void to_json(json_t& j, const std::variant& data) + { + DRAMUtils::util::variant_to_json(j, data); + } + + static void from_json(const json_t& j, std::variant& data) + { + // Call variant_from_json for all types, only one will succeed + (DRAMUtils::util::variant_from_json(j, data), ...); + } +}; + + +template struct adl_serializer> +{ + static void to_json(json_t& j, const DRAMUtils::util::IdVariant& data) + { + DRAMUtils::util::id_variant_to_json(j, data, std::nullopt); + } + + static void from_json(const json_t& j, DRAMUtils::util::IdVariant& data) + { + // Match variant by id + DRAMUtils::util::id_variant_from_json(j, data, std::nullopt); + } +}; + + +// NOLINTBEGIN(cppcoreguidelines-macro-usage) + +#define EXTEND_JSON_TO(v1) \ + DRAMUtils::util::extended_to_json(#v1, nlohmann_json_j, nlohmann_json_t.v1); +#define EXTEND_JSON_FROM(v1) \ + DRAMUtils::util::extended_from_json(#v1, nlohmann_json_j, nlohmann_json_t.v1); + +// NOLINTEND(cppcoreguidelines-macro-usage) + +#define NLOHMANN_JSONIFY_ALL_THINGS(Type, ...) \ + inline void to_json(json_t& nlohmann_json_j, const Type& nlohmann_json_t) \ + { \ + NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_TO, __VA_ARGS__)) \ + } \ + inline void from_json(const json_t& nlohmann_json_j, Type& nlohmann_json_t) \ + { \ + NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(EXTEND_JSON_FROM, __VA_ARGS__)) \ + } + + +NLOHMANN_JSON_NAMESPACE_END + +#endif /* DRAMUTILS_UTIL_JSON_UTILS_H */ diff --git a/include/DRAMUtils/util/util.h b/include/DRAMUtils/util/util.h deleted file mode 100644 index 90dfcdc..0000000 --- a/include/DRAMUtils/util/util.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2021, RPTU Kaiserslautern-Landau - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: - * Thomas Psota - * Marco Mörz - */ - -#ifndef DRAMUTILS_UTIL_UTIL_H -#define DRAMUTILS_UTIL_UTIL_H - -namespace DRAMUtils::util -{ - - -} - -namespace nlohmann -{ - -} // nlohmann - -#endif /* DRAMUTILS_UTIL_UTIL_H */