From f5f0a1481ef050132f508ba5339fea42cc7fe4c3 Mon Sep 17 00:00:00 2001 From: Philipp Geier Date: Tue, 7 Oct 2025 08:02:06 +0000 Subject: [PATCH] Simplify TypeToString and restrict usage to specific use cases --- .../multiom/generate_knowledge/GenerateCPP.py | 10 - src/multio/datamod/core/EntryDef.h | 31 +- src/multio/datamod/types/LevType.cc | 1 - src/multio/datamod/types/LevType.h | 10 +- src/multio/datamod/types/Repres.h | 9 +- src/multio/datamod/types/StatType.cc | 1 - src/multio/datamod/types/StatType.h | 9 +- src/multio/datamod/types/TimeDuration.cc | 1 - src/multio/datamod/types/TimeDuration.h | 11 +- src/multio/datamod/types/TypeOfLevel.cc | 1 - src/multio/datamod/types/TypeOfLevel.h | 8 +- .../types/TypeOfStatisticalProcessing.cc | 1 - .../types/TypeOfStatisticalProcessing.h | 8 +- src/multio/mars2grib/EncoderCache.h | 6 +- src/multio/mars2grib/EncoderConf.h | 113 +--- src/multio/mars2grib/generated/InferPDT.h | 502 ++++++++---------- src/multio/mars2grib/sections/Level.h | 14 +- src/multio/mars2grib/sections/SectionTypes.h | 17 +- src/multio/util/TypeToString.h | 71 +-- 19 files changed, 280 insertions(+), 544 deletions(-) diff --git a/share/multiom/generate_knowledge/GenerateCPP.py b/share/multiom/generate_knowledge/GenerateCPP.py index 1b227e658..30b06470c 100644 --- a/share/multiom/generate_knowledge/GenerateCPP.py +++ b/share/multiom/generate_knowledge/GenerateCPP.py @@ -90,11 +90,6 @@ def generateCPPEnumForCategory(categories, categoryName, setOfValues, namespace) }} }}; -template <> -struct TypeToString<{namespace}::{enumName}> {{ - std::string operator()() const {{ return "{namespace}::{enumName}"; }}; -}}; - }} // namespace multio::util @@ -180,10 +175,6 @@ def generateCPPPDTCatRecord( template<> struct Print<{namespace}::{pdtCatName}>: multio::datamod::PrintRecord {{}}; -template <> -struct TypeToString<{namespace}::{pdtCatName}> {{ - std::string operator()() const {{ return "{namespace}::{pdtCatName}"; }}; -}}; }} """ @@ -336,7 +327,6 @@ def filterSelector(sel): #include "multio/util/Hash.h" #include "multio/util/TypeTraits.h" -#include "multio/util/TypeToString.h" #include "multio/util/Print.h" #include "multio/datamod/core/EntryDef.h" diff --git a/src/multio/datamod/core/EntryDef.h b/src/multio/datamod/core/EntryDef.h index 26c79cbf7..4250968dc 100644 --- a/src/multio/datamod/core/EntryDef.h +++ b/src/multio/datamod/core/EntryDef.h @@ -24,9 +24,9 @@ namespace multio::datamod { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Definitions to describe key-value pairs -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- /// \defgroup datamod_core_entrydef EntryDef /// \ingroup datamod_core @@ -102,9 +102,9 @@ namespace multio::datamod { // Forward declaration enum class EntryTag : std::uint64_t { - Required, // Strictly required and can not be defaulted or conditionally depending on other keys - Defaulted, // Can be missing after reading from container but then may be defaulted through a custom alter function - Optional, // Can be missing after validation + Required, // Strictly required and can not be defaulted or conditionally depending on other keys + Defaulted, // Can be missing after reading from container but then may be defaulted through a custom alter function + Optional, // Can be missing after validation Disallowed, // Must be missing after validation }; @@ -235,10 +235,7 @@ struct BaseEntryDef { const std::optional& description() const noexcept { return description_; } - std::string keyInfo() const { - return std::string(key()) + std::string(" (") + util::typeToString() + std::string(", ") - + toString(tag) + std::string{")"}; - } + std::string keyInfo() const { return std::string(key()) + std::string(" (") + toString(tag) + std::string{")"}; } // Functions to create Entries @@ -461,7 +458,7 @@ struct EntryDef : BaseEntryDef { }; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- template struct IsBaseEntryDefinition : std::false_type {}; @@ -475,7 +472,7 @@ inline constexpr bool IsBaseEntryDefinition_v = IsBaseEntryDefinition::value; // template // concept BaseEntryDefinitionType = IsBaseEntryDefinition>::value; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- template struct IsEntryDefinition : std::false_type {}; @@ -489,7 +486,7 @@ inline constexpr bool IsEntryDefinition_v = IsEntryDefinition::value; // template // concept EntryDefinitionType = IsEntryDefinition>::value; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- template using EntryType_t = typename std::decay_t::EntryType; @@ -497,7 +494,7 @@ using EntryType_t = typename std::decay_t::EntryType; template using EntryValueType_t = typename std::decay_t::ValueType; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- /// Implicit EntryDefs are the usual way how to use "reflections" to model data structures. /// However, given that in ECMWF MARS and GRIB keys are are often used key by key, there is a need @@ -508,7 +505,7 @@ using EntryValueType_t = typename std::decay_t::ValueType; template struct PointerToMemberAccessor { - M T::*member; + M T::* member; template decltype(auto) operator()(U&& obj) const { @@ -518,7 +515,7 @@ struct PointerToMemberAccessor { }; template -constexpr auto entryDef(std::string_view key, M T::*member) { +constexpr auto entryDef(std::string_view key, M T::* member) { static_assert(IsEntry_v); using ValueType = typename M::ValueType; using Mapper = typename M::Mapper; @@ -527,7 +524,7 @@ constexpr auto entryDef(std::string_view key, M T::*member) { } -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // NOTE: This may be removed once the metadata is cleaned up again. We probably will use nested metadata instead of // having prefixes (too cumbersome) @@ -644,6 +641,6 @@ ScopedEntryDef scopedEntryDef(const EntryDef_& entryDef, const std::s template struct IsEntryDefinition> : std::true_type {}; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- } // namespace multio::datamod diff --git a/src/multio/datamod/types/LevType.cc b/src/multio/datamod/types/LevType.cc index f81d1cf42..40a27eae3 100644 --- a/src/multio/datamod/types/LevType.cc +++ b/src/multio/datamod/types/LevType.cc @@ -127,4 +127,3 @@ void util::Print::print(PrintStream& ps, const datamod::LevTyp } } // namespace multio::util - diff --git a/src/multio/datamod/types/LevType.h b/src/multio/datamod/types/LevType.h index 4005277aa..e45d05475 100644 --- a/src/multio/datamod/types/LevType.h +++ b/src/multio/datamod/types/LevType.h @@ -13,13 +13,11 @@ #include "multio/datamod/core/TypeParserDumper.h" #include "multio/util/Print.h" -#include "multio/util/TypeToString.h" - namespace multio::datamod { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // To be renamed and kept internal - @@ -55,11 +53,6 @@ struct Print { static void print(PrintStream& ps, const datamod::LevType& v); }; -template <> -struct TypeToString { - std::string operator()() const { return "datamod::LevType"; }; -}; - } // namespace multio::util namespace multio::datamod { @@ -77,4 +70,3 @@ struct ParseType { } // namespace multio::datamod - diff --git a/src/multio/datamod/types/Repres.h b/src/multio/datamod/types/Repres.h index f7f5c7de1..fc12801f4 100644 --- a/src/multio/datamod/types/Repres.h +++ b/src/multio/datamod/types/Repres.h @@ -13,14 +13,13 @@ #include "multio/datamod/core/TypeParserDumper.h" #include "multio/util/Print.h" -#include "multio/util/TypeToString.h" #include namespace multio::datamod { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // To be renamed and kept internal - enum class Repres : std::size_t @@ -42,11 +41,6 @@ struct Print { static void print(PrintStream& ps, const datamod::Repres& v); }; -template <> -struct TypeToString { - std::string operator()() const { return "datamod::Repres"; }; -}; - } // namespace multio::util namespace multio::datamod { @@ -66,4 +60,3 @@ struct ParseType { Repres represFromGrid(const std::string& grid); } // namespace multio::datamod - diff --git a/src/multio/datamod/types/StatType.cc b/src/multio/datamod/types/StatType.cc index 93a6dde05..5e9218ff1 100644 --- a/src/multio/datamod/types/StatType.cc +++ b/src/multio/datamod/types/StatType.cc @@ -170,4 +170,3 @@ void util::Print::print(PrintStream& ps, const datamod::StatT } } // namespace multio::util - diff --git a/src/multio/datamod/types/StatType.h b/src/multio/datamod/types/StatType.h index a72298290..05bb0af80 100644 --- a/src/multio/datamod/types/StatType.h +++ b/src/multio/datamod/types/StatType.h @@ -15,12 +15,11 @@ #include "multio/util/Hash.h" #include "multio/util/Print.h" -#include "multio/util/TypeToString.h" namespace multio::datamod { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- enum class StatTypeDuration : std::size_t @@ -98,11 +97,6 @@ struct Print { static void print(PrintStream& ps, const datamod::StatType& v); }; -template <> -struct TypeToString { - std::string operator()() const { return "datamod::StatType"; }; -}; - } // namespace multio::util namespace multio::datamod { @@ -156,4 +150,3 @@ struct ParseType { } // namespace multio::datamod - diff --git a/src/multio/datamod/types/TimeDuration.cc b/src/multio/datamod/types/TimeDuration.cc index fe63f9efc..0b8e26a88 100644 --- a/src/multio/datamod/types/TimeDuration.cc +++ b/src/multio/datamod/types/TimeDuration.cc @@ -90,4 +90,3 @@ void util::Print::print(PrintStream& ps, const datamod::T } // namespace multio::util - diff --git a/src/multio/datamod/types/TimeDuration.h b/src/multio/datamod/types/TimeDuration.h index 9c1a49640..97df9f5eb 100644 --- a/src/multio/datamod/types/TimeDuration.h +++ b/src/multio/datamod/types/TimeDuration.h @@ -14,7 +14,6 @@ #include "multio/util/Hash.h" #include "multio/util/Print.h" -#include "multio/util/TypeToString.h" #include #include @@ -23,7 +22,7 @@ namespace multio::datamod { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- using IntOrString = std::variant; @@ -70,7 +69,7 @@ struct variant_alternative : variant_alternative {}; } // namespace std -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- namespace multio::util { @@ -79,12 +78,6 @@ struct Print { static void print(PrintStream& ps, const datamod::TimeDuration& v); }; - -template <> -struct TypeToString { - std::string operator()() const { return "datamod::TimeDuration"; }; -}; - } // namespace multio::util namespace multio::datamod { diff --git a/src/multio/datamod/types/TypeOfLevel.cc b/src/multio/datamod/types/TypeOfLevel.cc index 4ab1357e6..f2998ff31 100644 --- a/src/multio/datamod/types/TypeOfLevel.cc +++ b/src/multio/datamod/types/TypeOfLevel.cc @@ -335,4 +335,3 @@ void util::Print::print(PrintStream& ps, const datamod::Ty } } // namespace multio - diff --git a/src/multio/datamod/types/TypeOfLevel.h b/src/multio/datamod/types/TypeOfLevel.h index 78a879eec..3df3368b8 100644 --- a/src/multio/datamod/types/TypeOfLevel.h +++ b/src/multio/datamod/types/TypeOfLevel.h @@ -12,12 +12,11 @@ #include "multio/datamod/core/TypeParserDumper.h" #include "multio/util/Print.h" -#include "multio/util/TypeToString.h" namespace multio::datamod { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- enum class TypeOfLevel : std::size_t @@ -132,10 +131,6 @@ struct Print { static void print(PrintStream&, const datamod::TypeOfLevel&); }; -template <> -struct TypeToString { - std::string operator()() const { return "datamod::TypeOfLevel"; }; -}; } // namespace multio::util namespace multio::datamod { @@ -154,4 +149,3 @@ struct ParseType { } // namespace multio::datamod - diff --git a/src/multio/datamod/types/TypeOfStatisticalProcessing.cc b/src/multio/datamod/types/TypeOfStatisticalProcessing.cc index 6405acab4..f732b18b5 100644 --- a/src/multio/datamod/types/TypeOfStatisticalProcessing.cc +++ b/src/multio/datamod/types/TypeOfStatisticalProcessing.cc @@ -174,4 +174,3 @@ void util::Print::print(PrintStream& ps, } } // namespace multio - diff --git a/src/multio/datamod/types/TypeOfStatisticalProcessing.h b/src/multio/datamod/types/TypeOfStatisticalProcessing.h index b78b6219a..b7691c1fa 100644 --- a/src/multio/datamod/types/TypeOfStatisticalProcessing.h +++ b/src/multio/datamod/types/TypeOfStatisticalProcessing.h @@ -12,12 +12,11 @@ #include "multio/datamod/core/TypeParserDumper.h" #include "multio/util/Print.h" -#include "multio/util/TypeToString.h" namespace multio::datamod { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // TypeOfStatisticalProcessing defined with official integer representation in GRIB 4.10 code table // https://codes.ecmwf.int/grib/format/grib2/ctables/4/10/ @@ -52,10 +51,6 @@ struct Print { static void print(PrintStream&, const datamod::TypeOfStatisticalProcessing&); }; -template <> -struct TypeToString { - std::string operator()() const { return "datamod::TypeOfStatisticalProcessing"; }; -}; } // namespace multio::util @@ -81,4 +76,3 @@ struct ParseType { } // namespace multio::datamod - diff --git a/src/multio/mars2grib/EncoderCache.h b/src/multio/mars2grib/EncoderCache.h index 18a795291..5faa8dd87 100644 --- a/src/multio/mars2grib/EncoderCache.h +++ b/src/multio/mars2grib/EncoderCache.h @@ -52,14 +52,14 @@ class EncoderCache { std::unique_ptr preparedSample; }; - CacheEntry& makeOrGetEntry(const dm::FullMarsRecord& marsKeys, const MultIOMDict& marsDict, const MultIOMDict& parDict, - const MultIOMDict& geoDict); + CacheEntry& makeOrGetEntry(const dm::FullMarsRecord& marsKeys, const MultIOMDict& marsDict, + const MultIOMDict& parDict, const MultIOMDict& geoDict); std::unordered_map cache_{}; }; -//--------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- } // namespace multio::mars2grib diff --git a/src/multio/mars2grib/EncoderConf.h b/src/multio/mars2grib/EncoderConf.h index a02bf894c..cc30791c4 100644 --- a/src/multio/mars2grib/EncoderConf.h +++ b/src/multio/mars2grib/EncoderConf.h @@ -38,9 +38,9 @@ namespace dm = multio::datamod; namespace mars2grib { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Section0 -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- struct IndicatorSection { dm::Entry templateNumber; @@ -50,9 +50,9 @@ struct IndicatorSection { = std::make_tuple(dm::entryDef("template-number", &IndicatorSection::templateNumber).withDefault(0)); }; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Section1 -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- struct OriginConfigurator { dm::Entry type; @@ -107,9 +107,9 @@ struct IdentificationSection { dm::nestedEntryDef(&IdentificationSection::referenceTime), dm::nestedEntryDef(&IdentificationSection::tables)); }; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Section2 Local use -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- struct LocalUseSection { dm::Entry templateNumber; @@ -119,9 +119,9 @@ struct LocalUseSection { = std::make_tuple(dm::entryDef("template-number", &LocalUseSection::templateNumber).withDefault(0)); }; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Section3 Grid -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- struct GridSection { dm::Entry templateNumber; @@ -131,9 +131,9 @@ struct GridSection { = std::make_tuple(dm::entryDef("template-number", &GridSection::templateNumber).withDefault(0)); }; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Section4 Product definition -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- struct ParamConfigurator { dm::Entry type; @@ -317,9 +317,9 @@ struct ProductSection { }; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Section5 Data representation -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- struct DataRepresSection { dm::Entry templateNumber; @@ -331,9 +331,9 @@ struct DataRepresSection { ); }; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // All sections -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- struct SectionsConf { dm::Entry type; @@ -406,91 +406,6 @@ struct Print : datamod::PrintRecord {}; template <> struct Print : datamod::PrintRecord {}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::IndicatorSection"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::OriginConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::DataTypeConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::ReferenceTimeConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::TablesConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::IdentificationSection"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::LocalUseSection"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::GridSection"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::ParamConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::PointInTimeConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::TimeRangeConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::ProcessConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::ModelConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::RandomPatternsConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::SatelliteConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::ChemConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::DirFreqConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::PeriodConfigurator"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::ProductSection"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::DataRepresSection"); }; -}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::SectionsConf"); }; -}; - } // namespace util } // namespace multio diff --git a/src/multio/mars2grib/generated/InferPDT.h b/src/multio/mars2grib/generated/InferPDT.h index 3fb259e58..ab6aa6486 100644 --- a/src/multio/mars2grib/generated/InferPDT.h +++ b/src/multio/mars2grib/generated/InferPDT.h @@ -41,7 +41,6 @@ #include "multio/util/Hash.h" #include "multio/util/Print.h" -#include "multio/util/TypeToString.h" #include "multio/util/TypeTraits.h" #include "multio/datamod/core/Compare.h" @@ -116,11 +115,6 @@ struct Print { } }; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::TimeExtent"; }; -}; - } // namespace multio::util @@ -129,8 +123,8 @@ namespace multio::mars2grib::rules { enum class TimeFormat : std::uint64_t { None = 0, - WithReferencePeriod, LocalTime, + WithReferencePeriod, }; } @@ -144,10 +138,10 @@ struct DumpType { switch (v) { case TimeFormat::None: return "None"; - case TimeFormat::WithReferencePeriod: - return "withReferencePeriod"; case TimeFormat::LocalTime: return "localTime"; + case TimeFormat::WithReferencePeriod: + return "withReferencePeriod"; default: throw multio::mars2grib::Mars2GribException( "DumpType::dump: Unexpected value for TimeFormat", Here()); @@ -162,17 +156,17 @@ struct ParseType { if (s == "None") { return TimeFormat::None; } - if (s == "withReferencePeriod") { - return TimeFormat::WithReferencePeriod; - } if (s == "localTime") { return TimeFormat::LocalTime; } + if (s == "withReferencePeriod") { + return TimeFormat::WithReferencePeriod; + } throw multio::mars2grib::Mars2GribException{ std::string( "ParseType::parse(" ") + s + std::string(" - "): Value for timeFormat does not match on of the following [None, withReferencePeriod, localTime]"), + "): Value for timeFormat does not match on of the following [None, localTime, withReferencePeriod]"), Here()}; } }; @@ -189,11 +183,6 @@ struct Print { } }; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::TimeFormat"; }; -}; - } // namespace multio::util @@ -202,11 +191,11 @@ namespace multio::mars2grib::rules { enum class SpatialExtent : std::uint64_t { None = 0, - ClusterStatRectangular, - ClusterStatCircular, - GeneralisedTile, RandomPatterns, + GeneralisedTile, + ClusterStatCircular, FocalStatistics, + ClusterStatRectangular, }; } @@ -220,16 +209,16 @@ struct DumpType { switch (v) { case SpatialExtent::None: return "None"; - case SpatialExtent::ClusterStatRectangular: - return "clusterStatRectangular"; + case SpatialExtent::RandomPatterns: + return "randomPatterns"; case SpatialExtent::ClusterStatCircular: return "clusterStatCircular"; case SpatialExtent::GeneralisedTile: return "generalisedTile"; - case SpatialExtent::RandomPatterns: - return "randomPatterns"; case SpatialExtent::FocalStatistics: return "focalStatistics"; + case SpatialExtent::ClusterStatRectangular: + return "clusterStatRectangular"; default: throw multio::mars2grib::Mars2GribException( "DumpType::dump: Unexpected value for SpatialExtent", Here()); @@ -244,8 +233,8 @@ struct ParseType { if (s == "None") { return SpatialExtent::None; } - if (s == "clusterStatRectangular") { - return SpatialExtent::ClusterStatRectangular; + if (s == "randomPatterns") { + return SpatialExtent::RandomPatterns; } if (s == "clusterStatCircular") { return SpatialExtent::ClusterStatCircular; @@ -253,17 +242,17 @@ struct ParseType { if (s == "generalisedTile") { return SpatialExtent::GeneralisedTile; } - if (s == "randomPatterns") { - return SpatialExtent::RandomPatterns; - } if (s == "focalStatistics") { return SpatialExtent::FocalStatistics; } + if (s == "clusterStatRectangular") { + return SpatialExtent::ClusterStatRectangular; + } throw multio::mars2grib::Mars2GribException{ std::string("ParseType::parse(" ") + s + std::string(" - "): Value for spatialExtent does not match on of the following [None, clusterStatRectangular, " - "clusterStatCircular, generalisedTile, randomPatterns, focalStatistics]"), + "): Value for spatialExtent does not match on of the following [None, randomPatterns, " + "clusterStatCircular, generalisedTile, focalStatistics, clusterStatRectangular]"), Here()}; } }; @@ -280,11 +269,6 @@ struct Print { } }; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::SpatialExtent"; }; -}; - } // namespace multio::util @@ -293,12 +277,12 @@ namespace multio::mars2grib::rules { enum class ProcessType : std::uint64_t { None = 0, - Categorial, + Percentile, Quantile, + Probability, Reforecast, + Categorial, DerivedForecast, - Probability, - Percentile, }; } @@ -312,18 +296,18 @@ struct DumpType { switch (v) { case ProcessType::None: return "None"; - case ProcessType::Categorial: - return "categorial"; - case ProcessType::Reforecast: - return "reforecast"; + case ProcessType::Percentile: + return "percentile"; case ProcessType::Quantile: return "quantile"; - case ProcessType::DerivedForecast: - return "derivedForecast"; case ProcessType::Probability: return "probability"; - case ProcessType::Percentile: - return "percentile"; + case ProcessType::Reforecast: + return "reforecast"; + case ProcessType::Categorial: + return "categorial"; + case ProcessType::DerivedForecast: + return "derivedForecast"; default: throw multio::mars2grib::Mars2GribException( "DumpType::dump: Unexpected value for ProcessType", Here()); @@ -338,29 +322,29 @@ struct ParseType { if (s == "None") { return ProcessType::None; } - if (s == "categorial") { - return ProcessType::Categorial; - } - if (s == "reforecast") { - return ProcessType::Reforecast; + if (s == "percentile") { + return ProcessType::Percentile; } if (s == "quantile") { return ProcessType::Quantile; } - if (s == "derivedForecast") { - return ProcessType::DerivedForecast; - } if (s == "probability") { return ProcessType::Probability; } - if (s == "percentile") { - return ProcessType::Percentile; + if (s == "reforecast") { + return ProcessType::Reforecast; + } + if (s == "categorial") { + return ProcessType::Categorial; + } + if (s == "derivedForecast") { + return ProcessType::DerivedForecast; } throw multio::mars2grib::Mars2GribException{ std::string("ParseType::parse(" ") + s + std::string(" - "): Value for processType does not match on of the following [None, categorial, reforecast, " - "quantile, derivedForecast, probability, percentile]"), + "): Value for processType does not match on of the following [None, percentile, quantile, " + "probability, reforecast, categorial, derivedForecast]"), Here()}; } }; @@ -377,11 +361,6 @@ struct Print { } }; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::ProcessType"; }; -}; - } // namespace multio::util @@ -450,11 +429,6 @@ struct Print { } }; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::ProcessSubType"; }; -}; - } // namespace multio::util @@ -463,19 +437,19 @@ namespace multio::mars2grib::rules { enum class ProductCategory : std::uint64_t { None = 0, - Satellite, - Radar, - Partitioned, - Hovmoeller, + Aerosol, + CcittIA5, CrossSect, + Radar, SpatialStatisticalProcessing, + Wave, PostProcess, Chemical, + Partitioned, + Hovmoeller, Optical, - Wave, - Aerosol, - CcittIA5, SpatioTemporalTile, + Satellite, }; } @@ -487,34 +461,34 @@ struct DumpType { static std::string dump(multio::mars2grib::rules::ProductCategory v) { using namespace multio::mars2grib::rules; switch (v) { - case ProductCategory::Satellite: - return "satellite"; case ProductCategory::None: return "None"; - case ProductCategory::Radar: - return "radar"; - case ProductCategory::Partitioned: - return "partitioned"; - case ProductCategory::Hovmoeller: - return "hovmoeller"; + case ProductCategory::Aerosol: + return "aerosol"; + case ProductCategory::CcittIA5: + return "ccittIA5"; case ProductCategory::CrossSect: return "crossSect"; + case ProductCategory::Radar: + return "radar"; case ProductCategory::SpatialStatisticalProcessing: return "spatialStatisticalProcessing"; + case ProductCategory::Wave: + return "wave"; case ProductCategory::PostProcess: return "postProcess"; case ProductCategory::Chemical: return "chemical"; + case ProductCategory::Partitioned: + return "partitioned"; + case ProductCategory::Hovmoeller: + return "hovmoeller"; case ProductCategory::Optical: return "optical"; - case ProductCategory::Wave: - return "wave"; - case ProductCategory::Aerosol: - return "aerosol"; - case ProductCategory::CcittIA5: - return "ccittIA5"; case ProductCategory::SpatioTemporalTile: return "spatioTemporalTile"; + case ProductCategory::Satellite: + return "satellite"; default: throw multio::mars2grib::Mars2GribException( "DumpType::dump: Unexpected value for ProductCategory", Here()); @@ -526,54 +500,54 @@ template <> struct ParseType { static multio::mars2grib::rules::ProductCategory parse(const std::string& s) { using namespace multio::mars2grib::rules; - if (s == "satellite") { - return ProductCategory::Satellite; - } if (s == "None") { return ProductCategory::None; } - if (s == "radar") { - return ProductCategory::Radar; - } - if (s == "partitioned") { - return ProductCategory::Partitioned; + if (s == "aerosol") { + return ProductCategory::Aerosol; } - if (s == "hovmoeller") { - return ProductCategory::Hovmoeller; + if (s == "ccittIA5") { + return ProductCategory::CcittIA5; } if (s == "crossSect") { return ProductCategory::CrossSect; } + if (s == "radar") { + return ProductCategory::Radar; + } if (s == "spatialStatisticalProcessing") { return ProductCategory::SpatialStatisticalProcessing; } + if (s == "wave") { + return ProductCategory::Wave; + } if (s == "postProcess") { return ProductCategory::PostProcess; } if (s == "chemical") { return ProductCategory::Chemical; } - if (s == "optical") { - return ProductCategory::Optical; - } - if (s == "wave") { - return ProductCategory::Wave; + if (s == "partitioned") { + return ProductCategory::Partitioned; } - if (s == "aerosol") { - return ProductCategory::Aerosol; + if (s == "hovmoeller") { + return ProductCategory::Hovmoeller; } - if (s == "ccittIA5") { - return ProductCategory::CcittIA5; + if (s == "optical") { + return ProductCategory::Optical; } if (s == "spatioTemporalTile") { return ProductCategory::SpatioTemporalTile; } + if (s == "satellite") { + return ProductCategory::Satellite; + } throw multio::mars2grib::Mars2GribException{ std::string("ParseType::parse(" ") + s + std::string(" - "): Value for productCategory does not match on of the following [satellite, None, radar, " - "partitioned, hovmoeller, crossSect, spatialStatisticalProcessing, postProcess, chemical, " - "optical, wave, aerosol, ccittIA5, spatioTemporalTile]"), + "): Value for productCategory does not match on of the following [None, aerosol, ccittIA5, " + "crossSect, radar, spatialStatisticalProcessing, wave, postProcess, chemical, partitioned, " + "hovmoeller, optical, spatioTemporalTile, satellite]"), Here()}; } }; @@ -590,11 +564,6 @@ struct Print { } }; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::ProductCategory"; }; -}; - } // namespace multio::util @@ -604,15 +573,15 @@ enum class ProductSubCategory : std::uint64_t { None = 0, SpectraFormula, - OpticalSourceSink, + QualityValue, PeriodRange, - StatisticalOverLatLong, + SpectraList, SourceSink, - QualityValue, + StatisticalOverLatLong, + RadioNuclide, + OpticalSourceSink, Distribution, - SpectraList, Optical, - RadioNuclide, }; } @@ -628,24 +597,24 @@ struct DumpType { return "None"; case ProductSubCategory::SpectraFormula: return "spectraFormula"; - case ProductSubCategory::OpticalSourceSink: - return "opticalSourceSink"; + case ProductSubCategory::QualityValue: + return "qualityValue"; case ProductSubCategory::PeriodRange: return "periodRange"; - case ProductSubCategory::StatisticalOverLatLong: - return "statisticalOverLatLong"; + case ProductSubCategory::SpectraList: + return "spectraList"; case ProductSubCategory::SourceSink: return "sourceSink"; - case ProductSubCategory::QualityValue: - return "qualityValue"; + case ProductSubCategory::StatisticalOverLatLong: + return "statisticalOverLatLong"; + case ProductSubCategory::RadioNuclide: + return "radioNuclide"; + case ProductSubCategory::OpticalSourceSink: + return "opticalSourceSink"; case ProductSubCategory::Distribution: return "distribution"; - case ProductSubCategory::SpectraList: - return "spectraList"; case ProductSubCategory::Optical: return "optical"; - case ProductSubCategory::RadioNuclide: - return "radioNuclide"; default: throw multio::mars2grib::Mars2GribException( "DumpType::dump: Unexpected value for ProductSubCategory", Here()); @@ -663,39 +632,39 @@ struct ParseType { if (s == "spectraFormula") { return ProductSubCategory::SpectraFormula; } - if (s == "opticalSourceSink") { - return ProductSubCategory::OpticalSourceSink; + if (s == "qualityValue") { + return ProductSubCategory::QualityValue; } if (s == "periodRange") { return ProductSubCategory::PeriodRange; } - if (s == "statisticalOverLatLong") { - return ProductSubCategory::StatisticalOverLatLong; + if (s == "spectraList") { + return ProductSubCategory::SpectraList; } if (s == "sourceSink") { return ProductSubCategory::SourceSink; } - if (s == "qualityValue") { - return ProductSubCategory::QualityValue; + if (s == "statisticalOverLatLong") { + return ProductSubCategory::StatisticalOverLatLong; + } + if (s == "radioNuclide") { + return ProductSubCategory::RadioNuclide; + } + if (s == "opticalSourceSink") { + return ProductSubCategory::OpticalSourceSink; } if (s == "distribution") { return ProductSubCategory::Distribution; } - if (s == "spectraList") { - return ProductSubCategory::SpectraList; - } if (s == "optical") { return ProductSubCategory::Optical; } - if (s == "radioNuclide") { - return ProductSubCategory::RadioNuclide; - } throw multio::mars2grib::Mars2GribException{ std::string("ParseType::parse(" ") + s + std::string(" "): Value for productSubCategory does not match on of the following [None, spectraFormula, " - "opticalSourceSink, periodRange, statisticalOverLatLong, sourceSink, qualityValue, " - "distribution, spectraList, optical, radioNuclide]"), + "qualityValue, periodRange, spectraList, sourceSink, statisticalOverLatLong, radioNuclide, " + "opticalSourceSink, distribution, optical]"), Here()}; } }; @@ -712,11 +681,6 @@ struct Print { } }; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::ProductSubCategory"; }; -}; - } // namespace multio::util @@ -785,10 +749,6 @@ namespace multio::util { template <> struct Print : multio::datamod::PrintRecord {}; -template <> -struct TypeToString { - std::string operator()() const { return "multio::mars2grib::rules::PDTCat"; }; -}; } // namespace multio::util @@ -819,8 +779,11 @@ struct InferPdt { ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 8}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Hovmoeller, ProductSubCategory::None}, - 1101}, + ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::None}, + 46}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::SourceSink}, + 82}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::CrossSect, ProductSubCategory::None}, 1001}, @@ -830,6 +793,9 @@ struct InferPdt { {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::None}, 42}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::Distribution}, + 67}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::SourceSink}, 78}, @@ -837,17 +803,11 @@ struct InferPdt { ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::RadioNuclide}, 126}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::Distribution}, - 67}, + ProcessSubType::None, ProductCategory::Hovmoeller, ProductSubCategory::None}, + 1101}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::Optical, ProductSubCategory::None}, 110}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::None}, - 46}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::SourceSink}, - 82}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::SpatioTemporalTile, ProductSubCategory::None}, 62}, @@ -858,60 +818,56 @@ struct InferPdt { ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, 11}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Satellite, ProductSubCategory::None}, - 34}, + ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::None}, + 85}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::SourceSink}, + 84}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::PostProcess, ProductSubCategory::None}, 73}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::None}, 43}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::Distribution}, + 68}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::SourceSink}, 79}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::RadioNuclide}, 127}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::Distribution}, - 68}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::Optical, ProductSubCategory::None}, 111}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::None}, - 85}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::SourceSink}, - 84}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::SpatioTemporalTile, ProductSubCategory::None}, 63}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Categorial, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Satellite, ProductSubCategory::None}, + 34}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Percentile, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, - 91}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Reforecast, - ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, - 61}, + 10}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Quantile, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 87}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::DerivedForecast, - ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, - 12}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Probability, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 9}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Probability, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, 120}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Percentile, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Reforecast, + ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, + 61}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::Categorial, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, - 10}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::ClusterStatRectangular, - ProcessType::DerivedForecast, ProcessSubType::Ensemble, ProductCategory::None, - ProductSubCategory::None}, - 13}, + 91}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::None, ProcessType::DerivedForecast, + ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, + 12}, {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::ClusterStatCircular, ProcessType::DerivedForecast, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, @@ -925,23 +881,10 @@ struct InferPdt { {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::FocalStatistics, ProcessType::Probability, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, 122}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, - 105}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, - 106}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, + {PDTCat{TimeExtent::TimeRange, TimeFormat::None, SpatialExtent::ClusterStatRectangular, ProcessType::DerivedForecast, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, - 107}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, - ProcessType::Probability, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, - 112}, - {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::FocalStatistics, - ProcessType::Probability, ProcessSubType::Ensemble, ProductCategory::None, - ProductSubCategory::None}, - 123}, + 13}, {PDTCat{TimeExtent::TimeRange, TimeFormat::LocalTime, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 95}, @@ -954,18 +897,32 @@ struct InferPdt { {PDTCat{TimeExtent::TimeRange, TimeFormat::LocalTime, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::PostProcess, ProductSubCategory::None}, 98}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, + 105}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, + 106}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, + ProcessType::Probability, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, + 112}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::None, + ProcessType::DerivedForecast, ProcessSubType::Ensemble, ProductCategory::None, + ProductSubCategory::None}, + 107}, + {PDTCat{TimeExtent::TimeRange, TimeFormat::WithReferencePeriod, SpatialExtent::FocalStatistics, + ProcessType::Probability, ProcessSubType::Ensemble, ProductCategory::None, + ProductSubCategory::None}, + 123}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 0}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Partitioned, ProductSubCategory::None}, - 53}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Hovmoeller, ProductSubCategory::None}, - 1100}, + ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::Optical}, + 48}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Satellite, ProductSubCategory::None}, - 32}, + ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::OpticalSourceSink}, + 80}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::CrossSect, ProductSubCategory::None}, 1000}, @@ -975,12 +932,24 @@ struct InferPdt { {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::SpatialStatisticalProcessing, ProductSubCategory::None}, 15}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Wave, ProductSubCategory::SpectraFormula}, + 101}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Wave, ProductSubCategory::SpectraList}, + 99}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Wave, ProductSubCategory::PeriodRange}, + 103}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::PostProcess, ProductSubCategory::None}, 70}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::None}, 40}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::Distribution}, + 57}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::SourceSink}, 76}, @@ -988,29 +957,20 @@ struct InferPdt { ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::RadioNuclide}, 124}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Chemical, ProductSubCategory::Distribution}, - 57}, + ProcessSubType::None, ProductCategory::Partitioned, ProductSubCategory::None}, + 53}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Hovmoeller, ProductSubCategory::None}, + 1100}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::Optical, ProductSubCategory::None}, 108}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Wave, ProductSubCategory::SpectraFormula}, - 101}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Wave, ProductSubCategory::SpectraList}, - 99}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Wave, ProductSubCategory::PeriodRange}, - 103}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::OpticalSourceSink}, - 80}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::None, ProductCategory::Aerosol, ProductSubCategory::Optical}, - 48}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::SpatioTemporalTile, ProductSubCategory::None}, 55}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::None, ProductCategory::Satellite, ProductSubCategory::None}, + 32}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::LargeEnsemble, ProductCategory::None, ProductSubCategory::None}, 117}, @@ -1018,17 +978,32 @@ struct InferPdt { ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, 1}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Partitioned, ProductSubCategory::None}, - 54}, + ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::None}, + 45}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Satellite, ProductSubCategory::None}, - 33}, + ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::Optical}, + 49}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::OpticalSourceSink}, + 81}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Wave, ProductSubCategory::SpectraFormula}, + 102}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Wave, ProductSubCategory::SpectraList}, + 100}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Wave, ProductSubCategory::PeriodRange}, + 104}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::PostProcess, ProductSubCategory::None}, 71}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::None}, 41}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::Distribution}, + 58}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::SourceSink}, 77}, @@ -1036,57 +1011,41 @@ struct InferPdt { ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::RadioNuclide}, 125}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Chemical, ProductSubCategory::Distribution}, - 58}, + ProcessSubType::Ensemble, ProductCategory::Partitioned, ProductSubCategory::None}, + 54}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::Optical, ProductSubCategory::None}, 109}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Wave, ProductSubCategory::SpectraFormula}, - 102}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Wave, ProductSubCategory::SpectraList}, - 100}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Wave, ProductSubCategory::PeriodRange}, - 104}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::None}, - 45}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::OpticalSourceSink}, - 81}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, - ProcessSubType::Ensemble, ProductCategory::Aerosol, ProductSubCategory::Optical}, - 49}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::SpatioTemporalTile, ProductSubCategory::None}, 59}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Categorial, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::None, + ProcessSubType::Ensemble, ProductCategory::Satellite, ProductSubCategory::None}, + 33}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Percentile, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, - 51}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Reforecast, - ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, - 60}, + 6}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Quantile, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 86}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::DerivedForecast, - ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, - 2}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Probability, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 5}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Probability, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, 119}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Percentile, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Reforecast, + ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, + 60}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::Categorial, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, - 6}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::ClusterStatRectangular, - ProcessType::DerivedForecast, ProcessSubType::Ensemble, ProductCategory::None, - ProductSubCategory::None}, - 3}, + 51}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::None, ProcessType::DerivedForecast, + ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, + 2}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::RandomPatterns, ProcessType::None, + ProcessSubType::LargeEnsemble, ProductCategory::None, ProductSubCategory::None}, + 143}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::ClusterStatCircular, ProcessType::DerivedForecast, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, @@ -1097,13 +1056,14 @@ struct InferPdt { {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::GeneralisedTile, ProcessType::None, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, 115}, - {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::RandomPatterns, ProcessType::None, - ProcessSubType::LargeEnsemble, ProductCategory::None, ProductSubCategory::None}, - 143}, {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::FocalStatistics, ProcessType::Probability, ProcessSubType::Ensemble, ProductCategory::None, ProductSubCategory::None}, 121}, + {PDTCat{TimeExtent::PointInTime, TimeFormat::None, SpatialExtent::ClusterStatRectangular, + ProcessType::DerivedForecast, ProcessSubType::Ensemble, ProductCategory::None, + ProductSubCategory::None}, + 3}, {PDTCat{TimeExtent::PointInTime, TimeFormat::LocalTime, SpatialExtent::None, ProcessType::None, ProcessSubType::None, ProductCategory::None, ProductSubCategory::None}, 88}, diff --git a/src/multio/mars2grib/sections/Level.h b/src/multio/mars2grib/sections/Level.h index 09497e200..0d739ed70 100644 --- a/src/multio/mars2grib/sections/Level.h +++ b/src/multio/mars2grib/sections/Level.h @@ -28,10 +28,12 @@ struct LevelConfigurator { // Determines the level and whether a level has to be set for a typeOfLevel -std::optional levelForTypeOfLevel(const LevelConfigurator&, const dm::FullMarsRecord&, const dm::MiscRecord&); +std::optional levelForTypeOfLevel(const LevelConfigurator&, const dm::FullMarsRecord&, + const dm::MiscRecord&); // Determines the level and whether a level has to be set for a typeOfLevel -dm::HorizontalGribKeys horizontalForTypeOfLevel(const LevelConfigurator&, const dm::FullMarsRecord&, const dm::MiscRecord&); +dm::HorizontalGribKeys horizontalForTypeOfLevel(const LevelConfigurator&, const dm::FullMarsRecord&, + const dm::MiscRecord&); std::optional verticalForTypeOfLevel(const LevelConfigurator&, const dm::FullMarsRecord&, const dm::MiscRecord&); @@ -44,7 +46,8 @@ class LevelSetter : public DynSectionSetter { void allocate(util::MioGribHandle&, const dm::FullMarsRecord&, const dm::MiscRecord&, const dm::Geometry&) const override; // Calls set level - void preset(util::MioGribHandle&, const dm::FullMarsRecord&, const dm::MiscRecord&, const dm::Geometry&) const override; + void preset(util::MioGribHandle&, const dm::FullMarsRecord&, const dm::MiscRecord&, + const dm::Geometry&) const override; // Calls set level void runtime(util::MioGribHandle&, const dm::FullMarsRecord&, const dm::MiscRecord&, @@ -73,9 +76,4 @@ namespace multio::util { template <> struct Print : multio::datamod::PrintRecord {}; -template <> -struct TypeToString { - std::string operator()() const { return std::string("mars2grib::sections::LevelConfigurator"); }; -}; - } // namespace multio::util diff --git a/src/multio/mars2grib/sections/SectionTypes.h b/src/multio/mars2grib/sections/SectionTypes.h index 3152319c7..10d366533 100644 --- a/src/multio/mars2grib/sections/SectionTypes.h +++ b/src/multio/mars2grib/sections/SectionTypes.h @@ -10,16 +10,8 @@ #pragma once -#include "multio/datamod/core/TypeParserDumper.h" -#include "multio/util/Hash.h" -#include "multio/util/MioGribHandle.h" -#include "multio/util/TypeToString.h" -#include "multio/util/TypeTraits.h" -#include "multio/util/VariantHelpers.h" - -#include -#include #include +#include "multio/datamod/core/TypeParserDumper.h" namespace multio::mars2grib::sections { @@ -40,13 +32,6 @@ std::ostream& operator<<(std::ostream&, const TimeRangeType&); } // namespace multio::mars2grib::sections -namespace multio::util { -template <> -struct TypeToString { - std::string operator()() const { return "datamod::TimeRangeType"; }; -}; -} // namespace multio::util - namespace multio::datamod { template <> diff --git a/src/multio/util/TypeToString.h b/src/multio/util/TypeToString.h index 19de48181..9bbe259ac 100644 --- a/src/multio/util/TypeToString.h +++ b/src/multio/util/TypeToString.h @@ -10,22 +10,17 @@ #pragma once -#include -#include -#include +#include #include #include -#include #include -#include #include #include "eckit/config/LocalConfiguration.h" -#include "eckit/filesystem/PathName.h" namespace multio::util { -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // Helper to stringify types // Instead of using a constexpr string_view, a call operator is used at runtime. @@ -39,23 +34,9 @@ struct TypeToString; template std::string typeToString() { - return TypeToString{}(); + return TypeToString>{}(); } -template -struct TypeToString { - std::string operator()() const { return std::string("const ") + typeToString>(); }; -}; - -template -struct TypeToString { - std::string operator()() const { return typeToString>() + std::string("&"); }; -}; -template -struct TypeToString { - std::string operator()() const { return typeToString>() + std::string("&&"); }; -}; - template <> struct TypeToString { @@ -111,40 +92,16 @@ struct TypeToString { std::string operator()() const { return "std::uint8_t"; }; }; - template struct TypeToString> { std::string operator()() const { return std::string("std::optional<") + typeToString() + std::string(">"); }; }; -// TODO handle allocator to string?... template struct TypeToString> { std::string operator()() const { return std::string("std::vector<") + typeToString() + std::string(">"); }; }; - -template -struct TypeToString> { - std::string operator()() const { - return std::string("std::tuple<") + ((typeToString() + std::string(", ")) + ... + std::string(">")); - }; -}; - -template -struct TypeToString> { - std::string operator()() const { - return std::string("std::variant<") + ((typeToString() + std::string(", ")) + ... + std::string(">")); - }; -}; - -template -struct TypeToString> { - std::string operator()() const { - return std::string("std::reference_wrapper<") + typeToString() + std::string(">"); - }; -}; - template struct TypeToString> { std::string operator()() const { @@ -152,33 +109,13 @@ struct TypeToString> { }; }; -template -struct TypeToString> { - std::string operator()() const { return std::string("std::shared_ptr<") + typeToString() + std::string(">"); }; -}; - -template <> -struct TypeToString { - std::string operator()() const { return std::string("std::chrono::hours"); }; -}; - -template <> -struct TypeToString { - std::string operator()() const { return std::string("std::chrono::seconds"); }; -}; - template <> struct TypeToString { std::string operator()() const { return std::string("eckit::LocalConfiguration"); }; }; -template <> -struct TypeToString { - std::string operator()() const { return std::string("eckit::PathName"); }; -}; -//----------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- } // namespace multio::util -