diff --git a/src/step_unit.cc b/src/step_unit.cc index bd192a6e7..a842430f2 100644 --- a/src/step_unit.cc +++ b/src/step_unit.cc @@ -12,8 +12,6 @@ namespace eccodes { -Unit::Map Unit::map_{}; - std::vector Unit::grib_selected_units = { Unit::Value::SECOND, Unit::Value::MINUTE, @@ -39,7 +37,7 @@ std::vector Unit::complete_unit_order_ = { }; template <> long Unit::value() const { - return map_.unit_to_long(internal_value_); + return get_converter().unit_to_long(internal_value_); } template <> Unit::Value Unit::value() const { @@ -47,7 +45,7 @@ template <> Unit::Value Unit::value() const { } template <> std::string Unit::value() const { - return map_.unit_to_name(internal_value_); + return get_converter().unit_to_name(internal_value_); } } // namespace eccodes diff --git a/src/step_unit.h b/src/step_unit.h index bd078f403..0d6bc4e4e 100644 --- a/src/step_unit.h +++ b/src/step_unit.h @@ -68,7 +68,7 @@ class Unit { explicit Unit(const std::string& unit_value) { try { - internal_value_ = map_.name_to_unit(unit_value); + internal_value_ = get_converter().name_to_unit(unit_value); } catch (std::exception& e) { throw std::runtime_error(std::string{"Unit not found "} + e.what()); } @@ -76,15 +76,15 @@ class Unit { explicit Unit(long unit_value) { try { - internal_value_ = map_.long_to_unit(unit_value); + internal_value_ = get_converter().long_to_unit(unit_value); } catch (std::exception& e) { throw std::runtime_error(std::string{"Unit not found "} + e.what()); } } - bool operator>(const Unit& other) const {return map_.unit_to_duration(internal_value_) > map_.unit_to_duration(other.internal_value_);} - bool operator==(const Value value) const {return map_.unit_to_duration(internal_value_) == map_.unit_to_duration(value);} - bool operator==(const Unit& unit) const {return map_.unit_to_duration(internal_value_) == map_.unit_to_duration(unit.internal_value_);} + bool operator>(const Unit& other) const {return get_converter().unit_to_duration(internal_value_) > get_converter().unit_to_duration(other.internal_value_);} + bool operator==(const Value value) const {return get_converter().unit_to_duration(internal_value_) == get_converter().unit_to_duration(value);} + bool operator==(const Unit& unit) const {return get_converter().unit_to_duration(internal_value_) == get_converter().unit_to_duration(unit.internal_value_);} bool operator!=(const Unit& unit) const {return !(*this == unit);} bool operator!=(const Value value) const {return !(*this == value);} @@ -177,13 +177,14 @@ class Unit { Value internal_value_; - static Map map_; public: - static Map& get_converter() {return map_;} + static Map& get_converter() { + static Map map_; + return map_; + } }; - template Seconds to_seconds(long value, const Unit& unit) { Seconds seconds;