Print a warning rather than failing if we're unserializing and there's an
authorSteve Reinhardt <stever@eecs.umich.edu>
Mon, 3 Nov 2003 05:49:15 +0000 (21:49 -0800)
committerSteve Reinhardt <stever@eecs.umich.edu>
Mon, 3 Nov 2003 05:49:15 +0000 (21:49 -0800)
object in the config that was not in the checkpointed config.
This code compiles, but I haven't tested it... I'm committing it so Ron
can have it.  Should not effect anything that currently works.

base/inifile.cc:
base/inifile.hh:
    Add sectionExists() method so you can query whether a section exists
    without knowing any of the entry names that would be in it.
sim/serialize.cc:
sim/serialize.hh:
    Add Checkpoint::sectionExists() (pass through to IniFile).

--HG--
extra : convert_revision : 905db122afdfe55946ab8493ccac0b1e715bc7c6

base/inifile.cc
base/inifile.hh
sim/serialize.cc
sim/serialize.hh

index 7e7485bcb199c345836fa226c40d527f9b99f7ab..2717a534deedefaba9eac3d7d1958778536a9fe4 100644 (file)
@@ -402,6 +402,14 @@ IniFile::findAppend(const string &_section, const string &entry,
     return ret;
 }
 
+
+bool
+IniFile::sectionExists(const string &sectionName) const
+{
+    return findSection(sectionName) != NULL;
+}
+
+
 bool
 IniFile::Section::printUnreferenced(const string &sectionName)
 {
index f67fdc7beb1a1611a2ab58c73a999065cf950601..f7229f2f2d77689359e13abe1913ac868e0dd581 100644 (file)
@@ -208,6 +208,13 @@ class IniFile
     bool findAppend(const std::string &section, const std::string &entry,
                     std::string &value) const;
 
+    /// Determine whether the named section exists in the .ini file.
+    /// Note that the 'Section' class is (intentionally) not public,
+    /// so all clients can do is get a bool that says whether there
+    /// are any values in that section or not.
+    /// @return True if the section exists.
+    bool sectionExists(const std::string &section) const;
+
     /// Print unreferenced entries in object.  Iteratively calls
     /// printUnreferend() on all the constituent sections.
     bool printUnreferenced();
index bd528c678eb3977343f596430f8eed951c850050..0eb26c31dba06610d7e316e0521b2bd03e9f6156 100644 (file)
@@ -494,3 +494,10 @@ Checkpoint::findObj(const std::string &section, const std::string &entry,
 
     return false;
 }
+
+
+bool
+Checkpoint::sectionExists(const std::string &section)
+{
+    return db->sectionExists(section);
+}
index 78cbb702a7ade1af902d8972c0581b4cfb2018e4..09e91d8160cf653a1a517b124fbcafe5589ad59e 100644 (file)
@@ -244,6 +244,8 @@ class Checkpoint
 
     bool findObj(const std::string &section, const std::string &entry,
                  Serializeable *&value);
+
+    bool sectionExists(const std::string &section);
 };