46 #ifndef Xyce_N_DEV_Pars_h
47 #define Xyce_N_DEV_Pars_h
63 namespace ParameterType {
76 using namespace ParameterType;
142 typedef std::map<std::string, CompositeParam *>
CompositeMap;
148 typedef std::map<std::string, Descriptor *, LessNoCase>
ParameterMap;
160 virtual void operator()(
162 const std::string ¶m,
163 std::vector<double> & dfdp,
164 std::vector<double> & dqdp,
165 std::vector<double> & dbdp,
166 std::vector<int> & Findices,
167 std::vector<int> & Qindices,
168 std::vector<int> & Bindices
179 : originalValueMap_(),
193 return originalValueMap_[serial_number];
198 originalValueMap_[serial_number] =
value;
203 return givenValueSet_.find(serial_number) != givenValueSet_.end();
209 givenValueSet_.insert(serial_number);
211 givenValueSet_.erase(serial_number);
229 inline std::ostream &
printEntry(std::ostream &os,
const Entry<std::vector<T> > &entry);
239 void typeMismatch(
const std::type_info &from_type,
const std::type_info &to_type);
284 virtual const std::type_info &type()
const = 0;
295 std::ostream &
print(std::ostream &os)
const
312 virtual std::ostream &doPrint(std::ostream &os)
const = 0;
323 class Entry :
public Entry<void>
340 : memberValuePtr_(member_value_ptr),
341 defaultValue_(default_value)
363 virtual const std::type_info &type()
const
379 virtual std::ostream &doPrint(std::ostream &os)
const
396 return memberValuePtr_;
411 return entity.*memberValuePtr_;
426 return entity.*memberValuePtr_;
440 entity.*memberValuePtr_ =
value;
459 return defaultValue_;
478 defaultValue_ =
value;
503 if (entry.
type() !=
typeid(T))
506 return static_cast<const Entry<T> &
>(entry);
525 if (entry.
type() !=
typeid(T))
528 return static_cast<Entry<T> &
>(entry);
565 originalValueFlag_(false),
567 expressionAccess_(ParameterType::
NO_DEP),
572 compositeParametricData_(0),
574 sensitivityAvailable_(false),
606 return entry_->type() ==
typeid(T);
608 return typeid(T) ==
typeid(
int);
611 bool hasCompositeData()
const
613 return compositeParametricData_ != 0;
626 originalValueFlag_ = original_value_flag;
638 bool hasOriginalValueStored()
const
640 return originalValueFlag_;
653 expressionAccess_ = expression_access;
667 return expressionAccess_;
706 category_ = category;
733 description_ = description;
745 const std::string &getDescription()
const
762 compositeParametricData_ = composite_parametric_data;
848 serialNumber_ = serial_number;
860 int getSerialNumber()
const
862 return serialNumber_;
881 return entry.getValue(entity);
899 return entry.getValue(entity);
915 return entry.getMemberPtr();
929 bool hasGivenMember()
const
962 if (hasGivenMember())
964 return entity.*given_;
984 if (hasGivenMember())
986 entity.*given_ =
value;
1001 sensitivityAvailable_ =
value;
1020 bool getAnalyticSensitivityAvailable()
const
1022 return sensitivityAvailable_;
1034 bool getAnalyticSensitivity(
1036 const std::string & name,
1037 std::vector<double> & dfdp, std::vector<double> & dqdp, std::vector<double> & dbdp,
1038 std::vector<int> & Findices, std::vector<int> & Qindices, std::vector<int> & Bindices)
const
1042 sensPtr_->operator()(entity1, name, dfdp, dqdp, dbdp, Findices, Qindices, Bindices);
1081 os << entry.getDefaultValue();
1100 for (
typename std::vector<T>::const_iterator it = entry.getDefaultValue().begin(); it != entry.getDefaultValue().end(); ++it)
1101 os << (*it) << std::endl;
1118 inline std::ostream &
printEntry(std::ostream &os,
const Entry<std::map<std::string, T> > &entry)
1120 for (
typename std::map<std::string, T>::const_iterator it = entry.getDefaultValue().begin(); it != entry.getDefaultValue().end(); ++it)
1121 os << (*it).first << std::endl;
1140 os <<
"'" << entry.getDefaultValue() <<
"'";
1159 os << (entry.getDefaultValue() ?
"true" :
"false");
1177 for (CompositeMap::const_iterator it = entry.getDefaultValue().begin(); it != entry.getDefaultValue().end(); ++it)
1178 os << (*it).first <<
": " << (*it).second << std::endl;
1198 return entry.getDefaultValue();
1215 entry.setDefaultValue(t);
1234 return entry.getValue(entity);
1253 return entry.getValue(entity);
1268 template <
class T,
class U>
1273 return entry.getValue(entity);
1286 template <
class T,
class U>
1291 entry.setValue(entity, value);
1330 for (ParameterMap::iterator it = map_.begin(); it != map_.end(); ++it)
1331 delete (*it).second;
1376 void addDescriptor(
const std::string &name,
Descriptor *descriptor,
const std::type_info ¶meter_data_class);
1434 template<
class T,
class U>
1435 Descriptor &addPar(
const char *parName, T default_value, T U::*varPtr)
1439 addDescriptor(parName, descriptor,
typeid(C));
1460 Descriptor &addPar(
const char *parName,
const char *default_value, std::string U::*varPtr)
1464 addDescriptor(parName, descriptor,
typeid(C));
1490 template<
class T,
class U>
1504 addDescriptor(parName, descriptor,
typeid(C));
1543 addDescriptor(parName, descriptor,
typeid(C));
1568 template<
class T,
class U>
1581 addDescriptor(parName, descriptor,
typeid(C));
1596 template<
class U,
class V>
1597 void addComposite(
const char *comp_name,
const ParametricData<U> &composite_pars, std::map<std::string, U *> V::*composite_map)
1605 addDescriptor(comp_name, descriptor,
typeid(C));
1620 template<
class U,
class V>
1621 void addComposite(
const char *comp_name,
const ParametricData<U> &composite_pars, std::vector<U *> V::*composite_vector)
1628 addDescriptor(comp_name, descriptor,
typeid(C));
1641 void makeVector(
const std::string &cname,
int len)
1643 for (
int i = 1; i <= len; ++i)
1645 std::ostringstream oss;
1647 std::string param = oss.str();
1649 ParameterMap::iterator it = map_.find(param);
1650 if (it == map_.end())
1673 void setDefaultParameters(ParameterBase ¶meter_base, ParameterMap::const_iterator begin, ParameterMap::const_iterator end,
const DeviceOptions &device_options);
1751 return equal_nocase(name,
"TNOM") || equal_nocase(name,
"TEMP");
1757 #endif // Xyce_N_DEV_Pars_h