46 #ifndef Xyce_N_DEV_Pars_h
47 #define Xyce_N_DEV_Pars_h
62 namespace ParameterType {
75 using namespace ParameterType;
132 typedef std::map<std::string, CompositeParam *>
CompositeMap;
138 typedef std::map<std::string, Descriptor *, LessNoCase>
ParameterMap;
147 : originalValueMap_(),
158 return originalValueMap_[serial_number];
163 originalValueMap_[serial_number] =
value;
168 return givenValueSet_.find(serial_number) != givenValueSet_.end();
174 givenValueSet_.insert(serial_number);
176 givenValueSet_.erase(serial_number);
194 inline std::ostream &
printEntry(std::ostream &os,
const Entry<std::vector<T> > &entry);
205 void typeMismatch(
const std::type_info &from_type,
const std::type_info &to_type);
251 virtual const std::type_info &type()
const = 0;
263 std::ostream &
print(std::ostream &os)
const
281 virtual std::ostream &doPrint(std::ostream &os)
const = 0;
291 class Entry :
public Entry<void>
307 : memberValuePtr_(member_value_ptr),
308 defaultValue_(default_value)
330 virtual const std::type_info &type()
const
346 virtual std::ostream &doPrint(std::ostream &os)
const
363 return memberValuePtr_;
378 return entity.*memberValuePtr_;
393 return entity.*memberValuePtr_;
407 entity.*memberValuePtr_ =
value;
424 return defaultValue_;
441 defaultValue_ =
value;
465 if (entry.
type() !=
typeid(T))
468 return static_cast<const Entry<T> &
>(entry);
487 if (entry.
type() !=
typeid(T))
490 return static_cast<Entry<T> &
>(entry);
522 originalValueFlag_(false),
524 expressionAccess_(ParameterType::
NO_DEP),
529 compositeParametricData_(0),
561 return entry_->type() ==
typeid(T);
563 return typeid(T) ==
typeid(
int);
566 bool isComposite()
const
568 return compositeParametricData_ != 0;
581 originalValueFlag_ = original_value_flag;
593 bool hasOriginalValueStored()
const
595 return originalValueFlag_;
608 expressionAccess_ = expression_access;
622 return expressionAccess_;
662 category_ = category;
689 description_ = description;
701 const std::string &getDescription()
const
718 compositeParametricData_ = composite_parametric_data;
804 serialNumber_ = serial_number;
816 int getSerialNumber()
const
818 return serialNumber_;
837 return entry.getValue(entity);
855 return entry.getValue(entity);
871 return entry.getMemberPtr();
885 bool hasGivenMember()
const
918 if (hasGivenMember())
920 return entity.*given_;
940 if (hasGivenMember())
942 entity.*given_ =
value;
977 os << entry.getDefaultValue();
994 inline std::ostream &
printEntry(std::ostream &os,
const Entry<std::vector<T> > &entry)
996 for (
typename std::vector<T>::const_iterator it = entry.getDefaultValue().begin(); it != entry.getDefaultValue().end(); ++it)
997 os << (*it) << std::endl;
1014 inline std::ostream &
printEntry(std::ostream &os,
const Entry<std::map<std::string, T> > &entry)
1016 for (
typename std::map<std::string, T>::const_iterator it = entry.getDefaultValue().begin(); it != entry.getDefaultValue().end(); ++it)
1017 os << (*it).first << std::endl;
1036 os <<
"'" << entry.getDefaultValue() <<
"'";
1055 os << (entry.getDefaultValue() ?
"true" :
"false");
1074 for (CompositeMap::const_iterator it = entry.getDefaultValue().begin(); it != entry.getDefaultValue().end(); ++it)
1075 os << (*it).first <<
": " << (*it).second << std::endl;
1095 return entry.getDefaultValue();
1112 entry.setDefaultValue(t);
1131 return entry.getValue(entity);
1150 return entry.getValue(entity);
1165 template <
class T,
class U>
1170 return entry.getValue(entity);
1183 template <
class T,
class U>
1188 entry.setValue(entity, value);
1227 for (ParameterMap::iterator it = map_.begin(); it != map_.end(); ++it)
1228 delete (*it).second;
1273 void addDescriptor(
const std::string &name,
Descriptor *descriptor,
const std::type_info ¶meter_data_class);
1331 template<
class T,
class U>
1332 Descriptor &addPar(
const char *parName, T default_value, T U::*varPtr)
1336 addDescriptor(parName, descriptor,
typeid(C));
1357 Descriptor &addPar(
const char *parName,
const char *default_value, std::string U::*varPtr)
1361 addDescriptor(parName, descriptor,
typeid(C));
1387 template<
class T,
class U>
1401 addDescriptor(parName, descriptor,
typeid(C));
1440 addDescriptor(parName, descriptor,
typeid(C));
1465 template<
class T,
class U>
1478 addDescriptor(parName, descriptor,
typeid(C));
1492 template<
class U,
class V>
1493 void addComposite(
const char *comp_name,
const ParametricData<U> &composite_pars, std::map<std::string, U *> V::*composite_map)
1501 addDescriptor(comp_name, descriptor,
typeid(C));
1515 template<
class U,
class V>
1516 void addComposite(
const char *comp_name,
const ParametricData<U> &composite_pars, std::vector<U *> V::*composite_vector)
1523 addDescriptor(comp_name, descriptor,
typeid(C));
1536 void makeVector(
const std::string &cname,
int len)
1538 for (
int i = 1; i <= len; ++i)
1540 std::ostringstream oss;
1542 std::string param = oss.str();
1544 ParameterMap::iterator it = map_.find(param);
1545 if (it == map_.end())
1568 void setDefaultParameters(ParameterBase ¶meter_base, ParameterMap::const_iterator begin, ParameterMap::const_iterator end,
const DeviceOptions &device_options);
1646 return equal_nocase(name,
"TNOM") || equal_nocase(name,
"TEMP");
1652 #endif // Xyce_N_DEV_Pars_h