46 #include <Xyce_config.h>
55 #include <N_ERH_Message.h>
56 #include <N_UTL_Demangle.h>
64 typedef std::map<EntityTypeId, Configuration *> EntityTypeIdConfigurationMap;
65 typedef std::map<std::string, EntityTypeId, LessNoCase> NameEntityTypeIdMap;
66 typedef std::map<NameLevelKey, EntityTypeId, NameLevelLess> NameLevelKeyEntityTypeIdMap;
100 std::vector<Configuration *> c;
102 c.push_back((*it).second);
103 std::sort(c.begin(), c.end());
104 c.erase(std::unique(c.begin(), c.end()), c.end());
105 for (std::vector<Configuration *>::iterator it = c.begin(); it != c.end(); ++it)
141 return getData().configurationMap_;
156 EntityTypeIdConfigurationMap::const_iterator it = getData().modelTypeConfigurationMap_.find(model_type_id);
157 return it == getData().modelTypeConfigurationMap_.end() ? 0 : (*it).second;
170 const std::string & device_name,
173 ConfigurationMap::const_iterator it = getData().configurationMap_.find(ConfigurationMap::key_type(device_name, level));
174 return it == getData().configurationMap_.end() ? 0 : (*it).second;
203 NameLevelKeyEntityTypeIdMap::const_iterator it = getData().modelTypeNameLevelModelTypeMap_.find(
NameLevelKey(model_type_name, level));
221 NameEntityTypeIdMap::const_iterator it = getData().modelTypeNameModelGroupMap_.find(device_name);
238 const char * model_name,
239 const int model_level,
242 int model_type_nodes,
243 int model_group_nodes)
245 if (model_type_id == model_group_id) {
246 std::pair<NameEntityTypeIdMap::iterator, bool> result = getData().modelTypeNameModelGroupMap_.insert(NameEntityTypeIdMap::value_type(model_name, model_type_id));
247 if (!result.second && (*result.first).second != model_type_id)
248 Report::DevelFatal0().in(
"Configuration::addDevice")
249 <<
"Attempt to register more than one device model group to the name " << model_name;
252 if (model_type_nodes < model_group_nodes) {
261 std::pair<ConfigurationMap::iterator, bool> result
262 = getData().configurationMap_.insert(ConfigurationMap::value_type(
NameLevelKey(model_name, model_level),
this));
264 Report::DevelFatal0().in(
"Configuration::addDevice")
265 <<
"Device with name " << model_name <<
" level " << model_level
266 <<
" already registered as " << (*result.first).second->getName();
270 std::pair<EntityTypeIdConfigurationMap::iterator, bool> result
271 = getData().modelTypeConfigurationMap_.insert(EntityTypeIdConfigurationMap::value_type(model_type_id,
this));
272 if (!result.second && (*result.first).second !=
this)
273 Report::DevelFatal().in(
"Configuration::addDevice")
274 <<
"Model " << demangle(model_type_id.type().name()) <<
" already registered to device " << (*result.first).second->getName()
275 <<
" while trying to register with device " << model_name <<
" level " << model_level;
290 const char * model_name,
295 if (model_type_id == model_group_id) {
296 std::pair<NameEntityTypeIdMap::iterator, bool> result = getData().modelTypeNameModelGroupMap_.insert(NameEntityTypeIdMap::value_type(model_name, model_type_id));
297 if (!result.second && (*result.first).second != model_type_id)
298 Report::DevelFatal0().in(
"Configuration::addDevice")
299 <<
"Attempt to register more than one device model group to the name " << model_name;
302 std::pair<NameLevelKeyEntityTypeIdMap::iterator, bool> result
303 = getData().modelTypeNameLevelModelTypeMap_.insert(NameLevelKeyEntityTypeIdMap::value_type(
NameLevelKey(model_name, level), model_type_id));
304 if (!result.second && (*result.first).second != model_type_id)
305 Report::DevelFatal0() <<
"Attempt to register more than one model type to the device " << model_name <<
" level " << level;