From e0b065ff7c10dada97f562f13d7676253d48e793 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Mon, 20 Oct 2003 20:17:01 -0400 Subject: Separate the stuff for SimObject from SimObject builder. This makes testing a bit easier. arch/alpha/alpha_memory.cc: cpu/intr_control.cc: cpu/memtest/memtest.cc: cpu/simple_cpu/simple_cpu.cc: dev/alpha_console.cc: dev/console.cc: dev/disk_image.cc: dev/etherbus.cc: dev/etherdump.cc: dev/etherlink.cc: dev/ethertap.cc: dev/simple_disk.cc: kern/tru64/tru64_system.cc: sim/main.cc: sim/prog.cc: Need to include builder.hh sort #includes sim/sim_object.cc: sim/sim_object.hh: Separate the SimObjectBuilder stuff into its own file --HG-- extra : convert_revision : e8395e0cc6ae1f180f9cd6f100795a1ac44aeed5 --- sim/sim_object.cc | 152 ------------------------------------------------------ 1 file changed, 152 deletions(-) (limited to 'sim/sim_object.cc') diff --git a/sim/sim_object.cc b/sim/sim_object.cc index 955c43bb8..1ddb15c82 100644 --- a/sim/sim_object.cc +++ b/sim/sim_object.cc @@ -121,155 +121,3 @@ SimObject::printAllExtraOutput(ostream &os) (*i)->printExtraOutput(os); } } - -/////////////////////////////////////////// -// -// SimObjectBuilder member definitions -// -/////////////////////////////////////////// - -// override ParamContext::parseParams() to check params based on -// instance name first. If not found, then check based on iniSection -// (as in default ParamContext implementation). -void -SimObjectBuilder::parseParams(IniFile &iniFile) -{ - iniFilePtr = &iniFile; // set object member - - ParamList::iterator i; - - for (i = paramList->begin(); i != paramList->end(); ++i) { - string string_value; - - if (iniFile.findDefault(instanceName, (*i)->name, string_value)) { - (*i)->parse(string_value); - } - else if (iniFile.findDefault(iniSection, (*i)->name, string_value)) { - (*i)->parse(string_value); - } - } -} - - -void -SimObjectBuilder::printErrorProlog(ostream &os) -{ - os << "Error creating object '" << getInstanceName() - << "' of type '" << simObjClassName - << "', section '" << iniSection << "':" << endl; -} - - -//////////////////////////////////////////////////////////////////////// -// -// SimObjectClass member definitions -// -//////////////////////////////////////////////////////////////////////// - -// Map of class names to SimObjectBuilder creation functions. Need to -// make this a pointer so we can force initialization on the first -// reference; otherwise, some SimObjectClass constructors may be invoked -// before the classMap constructor. -map *SimObjectClass::classMap = NULL; - -// SimObjectClass constructor: add mapping to classMap -SimObjectClass::SimObjectClass(const string &className, CreateFunc createFunc) -{ - if (classMap == NULL) - classMap = new map(); - - if ((*classMap)[className]) - { - cerr << "Error: simulation object class " << className << " redefined" - << endl; - fatal(""); - } - - // add className --> createFunc to class map - (*classMap)[className] = createFunc; -} - - -// -// -SimObject * -SimObjectClass::createObject(IniFile &configDB, - const string &configClassName, - const string &objName, - ConfigNode *configNode) -{ - // find simulation object class name from configuration class - // (specified by 'type=' parameter) - string simObjClassName; - - if (!configDB.findDefault(configClassName, "type", simObjClassName)) { - cerr << "Configuration class '" << configClassName << "' not found." - << endl; - abort(); - } - - // look up className to get appropriate createFunc - if (classMap->find(simObjClassName) == classMap->end()) { - cerr << "Simulator object class '" << simObjClassName << "' not found." - << endl; - abort(); - } - - CreateFunc createFunc = (*classMap)[simObjClassName]; - - // call createFunc with config hierarchy node to get object - // builder instance (context with parameters for object creation) - SimObjectBuilder *objectBuilder = (*createFunc)(configClassName, - objName, configNode, - simObjClassName); - - assert(objectBuilder != NULL); - - // parse all parameters in context to generate parameter values - objectBuilder->parseParams(configDB); - - // now create the actual simulation object - SimObject *object = objectBuilder->create(); - - assert(object != NULL); - - // echo object parameters to stats file (for documenting the - // config used to generate the associated stats) - *statStream << "[" << object->name() << "]" << endl; - *statStream << "type=" << simObjClassName << endl; - objectBuilder->showParams(*statStream); - *statStream << endl; - - // done with the SimObjectBuilder now - delete objectBuilder; - - return object; -} - - -// -// static method: -// -void -SimObjectClass::describeAllClasses(ostream &os) -{ - map::iterator iter; - - for (iter = classMap->begin(); iter != classMap->end(); ++iter) { - const string &className = iter->first; - CreateFunc createFunc = iter->second; - - os << "[" << className << "]\n"; - - // create dummy object builder just to instantiate parameters - SimObjectBuilder *objectBuilder = (*createFunc)("", "", NULL, ""); - - // now get the object builder to describe ite params - objectBuilder->describeParams(os); - - os << endl; - - // done with the object builder now - delete objectBuilder; - } -} -- cgit v1.2.3