diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-06-12 18:28:25 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-06-12 18:28:25 +0000 |
| commit | cab03ef1c60ae45b36c2d3565f1946e8a4f05388 (patch) | |
| tree | a724fd7b661bdfbe54d68cd834edcf7ac80b22d8 /src | |
| parent | bc359d7c902a8131801fc78a415dc0a0b396807a (diff) | |
When creating an Option, OptionManager takes it's initial value from it's parent if possible
Diffstat (limited to 'src')
| -rw-r--r-- | src/option_manager.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/option_manager.cc b/src/option_manager.cc index 8e55c2eb..a0533f8f 100644 --- a/src/option_manager.cc +++ b/src/option_manager.cc @@ -10,10 +10,23 @@ Option& OptionManager::operator[] (const String& name) auto it = m_options.find(name); if (it != m_options.end()) return it->second; - else if (m_parent) - return (*m_parent)[name]; else - return m_options[name]; + { + Option& res = m_options[name]; + OptionManager* parent = m_parent; + while (parent) + { + auto parent_it = parent->m_options.find(name); + if (parent_it != parent->m_options.end()) + { + res = parent_it->second; + break; + } + else + parent = parent->m_parent; + } + return res; + } } const Option& OptionManager::operator[] (const String& name) const |
