30 #include "Teuchos_Assert.hpp"
32 template <
typename EntryBase,
typename EntryType>
36 bool supports_analytic_) :
39 supports_ad(supports_ad_),
40 supports_analytic(supports_analytic_)
44 template <
typename EntryBase,
typename EntryType>
50 template <
typename EntryBase,
typename EntryType>
58 template <
typename EntryBase,
typename EntryType>
66 template <
typename EntryBase,
typename EntryType>
71 return supports_analytic;
74 template <
typename EntryBase,
typename EntryType>
75 template <
class EvalType>
82 std::string evalTypeString = getTypeName<EvalType>();
86 if (it == family.end())
92 template <
typename EntryBase,
typename EntryType>
93 template <
class EvalType>
97 const bool allow_overwrite)
100 std::string evalTypeString = getTypeName<EvalType>();
103 iterator it = family.find(evalTypeString);
106 if (it == family.end()) {
107 family.insert(std::pair<std::string,
108 Teuchos::RCP<EntryBase> >(evalTypeString, entry));
110 else if (allow_overwrite) {
111 (*it).second = entry;
120 template <
typename EntryBase,
typename EntryType>
121 template <
class EvalType>
122 Teuchos::RCP< typename Sacado::mpl::apply<EntryType,EvalType>::type >
127 std::string evalTypeString = getTypeName<EvalType>();
130 iterator it = family.find(evalTypeString);
131 TEUCHOS_TEST_FOR_EXCEPTION(it == family.end(),
133 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
134 +
"Parameter entry " + name
135 +
" does not have a parameter of type"
139 Teuchos::RCP< typename Sacado::mpl::apply<EntryType,EvalType>::type > entry = Teuchos::rcp_dynamic_cast< typename Sacado::mpl::apply<EntryType,EvalType>::type >((*it).second);
140 TEUCHOS_TEST_FOR_EXCEPTION(entry == Teuchos::null,
142 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
143 +
"Parameter entry " + name
144 +
" of type" + evalTypeString
145 +
" has incorrect entry type");
150 template <
typename EntryBase,
typename EntryType>
151 template <
class EvalType>
152 Teuchos::RCP< const typename Sacado::mpl::apply<EntryType,EvalType>::type >
157 std::string evalTypeString = getTypeName<EvalType>();
161 TEUCHOS_TEST_FOR_EXCEPTION(it == family.end(),
163 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
164 +
"Parameter entry " + name
165 +
" does not have a parameter of type"
169 Teuchos::RCP< const typename Sacado::mpl::apply<EntryType,EvalType>::type > entry = Teuchos::rcp_dynamic_cast< const typename Sacado::mpl::apply<EntryType,EvalType>::type >((*it).second);
170 TEUCHOS_TEST_FOR_EXCEPTION(entry == Teuchos::null,
172 std::string(
"Sacado::ParameterFamilyBase::getEntry(): ")
173 +
"Parameter entry " + name
174 +
" of type" + evalTypeString
175 +
" has incorrect entry type");
180 template <
typename EntryBase,
typename EntryType>
183 print(std::ostream& os,
bool print_values)
const
185 os <<
"\t" << name <<
": Supports AD = " << supports_ad
186 <<
", Supports_Analytic = " << supports_analytic << std::endl;
188 for (
const_iterator it = family.begin(); it != family.end(); it++) {
189 os <<
"\t\t" << (*it).first <<
" = ";
190 (*it).second->print(os);
197 template <
typename EntryBase,
typename EntryType>
198 template <
class EvalType>
202 return typeid(EvalType).name();