dune-grid  2.2.1
vertexorderfactory.hh
Go to the documentation of this file.
1 // -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=8 sw=2 sts=2:
3 
4 #ifndef DUNE_GRID_UTILITY_VERTEXORDERFACTORY_HH
5 #define DUNE_GRID_UTILITY_VERTEXORDERFACTORY_HH
6 
7 #include <algorithm>
8 #include <cstddef>
9 #include <functional>
10 #include <vector>
11 
12 #include <dune/geometry/referenceelements.hh>
13 #include <dune/geometry/generalvertexorder.hh>
14 
15 namespace Dune {
16 
18 
29  template<class IdSet, class Index = std::size_t>
31  const IdSet& idset;
32 
33  public:
35  template<std::size_t dim>
36  struct VertexOrder {
38  typedef GeneralVertexOrder<dim, Index> type;
39  };
40 
42 
51  VertexOrderByIdFactory(const IdSet &idset_) : idset(idset_) { }
52 
54 
60  template<typename Element>
61  typename VertexOrder<Element::mydimension>::type
62  make(const Element &e) const {
63  typedef GenericReferenceElements<
64  typename Element::ctype,
65  Element::mydimension
66  > RefElems;
67  std::size_t size =
68  RefElems::general(e.type()).size(Element::mydimension);
69 
70  std::vector<typename IdSet::IdType> ids(size);
71  for(std::size_t i = 0; i < size; ++i)
72  ids[i] = idset.subId(e, i, Element::mydimension);
73  return GeneralVertexOrder<Element::mydimension, Index>
74  (e.type(), ids.begin(), ids.end());
75  }
76  };
77 
78 } // namespace Dune
79 
80 #endif // DUNE_GRID_UTILITY_VERTEXORDERFACTORY_HH