#pragma once #include "./config_model.hpp" #include struct SimpleConfigModel : public ConfigModelI { std::map, std::map>>> _map_bool; std::map, std::map>>> _map_int; std::map, std::map>>> _map_double; std::map, std::map>>> _map_string; // level3 void set(CM_ISV module, CM_ISV category, CM_ISV entry, const bool value) override; void set(CM_ISV module, CM_ISV category, CM_ISV entry, const int64_t value) override; void set(CM_ISV module, CM_ISV category, CM_ISV entry, const double value) override; void set(CM_ISV module, CM_ISV category, CM_ISV entry, CM_ISV value) override; bool has_bool(CM_ISV module, CM_ISV category, CM_ISV entry) override; bool has_int(CM_ISV module, CM_ISV category, CM_ISV entry) override; bool has_double(CM_ISV module, CM_ISV category, CM_ISV entry) override; bool has_string(CM_ISV module, CM_ISV category, CM_ISV entry) override; CM_InternalOptional get_bool(CM_ISV module, CM_ISV category, CM_ISV entry) override; CM_InternalOptional get_int(CM_ISV module, CM_ISV category, CM_ISV entry) override; CM_InternalOptional get_double(CM_ISV module, CM_ISV category, CM_ISV entry) override; CM_InternalOptional get_string(CM_ISV module, CM_ISV category, CM_ISV entry) override; // level2 void set(CM_ISV module, CM_ISV category, const bool value) override; void set(CM_ISV module, CM_ISV category, const int64_t value) override; void set(CM_ISV module, CM_ISV category, const double value) override; void set(CM_ISV module, CM_ISV category, CM_ISV value) override; bool has_bool(CM_ISV module, CM_ISV category) override; bool has_int(CM_ISV module, CM_ISV category) override; bool has_double(CM_ISV module, CM_ISV category) override; bool has_string(CM_ISV module, CM_ISV category) override; CM_InternalOptional get_bool(CM_ISV module, CM_ISV category) override; CM_InternalOptional get_int(CM_ISV module, CM_ISV category) override; CM_InternalOptional get_double(CM_ISV module, CM_ISV category) override; CM_InternalOptional get_string(CM_ISV module, CM_ISV category) override; // iteration template struct SimpleConstEntryIteratorImpl : public ConfigModelI::ConstEntryProxy::ConstEntryIteratorI { using BaseIteratorIType = typename ConfigModelI::ConstEntryProxy::ConstEntryIteratorI; using MapType = std::map; using MapTypeIterator = typename MapType::const_iterator; MapTypeIterator _self; SimpleConstEntryIteratorImpl(const MapTypeIterator& self) : _self(self) {} SimpleConstEntryIteratorImpl(void) {} virtual ~SimpleConstEntryIteratorImpl(void) {} std::unique_ptr clone(void) override { return std::make_unique(_self); } bool equal(const BaseIteratorIType& other) const override { return _self == static_cast(other)._self; } void incrementOne(void) override { ++_self; } Type getValue(void) const override { return _self->second; } // helper static ConfigModelI::ConstEntryProxy createRange(const MapTypeIterator& begin, const MapTypeIterator& end) { return { SimpleConstEntryIteratorImpl{begin}.clone(), SimpleConstEntryIteratorImpl{end}.clone() }; } }; // level 3 ConfigModelI::ConstEntryProxy entries_bool(CM_ISV module, CM_ISV category) const override; ConfigModelI::ConstEntryProxy entries_int(CM_ISV module, CM_ISV category) const override; ConfigModelI::ConstEntryProxy entries_double(CM_ISV module, CM_ISV category) const override; ConfigModelI::ConstEntryProxy entries_string(CM_ISV module, CM_ISV category) const override; // debug void dump(void); };