Add an append= keyword that works in a somewhat similar way to
authorNathan Binkert <binkertn@umich.edu>
Mon, 27 Oct 2003 03:42:45 +0000 (22:42 -0500)
committerNathan Binkert <binkertn@umich.edu>
Mon, 27 Oct 2003 03:42:45 +0000 (22:42 -0500)
default=.  In the append= case, when looking up an entry, it also
looks in the section named by the append= for something to append
to the entry

--HG--
extra : convert_revision : b51915094ad3ca151d7f241c29e19b6b29d3a3c0

base/inifile.cc
base/inifile.hh

index 52468f46e691a0501ef1fa17748026f18982dca3..7e7485bcb199c345836fa226c40d527f9b99f7ab 100644 (file)
@@ -367,14 +367,40 @@ IniFile::findDefault(const string &_section, const string &entry,
                      string &value) const
 {
     string section = _section;
-    while (!find(section, entry, value)) {
-        if (!find(section, "default", section))
+    while (!findAppend(section, entry, value)) {
+        if (!find(section, "default", section)) {
             return false;
+        }
     }
 
     return true;
 }
 
+bool
+IniFile::findAppend(const string &_section, const string &entry,
+                    string &value) const
+{
+    string section = _section;
+    bool ret = false;
+    bool first = true;
+
+    do {
+        string val;
+        if (find(section, entry, val)) {
+            ret = true;
+            if (first) {
+                value = val;
+                first = false;
+            } else {
+                value += " ";
+                value += val;
+            }
+
+        }
+    } while (find(section, "append", section));
+
+    return ret;
+}
 
 bool
 IniFile::Section::printUnreferenced(const string &sectionName)
index 3a82f2d4dab88e51e70113c0eade2c771e7461ba..34424eb4b6b1725ed01df0d07a7d94fa0b3255cd 100644 (file)
@@ -196,6 +196,9 @@ class IniFile
     bool findDefault(const std::string &section, const std::string &entry,
                      std::string &value) const;
 
+    bool findAppend(const std::string &section, const std::string &entry,
+                    std::string &value) const;
+
     /// Print unreferenced entries in object.  Iteratively calls
     /// printUnreferend() on all the constituent sections.
     bool printUnreferenced();