49 #include <Xyce_config.h>
69 struct DeviceInstanceCmp :
public std::binary_function<DeviceInstance, DeviceInstance, bool>
71 bool operator()(
const DeviceInstance &entity_0,
const DeviceInstance &entity_1)
const
73 return less_nocase(entity_0.getName().getEncodedName(), entity_1.getName().getEncodedName());
75 bool operator()(
const DeviceInstance *entity_0,
const DeviceInstance *entity_1)
const
77 return less_nocase(entity_0->getName().getEncodedName(), entity_1->getName().getEncodedName());
92 std::vector<DeviceModel *> models;
96 << std::endl << section_divider << std::endl
97 <<
"Number of " << device.getName() <<
" models: " << models.size() << std::endl;
100 for (std::vector<DeviceModel *>::const_iterator it = models.begin(); it != models.end(); ++it, ++i)
102 os << i <<
": name = " << (*it)->getName() <<
" type = " << (*it)->getType() <<
" level = " << (*it)->getLevel() << std::endl;
104 (*it)->printOutInstances(os);
106 os << section_divider << std::endl;
111 typedef std::map<std::string, std::pair<DeviceModel *, std::vector<DeviceInstance *> > >
UglyMap;
122 std::pair<UglyMap::iterator, bool> result =
modelMap_.insert(UglyMap::value_type(model->
getName(), std::make_pair(model, std::vector<DeviceInstance *>())));
126 if ((*result.first).second.second.empty())
130 std::sort((*result.first).second.second.begin(), (*result.first).second.second.end(), DeviceInstanceCmp());
153 static const int stdWidth = 15;
159 device.forEachModel(op);
162 <<
"Number of " << device.getName() <<
" models: " << model_map.size() << std::endl
163 << std::setw(stdWidth) <<
"name ";
165 if (!model_map.empty())
167 int column_count = 1;
168 for (UglyMap::const_iterator it_model = model_map.begin(); it_model != model_map.end(); ++it_model, ++column_count)
170 if (column_count%8 == 0)
172 os << std::setw(stdWidth) << (*it_model).first ;
176 os << std::setw(stdWidth) <<
"type ";
178 for (UglyMap::const_iterator it_model = model_map.begin(); it_model != model_map.end(); ++it_model, ++column_count)
180 if (column_count%8 == 0)
182 os << std::setw(stdWidth) << (*it_model).second.first->getType() ;
186 os << std::setw(stdWidth) <<
"level ";
188 for (UglyMap::const_iterator it_model = model_map.begin(); it_model != model_map.end(); ++it_model, ++column_count)
190 if (column_count%8 == 0)
192 os << std::setw(stdWidth) << (*it_model).second.first->getLevel() ;
196 const ParameterMap &parMap = (*model_map.begin()).second.first->getParameterMap();
199 for (ParameterMap::const_iterator it_parameter = parMap.begin(); it_parameter != parMap.end(); ++it_parameter)
201 for (UglyMap::const_iterator it_model = model_map.begin(); it_model != model_map.end(); ++it_model, ++column_count)
203 if (it_model == model_map.begin())
205 if (column_count%8 == 0)
207 os << std::setw(stdWidth) << (*it_parameter).first;
210 os << std::setw(stdWidth);
211 printParameter(os, *(*it_model).second.first, (*it_parameter).first, *(*it_parameter).second);
218 os <<
"Number of " << device.getName() <<
" instances: " << op.
deviceCount_ << std::endl
219 << std::setw(stdWidth) <<
"name ";
222 for (UglyMap::const_iterator it_model = model_map.begin(); it_model != model_map.end(); ++it_model)
224 const std::vector<DeviceInstance *> &instance_list = (*it_model).second.second;
226 for (std::vector<DeviceInstance *>::const_iterator it_instance = instance_list.begin(); it_instance != instance_list.end(); ++it_instance, ++column_count)
228 if (column_count%8 == 0)
230 os << std::setw(stdWidth) << (*it_instance)->getName();
234 << std::setw(stdWidth) <<
"model ";
237 const DeviceInstance &first_instance = *(*model_map.begin()).second.second.front();
240 for (UglyMap::const_iterator it_model = model_map.begin(); it_model != model_map.end(); ++it_model)
242 const DeviceModel &model = *(*it_model).second.first;
243 const std::vector<DeviceInstance *> &instance_list = (*it_model).second.second;
245 if ( !instance_list.empty () ) {
246 for (std::vector<DeviceInstance *>::const_iterator it_instance = instance_list.begin(); it_instance != instance_list.end(); ++it_instance, ++column_count)
248 if (column_count%8 == 0)
250 os << std::setw(stdWidth) << model.
getName();
259 for (ParameterMap::const_iterator it_parameter = parameter_map.begin() ; it_parameter != parameter_map.end(); ++it_parameter)
261 os << std::setw(stdWidth) << it_parameter->first;
264 for (UglyMap::const_iterator it_model = model_map.begin(); it_model != model_map.end(); ++it_model)
266 const DeviceModel &model = *(*it_model).second.first;
267 const std::vector<DeviceInstance *> &instance_list = (*it_model).second.second;
269 if ( !instance_list.empty () ) {
270 for (std::vector<DeviceInstance *>::const_iterator it_instance = instance_list.begin(); it_instance != instance_list.end(); ++it_instance, ++column_count)
272 if (column_count%8 == 0)
274 os << std::setw(stdWidth);
275 printParameter(os, *(*it_instance), (*it_parameter).first, *(*it_parameter).second);
301 if (param.
isType<
double>())
309 os << param.
value<
double>(entity);
312 else if (param.
isType<
bool>())
314 os << param.
value<
bool>(entity);
316 else if (param.
isType<
int>())
318 os << param.
value<
int>(entity);
320 else if (param.
isType<
long>())
322 os << param.
value<
long>(entity);
324 else if (param.
isType<std::string>())
326 os << param.
value<std::string>(entity);
328 else if (param.
isType<std::vector<std::string> >())
340 else if (param.
isType<std::vector<int> >())
352 else if (param.
isType<std::vector<double> >())