5 #ifndef DUNE_INDEXIDSET_HH
6 #define DUNE_INDEXIDSET_HH
10 #include <dune/common/exceptions.hh>
11 #include <dune/common/forloop.hh>
23 #include <dune/common/bartonnackmanifcheck.hh>
76 template<
class Gr
idImp,
class IndexSetImp,
class IndexTypeImp>
81 typedef typename remove_const< GridImp >::type::Traits Traits;
88 static const int dimension = remove_const< GridImp >::type::dimension;
108 Traits::template Codim<cc>::Entity& e)
const
110 CHECK_INTERFACE_IMPLEMENTATION((asImp().
template index<cc>(e)));
111 return asImp().template index<cc>(e);
123 template<
class EntityType>
126 enum { cc = EntityType::codimension };
127 CHECK_INTERFACE_IMPLEMENTATION((asImp().
template index<cc>(e)));
128 return asImp().template index<cc>(e);
147 int i,
unsigned int codim )
const
149 CHECK_INTERFACE_IMPLEMENTATION((asImp().
template subIndex< cc >(e,i,codim)));
150 return asImp().template subIndex< cc >(e,i,codim);
171 template<
class Entity >
175 return asImp().template subIndex< cc >( e, i, codim );
193 const std::vector<GeometryType>&
geomTypes (
int codim)
const
195 CHECK_INTERFACE_IMPLEMENTATION((asImp().
geomTypes(codim)));
196 return asImp().geomTypes(codim);
206 CHECK_INTERFACE_IMPLEMENTATION((asImp().
size(type)));
207 return asImp().size(type);
218 CHECK_INTERFACE_IMPLEMENTATION((asImp().
size(codim)));
219 return asImp().size(codim);
227 template<
class EntityType>
230 CHECK_INTERFACE_IMPLEMENTATION((asImp().
contains(e)));
231 return asImp().contains(e);
244 IndexSetImp& asImp () {
return static_cast<IndexSetImp &
> (*this);}
246 const IndexSetImp& asImp ()
const {
return static_cast<const IndexSetImp &
>(*this);}
249 #undef CHECK_INTERFACE_IMPLEMENTATION
250 #undef CHECK_AND_CALL_INTERFACE_IMPLEMENTATION
257 template<
class Gr
idImp,
class IndexSetImp>
259 :
public IndexSet< GridImp, IndexSetImp >
262 typedef typename remove_const< GridImp >::type::Traits Traits;
289 IndexType subIndex (
const typename Traits::template Codim< cc >::Entity &e,
int i,
unsigned int codim )
const
291 return index( *(e.subEntity( i, codim )) );
311 typedef typename std::vector< GeometryType >::const_iterator Iterator;
312 const Iterator end = geomTs.end();
313 for( Iterator it = geomTs.begin(); it != end; ++it )
399 template<
class Gr
idImp,
class IdSetImp,
class IdTypeImp>
407 template<
class EntityType>
410 enum { cc = EntityType::codimension };
411 return asImp().template id<cc>(e);
420 IdType id (
const typename remove_const<GridImp>::type::
421 Traits::template Codim<cc>::Entity& e)
const
423 return asImp().template id<cc>(e);
429 Traits::template Codim<0>::Entity& e,
int i,
unsigned int codim)
const
431 return asImp().subId(e,i,codim);
444 IdSetImp& asImp () {
return static_cast<IdSetImp &
> (*this);}
446 const IdSetImp& asImp ()
const {
return static_cast<const IdSetImp &
>(*this);}