dune-grid 2.10
Loading...
Searching...
No Matches
geometrygrid/indexsets.hh
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4// vi: set et ts=4 sw=2 sts=2:
5#ifndef DUNE_GEOGRID_INDEXSETS_HH
6#define DUNE_GEOGRID_INDEXSETS_HH
7
8#include <vector>
9
10#include <dune/common/typetraits.hh>
11
14
16
17namespace Dune
18{
19
20 namespace GeoGrid
21 {
22
23 // IndexSet
24 // --------
25
26 template< class Grid, class HostIndexSet >
28 : public Dune::IndexSet< Grid, IndexSet< Grid, HostIndexSet >, typename HostIndexSet::IndexType, typename HostIndexSet::Types >
29 {
32
33 typedef typename std::remove_const< Grid >::type::Traits Traits;
34
35 typedef typename Traits::HostGrid HostGrid;
36
37 public:
38 static const int dimension = Traits::dimension;
39
40 typedef typename Base::IndexType IndexType;
41
42 typedef typename Base::Types Types;
43
44 IndexSet () = default;
45
46 explicit IndexSet ( const HostIndexSet &hostIndexSet )
47 : hostIndexSet_( &hostIndexSet )
48 {}
49
50 // The index set contains a pointer to the host index set, so copying or assigning this can be dangerous.
51 IndexSet ( const This & ) = delete;
52 IndexSet ( This && ) = delete;
53
54 IndexSet &operator= ( const This & ) = delete;
55 IndexSet &operator= ( This && ) = delete;
56
57 using Base::index;
58 using Base::subIndex;
59
60 template< int cc >
61 IndexType index ( const typename Traits::template Codim< cc >::Entity &entity ) const
62 {
63 return entity.impl().index( hostIndexSet() );
64 }
65
66 template< int cc >
67 IndexType subIndex ( const typename Traits::template Codim< cc >::Entity &entity, int i, unsigned int codim ) const
68 {
69 return entity.impl().subIndex( hostIndexSet(), i, codim );
70 }
71
72 std::size_t size ( GeometryType type ) const
73 {
74 return hostIndexSet().size( type );
75 }
76
77 std::size_t size ( int codim ) const
78 {
79 return hostIndexSet().size( codim );
80 }
81
82 template< class Entity >
83 bool contains ( const Entity &entity ) const
84 {
85 return entity.impl().isContained( hostIndexSet() );
86 }
87
88 Types types ( int codim ) const { return hostIndexSet().types( codim ); }
89
90 explicit operator bool () const { return bool( hostIndexSet_ ); }
91
92 void reset () { hostIndexSet_ = nullptr; }
93 void reset ( const HostIndexSet &hostIndexSet ) { hostIndexSet_ = &hostIndexSet; }
94
95 private:
96 const HostIndexSet &hostIndexSet () const
97 {
98 assert( *this );
99 return *hostIndexSet_;
100 }
101
102 const HostIndexSet *hostIndexSet_ = nullptr;
103 };
104
105 } // namespace GeoGrid
106
107} // namespace Dune
108
109#endif // #ifndef DUNE_GEOGRID_INDEXSETS_HH
Include standard header files.
Definition agrid.hh:60
Index Set Interface base class.
Definition common/indexidset.hh:78
IndexType subIndex(const typename Traits::template Codim< cc >::Entity &e, int i, unsigned int codim) const
Map a subentity to an index.
Definition common/indexidset.hh:153
IndexType index(const typename Traits::template Codim< cc >::Entity &e) const
Map entity to index. The result of calling this method with an entity that is not in the index set is...
Definition common/indexidset.hh:113
Export the type of the entity used as parameter in the index(...) method.
Definition common/indexidset.hh:87
DUNE-conform implementation of the entity.
Definition geometrygrid/entity.hh:694
Definition geometrygrid/indexsets.hh:29
std::size_t size(GeometryType type) const
Definition geometrygrid/indexsets.hh:72
IndexSet & operator=(const This &)=delete
Types types(int codim) const
Definition geometrygrid/indexsets.hh:88
IndexSet(const This &)=delete
void reset(const HostIndexSet &hostIndexSet)
Definition geometrygrid/indexsets.hh:93
void reset()
Definition geometrygrid/indexsets.hh:92
static const int dimension
Definition geometrygrid/indexsets.hh:38
IndexType subIndex(const typename Traits::template Codim< cc >::Entity &entity, int i, unsigned int codim) const
Definition geometrygrid/indexsets.hh:67
IndexSet(This &&)=delete
bool contains(const Entity &entity) const
Definition geometrygrid/indexsets.hh:83
IndexSet(const HostIndexSet &hostIndexSet)
Definition geometrygrid/indexsets.hh:46
Base::Types Types
Definition geometrygrid/indexsets.hh:42
std::size_t size(int codim) const
Definition geometrygrid/indexsets.hh:77
Base::IndexType IndexType
Definition geometrygrid/indexsets.hh:40
IndexType index(const typename Traits::template Codim< cc >::Entity &entity) const
Definition geometrygrid/indexsets.hh:61
Provides base classes for index and id sets.