21 #ifndef bempp_concrete_subentity_iterator_hpp
22 #define bempp_concrete_subentity_iterator_hpp
24 #include "../common/common.hpp"
26 #include "entity_iterator.hpp"
27 #include "concrete_entity_decl.hpp"
29 #include <dune/common/static_assert.hh>
37 template<
typename DuneEntity,
int codimSub>
40 dune_static_assert(DuneEntity::codimension == 0,
41 "ConcreteSubentityIterator: only codim-0 entities "
42 "support iteration over subentities");
43 dune_static_assert((
int)DuneEntity::codimension < (
int)ConcreteSubentityIterator::codimension,
44 "ConcreteSubentityIterator: subentity codimension "
45 "must exceed entity codimension");
53 const DuneEntity* m_dune_entity;
60 void updateFinished() {
62 (m_cur_n == m_dune_entity->template count<codimSub>());
65 void updateSubentity() {
67 m_dune_subentity_ptr = m_dune_entity->template subEntity<codimSub>(
69 m_subentity.setDuneEntity(&*m_dune_subentity_ptr);
79 m_dune_entity(dune_entity), m_dune_subentity_ptr(
80 m_dune_entity->template subEntity<codimSub>(0)),
81 m_subentity(&*m_dune_subentity_ptr, domain_index),
82 m_domain_index(domain_index), m_cur_n(0) {
96 virtual std::auto_ptr<EntityPointer<ConcreteSubentityIterator::codimension> >
98 const int codim = ConcreteSubentityIterator::codimension;
99 return std::auto_ptr<EntityPointer<codim> >(
101 m_subentity.duneEntity(), m_domain_index));
Wrapper of a Dune entity pointer of type DuneEntityPointer.
Definition: concrete_entity_pointer.hpp:37
Abstract wrapper of an entity of codimension codim.
Definition: entity.hpp:46
Wrapper of a Dune entity of type DuneEntity and codimension codim.
Definition: concrete_entity_decl.hpp:46
virtual void next()
Increment iterator.
Definition: concrete_subentity_iterator.hpp:86
virtual std::auto_ptr< EntityPointer< ConcreteSubentityIterator::codimension > > frozen() const
A stable pointer to the entity currently referenced by the iterator.
Definition: concrete_subentity_iterator.hpp:97
ConcreteSubentityIterator(const DuneEntity *dune_entity, const DomainIndex &domain_index)
Constructor.
Definition: concrete_subentity_iterator.hpp:77
DuneEntity::template Codim< codimSub >::EntityPointer DuneSubentityPointer
Type of the Dune entity pointer corresponding to DuneEntity.
Definition: concrete_subentity_iterator.hpp:48
Definition: domain_index.hpp:32
Iterator over the subentities of codimension codimSub of a given Dune entity of type DuneEntity...
Definition: concrete_subentity_iterator.hpp:38
DuneSubentityPointer::Entity DuneSubentity
Type of the appropriate subentity of DuneEntity.
Definition: concrete_subentity_iterator.hpp:50
virtual const Entity< ConcreteSubentityIterator::codimension > & entity() const
Read-only access to the entity referenced by the iterator.
Definition: concrete_subentity_iterator.hpp:92
bool finished() const
True if iterator points past the end of the iteration range.
Definition: entity_iterator.hpp:68
Abstract base class for iterators over entities.
Definition: entity_iterator.hpp:59