From 2ac054386d9394689e728241972dab7184ae965d Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Sun, 2 Nov 2003 21:49:15 -0800 Subject: [PATCH] Print a warning rather than failing if we're unserializing and there's an 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 | 8 ++++++++ base/inifile.hh | 7 +++++++ sim/serialize.cc | 7 +++++++ sim/serialize.hh | 2 ++ 4 files changed, 24 insertions(+) diff --git a/base/inifile.cc b/base/inifile.cc index 7e7485bcb..2717a534d 100644 --- a/base/inifile.cc +++ b/base/inifile.cc @@ -402,6 +402,14 @@ IniFile::findAppend(const string &_section, const string &entry, return ret; } + +bool +IniFile::sectionExists(const string §ionName) const +{ + return findSection(sectionName) != NULL; +} + + bool IniFile::Section::printUnreferenced(const string §ionName) { diff --git a/base/inifile.hh b/base/inifile.hh index f67fdc7be..f7229f2f2 100644 --- a/base/inifile.hh +++ b/base/inifile.hh @@ -208,6 +208,13 @@ class IniFile bool findAppend(const std::string §ion, 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 §ion) const; + /// Print unreferenced entries in object. Iteratively calls /// printUnreferend() on all the constituent sections. bool printUnreferenced(); diff --git a/sim/serialize.cc b/sim/serialize.cc index bd528c678..0eb26c31d 100644 --- a/sim/serialize.cc +++ b/sim/serialize.cc @@ -494,3 +494,10 @@ Checkpoint::findObj(const std::string §ion, const std::string &entry, return false; } + + +bool +Checkpoint::sectionExists(const std::string §ion) +{ + return db->sectionExists(section); +} diff --git a/sim/serialize.hh b/sim/serialize.hh index 78cbb702a..09e91d816 100644 --- a/sim/serialize.hh +++ b/sim/serialize.hh @@ -244,6 +244,8 @@ class Checkpoint bool findObj(const std::string §ion, const std::string &entry, Serializeable *&value); + + bool sectionExists(const std::string §ion); }; -- 2.30.2