1 #ifndef DUNE_POLYGONGRID_SUBENTITY_HH 2 #define DUNE_POLYGONGRID_SUBENTITY_HH 3 4 #include <cassert> 5 6 #include <dune/geometry/dimension.hh> 7 8 #include <dune/polygongrid/meshobjects.hh> 9 10 namespace Dune 11 { 12 13 namespace __PolygonGrid 14 { 15 16 // numSubEntities 17 // -------------- 18 19 template< class Item > numSubEntities(Item item,Dune::Codim<0>)20 inline static std::size_t numSubEntities ( Item item, Dune::Codim< 0 > ) noexcept 21 { 22 return 1u; 23 } 24 25 template< class ct > numSubEntities(Node<ct> cell,Dune::Codim<1>)26 inline static std::size_t numSubEntities ( Node< ct > cell, Dune::Codim< 1 > ) noexcept 27 { 28 return cell.halfEdges().size(); 29 } 30 31 template< class ct > numSubEntities(Node<ct> cell,Dune::Codim<2>)32 inline static std::size_t numSubEntities ( Node< ct > cell, Dune::Codim< 2 > ) noexcept 33 { 34 return cell.halfEdges().size(); 35 } 36 37 template< class ct > numSubEntities(HalfEdge<ct> halfEdge,Dune::Codim<1>)38 inline static std::size_t numSubEntities ( HalfEdge< ct > halfEdge, Dune::Codim< 1 > ) noexcept 39 { 40 return 2u; 41 } 42 43 44 45 // subEntity 46 // --------- 47 48 template< class Item > subEntity(Item item,Dune::Codim<0>,std::size_t i)49 inline static Item subEntity ( Item item, Dune::Codim< 0 >, std::size_t i ) noexcept 50 { 51 assert( i == 0u ); 52 return item; 53 } 54 55 template< class ct > subEntity(Node<ct> cell,Dune::Codim<1>,std::size_t i)56 inline static HalfEdge< ct > subEntity ( Node< ct > cell, Dune::Codim< 1 >, std::size_t i ) noexcept 57 { 58 assert( i < cell.halfEdges().size() ); 59 return cell.halfEdges().begin()[ i ]; 60 } 61 62 template< class ct > subEntity(Node<ct> cell,Dune::Codim<2>,std::size_t i)63 inline static Node< ct > subEntity ( Node< ct > cell, Dune::Codim< 2 >, std::size_t i ) noexcept 64 { 65 assert( i < cell.halfEdges().size() ); 66 return cell.halfEdges().begin()[ i ].target(); 67 } 68 69 template< class ct > subEntity(HalfEdge<ct> halfEdge,Dune::Codim<1>,std::size_t i)70 inline static Node< ct > subEntity ( HalfEdge< ct > halfEdge, Dune::Codim< 1 >, std::size_t i ) noexcept 71 { 72 assert( i < 2u ); 73 return (i == 1u ? halfEdge.target() : halfEdge.flip().target()); 74 } 75 76 } // namespace __PolygonGrid 77 78 } // namespace Dune 79 80 81 #endif // #ifndef DUNE_POLYGONGRID_SUBENTITY_HH 82