dune-grid-dev-howto  2.1.1
identitygridentitypointer.hh
Go to the documentation of this file.
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