summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-06-12 18:28:25 +0000
committerMaxime Coste <frrrwww@gmail.com>2012-06-12 18:28:25 +0000
commitcab03ef1c60ae45b36c2d3565f1946e8a4f05388 (patch)
treea724fd7b661bdfbe54d68cd834edcf7ac80b22d8 /src
parentbc359d7c902a8131801fc78a415dc0a0b396807a (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.cc19
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