diff --git a/solanaceae/util/config_model.hpp b/solanaceae/util/config_model.hpp index 5108885..11d4a46 100644 --- a/solanaceae/util/config_model.hpp +++ b/solanaceae/util/config_model.hpp @@ -42,13 +42,18 @@ struct ConfigModelI { // actual range cant be virtual template struct ConstEntryProxy { + struct Pair { + std::string key; + Type value; + }; + struct ConstEntryIteratorI { virtual ~ConstEntryIteratorI(void) {} virtual std::unique_ptr clone(void) = 0; virtual bool equal(const ConstEntryIteratorI& other) const = 0; virtual void incrementOne(void) = 0; //virtual const Type& getValue(void) const = 0; - virtual Type getValue(void) const = 0; + virtual Pair getValue(void) const = 0; }; // actual iterator cant be virtual @@ -69,7 +74,7 @@ struct ConfigModelI { bool operator==(const ConstEntryIterator& other) const { return _value->equal(*other._value); } bool operator!=(const ConstEntryIterator& other) const { return !operator==(other); } ConstEntryIterator& operator++(void) { _value->incrementOne(); return *this; } - Type operator*(void) const { return _value->getValue(); } + Pair operator*(void) const { return _value->getValue(); } }; ConstEntryIterator _begin; diff --git a/solanaceae/util/simple_config_model.hpp b/solanaceae/util/simple_config_model.hpp index 5a6da00..8277801 100644 --- a/solanaceae/util/simple_config_model.hpp +++ b/solanaceae/util/simple_config_model.hpp @@ -42,6 +42,7 @@ struct SimpleConfigModel : public ConfigModelI { // iteration template struct SimpleConstEntryIteratorImpl : public ConfigModelI::ConstEntryProxy::ConstEntryIteratorI { + using BaseType = typename ConfigModelI::ConstEntryProxy; using BaseIteratorIType = typename ConfigModelI::ConstEntryProxy::ConstEntryIteratorI; using MapType = std::map; using MapTypeIterator = typename MapType::const_iterator; @@ -55,7 +56,7 @@ struct SimpleConfigModel : public ConfigModelI { 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; } + typename BaseType::Pair getValue(void) const override { return {_self->first, _self->second}; } // helper static ConfigModelI::ConstEntryProxy createRange(const MapTypeIterator& begin, const MapTypeIterator& end) {