dune-grid-dev-howto
2.1.1
|
00001 #ifndef DUNE_IDENTITYGRID_ENTITY_POINTER_HH 00002 #define DUNE_IDENTITYGRID_ENTITY_POINTER_HH 00003 00004 #include "identitygridentity.hh" 00005 00010 namespace Dune { 00011 00012 00015 template<int codim, class GridImp> 00016 class IdentityGridEntityPointer 00017 { 00018 private: 00019 00020 enum { dim = GridImp::dimension }; 00021 00022 00023 public: 00024 00027 typedef IdentityGridEntityPointer EntityPointerImp; 00028 00030 enum { codimension = codim }; 00031 00032 typedef typename GridImp::template Codim<codim>::Entity Entity; 00033 00034 typedef IdentityGridEntityPointer<codim,GridImp> Base; 00035 00036 // The codimension of this entitypointer wrt the host grid 00037 enum {CodimInHostGrid = GridImp::HostGridType::dimension - GridImp::dimension + codim}; 00038 00039 // EntityPointer to the equivalent entity in the host grid 00040 typedef typename GridImp::HostGridType::Traits::template Codim<CodimInHostGrid>::EntityPointer HostGridEntityPointer; 00041 00042 00044 template< class HostGridEntityPointer > 00045 IdentityGridEntityPointer (const GridImp* identityGrid, const HostGridEntityPointer& hostEntity_) : 00046 identityGrid_(identityGrid), 00047 virtualEntity_(identityGrid, hostEntity_) 00048 { 00049 } 00050 00052 IdentityGridEntityPointer (const IdentityGridEntity<codim,dim,GridImp>& entity) 00053 : identityGrid_(entity.identityGrid_), 00054 virtualEntity_(entity.identityGrid_, entity.hostEntity_) 00055 {} 00056 00058 bool equals(const IdentityGridEntityPointer<codim,GridImp>& i) const { 00059 return virtualEntity_.getTarget() == i.virtualEntity_.getTarget(); 00060 } 00061 00062 00064 Entity& dereference() const { 00065 return virtualEntity_; 00066 } 00067 00069 void compactify () { 00070 //virtualEntity_.getTarget().compactify(); 00071 } 00072 00074 int level () const { 00075 return virtualEntity_.level(); 00076 } 00077 00078 00079 protected: 00080 00081 const GridImp* identityGrid_; 00082 00084 mutable IdentityGridMakeableEntity<codim,dim,GridImp> virtualEntity_; 00085 00086 00087 }; 00088 00089 00090 } // end namespace Dune 00091 00092 #endif