00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 template <typename TypeSeq, typename BaseT, typename ObjectT>
00035 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00036 TemplateManager()
00037 {
00038
00039 int sz = Sacado::mpl::size<TypeSeq>::value;
00040 objects.resize(sz);
00041 }
00042
00043 template <typename TypeSeq, typename BaseT, typename ObjectT>
00044 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00045 ~TemplateManager()
00046 {
00047 }
00048
00049 template <typename TypeSeq, typename BaseT, typename ObjectT>
00050 template <typename BuilderOpT>
00051 void
00052 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00053 buildObjects(const BuilderOpT& builder)
00054 {
00055 Sacado::mpl::for_each<TypeSeq>(BuildObject<BuilderOpT>(objects,builder));
00056 }
00057
00058 template <typename TypeSeq, typename BaseT, typename ObjectT>
00059 void
00060 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00061 buildObjects()
00062 {
00063 DefaultBuilderOp builder;
00064 (*this).template buildObjects<DefaultBuilderOp>(builder);
00065 }
00066
00067 template <typename TypeSeq, typename BaseT, typename ObjectT>
00068 template<typename ScalarT>
00069 Teuchos::RCP<BaseT>
00070 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00071 getAsBase()
00072 {
00073 int idx = Sacado::mpl::find<TypeSeq,ScalarT>::value;
00074 return objects[idx];
00075 }
00076
00077 template <typename TypeSeq, typename BaseT, typename ObjectT>
00078 template<typename ScalarT>
00079 Teuchos::RCP<const BaseT>
00080 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::getAsBase() const
00081 {
00082 int idx = Sacado::mpl::find<TypeSeq,ScalarT>::value;
00083 return objects[idx];
00084 }
00085
00086 template <typename TypeSeq, typename BaseT, typename ObjectT>
00087 template<typename ScalarT>
00088 Teuchos::RCP< typename boost::mpl::apply<ObjectT,ScalarT>::type >
00089 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00090 getAsObject()
00091 {
00092 int idx = Sacado::mpl::find<TypeSeq,ScalarT>::value;
00093 return Teuchos::rcp_dynamic_cast< typename boost::mpl::apply<ObjectT,ScalarT>::type >(objects[idx], true);
00094 }
00095
00096 template <typename TypeSeq, typename BaseT, typename ObjectT>
00097 template<typename ScalarT>
00098 Teuchos::RCP< const typename boost::mpl::apply<ObjectT,ScalarT>::type >
00099 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00100 getAsObject() const
00101 {
00102 int idx = Sacado::mpl::find<TypeSeq,ScalarT>::value;
00103 return Teuchos::rcp_dynamic_cast< const typename boost::mpl::apply<ObjectT,ScalarT>::type >(objects[idx],
00104 true);
00105 }
00106
00107 template <typename TypeSeq, typename BaseT, typename ObjectT>
00108 typename PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::iterator
00109 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00110 begin()
00111 {
00112 return PHX::TemplateIterator<TypeSeq,BaseT,ObjectT>(*this,
00113 objects.begin());
00114 }
00115
00116 template <typename TypeSeq, typename BaseT, typename ObjectT>
00117 typename PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::const_iterator
00118 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00119 begin() const
00120 {
00121 return PHX::ConstTemplateIterator<TypeSeq,BaseT,ObjectT>(*this,
00122 objects.begin());
00123 }
00124
00125 template <typename TypeSeq, typename BaseT, typename ObjectT>
00126 typename PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::iterator
00127 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00128 end()
00129 {
00130 return PHX::TemplateIterator<TypeSeq,BaseT,ObjectT>(*this,
00131 objects.end());
00132 }
00133
00134 template <typename TypeSeq, typename BaseT, typename ObjectT>
00135 typename PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::const_iterator
00136 PHX::TemplateManager<TypeSeq,BaseT,ObjectT>::
00137 end() const
00138 {
00139 return PHX::ConstTemplateIterator<TypeSeq,BaseT,ObjectT>(*this,
00140 objects.end());
00141 }