39 template<u
int16_type Type,
typename FormContextType>
43 static const uint16_type type = Type;
45 typedef typename mpl::if_<mpl::equal_to<mpl::int_<type>, mpl::int_<0> >, mpl::identity<typename FormContextType::test_fe_type>, mpl::identity<typename FormContextType::trial_fe_type> >::type::type fe_type;
46 typedef boost::shared_ptr<fe_type> fe_ptrtype;
47 typedef typename mpl::if_<mpl::equal_to<mpl::int_<type>, mpl::int_<0> >, mpl::identity<typename FormContextType::test_fecontext_type>,mpl::identity<typename FormContextType::trial_fecontext_type> >::type::type fecontext_type;
48 typedef boost::shared_ptr<fecontext_type> fecontext_ptrtype;
50 typedef typename mpl::if_<mpl::equal_to<mpl::int_<type>, mpl::int_<0> >,
51 mpl::identity<typename FormContextType::test_geometric_mapping_context_ptrtype>,
52 mpl::identity<typename FormContextType::trial_geometric_mapping_context_ptrtype> >::type::type geometric_mapping_context_ptrtype;
57 typedef FormContextType form_type;
58 typedef boost::shared_ptr<form_type> form_ptrtype;
60 template<
typename Sig>
64 struct result<FEContextInit( T )>
66 typedef fusion::pair<typename boost::remove_reference<T>::type::first_type,fecontext_ptrtype> type;
69 FEContextInit( fe_ptrtype
const& fe, FormContextType
const& form )
75 fusion::pair<typename boost::remove_reference<T>::type::first_type,fecontext_ptrtype>
76 operator()( T
const& t )
const
78 return operator()( t, mpl::int_<type>() );
85 fusion::pair<typename boost::remove_reference<T>::type::first_type,fecontext_ptrtype>
86 operator()( T
const& t, mpl::int_<0> )
const
88 geometric_mapping_context_ptrtype gmcptr( t.second );
89 typedef typename boost::remove_reference<T>::type::first_type first_type;
90 return fusion::make_pair<first_type>( fecontext_ptrtype(
new fecontext_type( M_fe,
92 M_form.testPc( gmcptr->faceId(), gmcptr->permutation() ) ) ) );
97 fusion::pair<typename boost::remove_reference<T>::type::first_type,fecontext_ptrtype>
98 operator()( T
const& t, mpl::int_<1> )
const
100 geometric_mapping_context_ptrtype gmcptr( t.second );
101 typedef typename boost::remove_reference<T>::type::first_type first_type;
102 return fusion::make_pair<first_type>( fecontext_ptrtype(
new fecontext_type( M_fe,
104 M_form.trialPc( gmcptr->faceId(), gmcptr->permutation() ) ) ) );
107 fe_ptrtype
const& M_fe;
108 form_type
const& M_form;
112 template<u
int16_type Type,
typename FormContextType>
113 struct FEContextUpdate
116 static const uint16_type type = Type;
120 typedef typename mpl::if_<mpl::equal_to<mpl::int_<type>, mpl::int_<0> >,
121 mpl::identity<typename FormContextType::test_geometric_mapping_context_ptrtype>,
122 mpl::identity<typename FormContextType::trial_geometric_mapping_context_ptrtype> >::type::type geometric_mapping_context_ptrtype;
124 typedef typename mpl::if_<mpl::equal_to<mpl::int_<type>, mpl::int_<0> >,
125 mpl::identity<typename FormContextType::map_test_geometric_mapping_context_type>,
126 mpl::identity<typename FormContextType::map_trial_geometric_mapping_context_type> >::type::type map_geometric_mapping_context_type;
130 typedef FormContextType form_type;
131 typedef boost::shared_ptr<form_type> form_ptrtype;
133 FEContextUpdate( map_geometric_mapping_context_type
const& mapgmc,
134 form_type
const& form )
141 void operator()( T& t )
const
143 return operator()( t, mpl::int_<type>() );
146 void operator()( T& t, mpl::int_<0> )
const
148 typedef typename boost::remove_reference<T>::type::first_type first_type;
149 geometric_mapping_context_ptrtype gmcptr( fusion::at_key<first_type>( M_mapgmc ) );
150 t.second->update( gmcptr, M_form.testPc( gmcptr->faceId(), gmcptr->permutation() ) );
153 void operator()( T& t, mpl::int_<1> )
const
155 typedef typename boost::remove_reference<T>::type::first_type first_type;
156 geometric_mapping_context_ptrtype gmcptr( fusion::at_key<first_type>( M_mapgmc ) );
157 t.second->update( gmcptr, M_form.trialPc( gmcptr->faceId(), gmcptr->permutation() ) );
160 map_geometric_mapping_context_type
const& M_mapgmc;
161 form_type
const& M_form;