1#ifndef DUNE_MULTIDOMAINGRID_ENTITY_HH
2#define DUNE_MULTIDOMAINGRID_ENTITY_HH
4#include <dune/common/deprecated.hh>
6#include <dune/grid/common/entity.hh>
7#include <dune/grid/common/gridenums.hh>
13template<
int codim,
int dim,
typename Gr
idImp>
16template<
typename Gr
idImp>
17class LeafIntersectionIteratorWrapper;
19template<
typename Gr
idImp>
20class LevelIntersectionIteratorWrapper;
22template<
typename Gr
idImp>
23class HierarchicIteratorWrapper;
25template<
typename,
typename>
26class IntersectionIteratorWrapper;
28template<
typename HostGr
id,
typename MDGr
idTraits>
38template<
typename HostES>
39class EntitySeedWrapper
42 typedef HostES HostEntitySeed;
44 template<
typename,
typename>
45 friend class MultiDomainGrid;
47 template<
int,
int,
typename>
48 friend class EntityWrapper;
52 static const std::size_t codimension = HostEntitySeed::codimension;
57 EntitySeedWrapper(
const HostEntitySeed& hostEntitySeed)
58 : _hostEntitySeed(hostEntitySeed)
61 const HostEntitySeed& hostEntitySeed()
const
63 return _hostEntitySeed;
68 return _hostEntitySeed.isValid();
71 HostEntitySeed _hostEntitySeed;
76template<
int codim,
int dim,
typename Gr
idImp>
77class EntityWrapperBase :
78 public EntityDefaultImplementation<codim,dim,GridImp,EntityWrapper>
81 template<
typename,
typename>
82 friend class MultiDomainGrid;
84 typedef typename GridImp::HostGrid::Traits::template Codim<codim>::Entity HostEntity;
88 typedef typename GridImp::template Codim<codim>::Geometry Geometry;
90 typedef EntitySeedWrapper<typename HostEntity::EntitySeed> EntitySeed;
95 explicit EntityWrapperBase(
const HostEntity& e)
99 explicit EntityWrapperBase(HostEntity&& e)
100 : _hostEntity(std::move(e))
104 return _hostEntity.level();
107 PartitionType partitionType()
const {
108 return _hostEntity.partitionType();
111 unsigned int subEntities(
unsigned int codimSubEntitiy)
const {
112 return _hostEntity.subEntities(codimSubEntitiy);
115 Geometry geometry()
const {
116 return Geometry(_hostEntity.geometry());
119 EntitySeed seed()
const {
120 return EntitySeed(_hostEntity.seed());
123 bool equals(
const EntityWrapperBase& other)
const
125 return hostEntity() == other.hostEntity();
130 HostEntity _hostEntity;
134 const HostEntity& hostEntity()
const {
141template<
int codim,
int dim,
typename Gr
idImp>
143 public EntityWrapperBase<codim,dim,GridImp>
146 using Base = EntityWrapperBase<codim,dim,GridImp>;
148 template<
typename,
typename>
149 friend class MultiDomainGrid;
158template<
int dim,
typename Gr
idImp>
159class EntityWrapper<0,dim,GridImp> :
160 public EntityWrapperBase<0,dim,GridImp>
163 using Base = EntityWrapperBase<0,dim,GridImp>;
165 template<
typename,
typename>
166 friend class MultiDomainGrid;
169 friend class LevelGridView;
172 friend class LeafGridView;
174 using Base::hostEntity;
178 using LocalGeometry =
typename GridImp::template Codim<0>::LocalGeometry;
179 using LeafIntersectionIterator =
typename GridImp::Traits::LeafIntersectionIterator;
180 using LevelIntersectionIterator =
typename GridImp::Traits::LevelIntersectionIterator;
181 using HierarchicIterator =
typename GridImp::Traits::HierarchicIterator;
186 unsigned int subEntities(
unsigned int codim)
const {
187 return hostEntity().subEntities(codim);
191 typename GridImp::template Codim<cc>::Entity subEntity(
int i)
const {
192 return {EntityWrapper<cc,dim,GridImp>(hostEntity().
template subEntity<cc>(i))};
195 typename GridImp::template Codim<0>::Entity father()
const {
196 return {EntityWrapper(hostEntity().father())};
199 bool hasFather()
const {
200 return hostEntity().hasFather();
203 bool isLeaf()
const {
204 return hostEntity().isLeaf();
207 bool isRegular()
const {
208 return hostEntity().isRegular();
211 LocalGeometry geometryInFather()
const {
212 return LocalGeometry(hostEntity().geometryInFather());
215 HierarchicIterator hbegin(
int maxLevel)
const {
216 return HierarchicIteratorWrapper<GridImp>(hostEntity().hbegin(maxLevel));
219 HierarchicIterator hend(
int maxLevel)
const {
220 return HierarchicIteratorWrapper<GridImp>(hostEntity().hend(maxLevel));
223 LevelIntersectionIterator ilevelbegin()
const {
224 return IntersectionIteratorWrapper<
226 typename GridImp::HostGrid::LevelGridView::IntersectionIterator
228 hostEntity().ilevelbegin()
232 LevelIntersectionIterator ilevelend()
const {
233 return IntersectionIteratorWrapper<
235 typename GridImp::HostGrid::LevelGridView::IntersectionIterator
237 hostEntity().ilevelend()
241 LeafIntersectionIterator ileafbegin()
const {
242 return IntersectionIteratorWrapper<
244 typename GridImp::HostGrid::LeafGridView::IntersectionIterator
246 hostEntity().ileafbegin()
250 LeafIntersectionIterator ileafend()
const {
251 return IntersectionIteratorWrapper<
253 typename GridImp::HostGrid::LeafGridView::IntersectionIterator
255 hostEntity().ileafend()
260 return hostEntity().isNew();
263 bool mightVanish()
const {
264 return hostEntity().mightVanish();
267 bool hasBoundaryIntersections ()
const
269 return hostEntity().hasBoundaryIntersections();