5#ifndef DUNE_GRID_CONCEPTS_INDEX_SET_HH
6#define DUNE_GRID_CONCEPTS_INDEX_SET_HH
11#include <dune/common/indices.hh>
12#include <dune/common/concepts/container.hh>
13#include <dune/common/concepts/hashable.hh>
14#include <dune/geometry/type.hh>
20 template<
class IS,
int codim>
21 concept IndexSetEntityCodim = Entity<typename IS::template Codim<codim>::Entity> &&
22 requires(
const IS is,
int i,
unsigned int cc,
const typename IS::template Codim<codim>::Entity& entity)
24 { is.template index<codim>(entity) } -> std::same_as<typename IS::IndexType>;
25 { is.index(entity) } -> std::same_as<typename IS::IndexType>;
26 { is.template subIndex<codim>(entity,i,cc) } -> std::same_as<typename IS::IndexType>;
27 { is.subIndex(entity,i,cc) } -> std::same_as<typename IS::IndexType>;
28 { is.contains(entity) } -> std::convertible_to<bool>;
31 template<
class IS, std::size_t... c>
32 void indexSetEntityAllCodims(std::integer_sequence<std::size_t,c...>)
33 requires (IndexSetEntityCodim<IS,int(c)> &&...);
44concept IndexSet =
requires(
const IS is, Dune::GeometryType type,
int codim)
46 { IS::dimension } -> std::convertible_to<int>;
48 requires RandomAccessContainer<typename IS::Types>;
49 { is.types(codim) } -> std::same_as<typename IS::Types>;
51 requires std::integral<typename IS::IndexType>;
52 { is.size(type) } -> std::convertible_to<typename IS::IndexType>;
53 { is.size(codim) } -> std::convertible_to<typename IS::IndexType>;
55Impl::IndexSetEntityCodim<IS,0> &&
56requires (index_constant<1> from, index_constant<IS::dimension+1> to) {
57 Impl::indexSetEntityAllCodims<IS>(range(from, to).to_integer_sequence());
62 template<
class IS,
int codim>
64 requires(
const IS is,
const typename IS::template Codim<codim>::Entity& entity)
66 { is.template id<codim>(entity) } -> std::same_as<typename IS::IdType>;
67 { is.id(entity) } -> std::same_as<typename IS::IdType>;
70 template<
class IS, std::size_t... c>
71 void idSetEntityAllCodims(std::integer_sequence<std::size_t,c...>)
72 requires (IdSetEntityCodim<IS,int(c)> &&...);
83concept IdSet =
requires(
const IS is,
const typename IS::template Codim<0>::Entity& entity,
int i,
unsigned int cc)
85 requires Hashable<typename IS::IdType>;
86 requires std::totally_ordered<typename IS::IdType>;
87 { is.subId(entity,i,cc) } -> std::same_as<typename IS::IdType>;
89Impl::IdSetEntityCodim<IS,0> &&
90requires (index_constant<1> from, index_constant<IS::dimension+1> to) {
91 Impl::idSetEntityAllCodims<IS>(range(from, to).to_integer_sequence());
Definition concepts/datahandle.hh:14
Wrapper class for entities.
Definition common/entity.hh:66
Model of an index set.
Definition concepts/indexidset.hh:44
Model of an id set.
Definition concepts/indexidset.hh:83