DUNE-FEM (unstable)

persistentcontainervector.hh
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_PERSISTENTCONTAINERVECTOR_HH
6#define DUNE_PERSISTENTCONTAINERVECTOR_HH
7
8#include <algorithm>
9#include <cassert>
10
11namespace Dune
12{
13
14 // PersistentContainerVector
15 // -------------------------
16
49 template< class G, class IndexSet, class Vector >
51 {
53
54 public:
55 typedef G Grid;
56
57 typedef typename Vector::value_type Value;
58 typedef typename Vector::size_type Size;
59 typedef typename Vector::const_iterator ConstIterator;
60 typedef typename Vector::iterator Iterator;
61
62 typedef typename Vector::allocator_type Allocator;
63
64 PersistentContainerVector ( const IndexSet &indexSet, int codim, const Value &value,
65 const Allocator &allocator = Allocator() )
66 : codim_( codim ),
67 indexSet_( &indexSet ),
68 data_( indexSet.size( codim ), value, allocator )
69 {}
70
71 template< class Entity >
72 const Value &operator[] ( const Entity &entity ) const
73 {
74 assert( Entity::codimension == codimension() );
75 const Size index = indexSet().index( entity );
76 assert( index < data_.size() );
77 return data_[ index ];
78 }
79
80 template< class Entity >
81 Value &operator[] ( const Entity &entity )
82 {
83 assert( Entity::codimension == codimension() );
84 const Size index = indexSet().index( entity );
85 assert( index < data_.size() );
86 return data_[ index ];
87 }
88
89 template< class Entity >
90 const Value &operator() ( const Entity &entity, int subEntity ) const
91 {
92 const Size index = indexSet().subIndex( entity, subEntity, codimension() );
93 assert( index < data_.size() );
94 return data_[ index ];
95 }
96
97 template< class Entity >
98 Value &operator() ( const Entity &entity, int subEntity )
99 {
100 const Size index = indexSet().subIndex( entity, subEntity, codimension() );
101 assert( index < data_.size() );
102 return data_[ index ];
103 }
104
105 Size size () const { return data_.size(); }
106
107 void resize ( const Value &value = Value() )
108 {
109 const Size indexSetSize = indexSet().size( codimension() );
110 data_.resize( indexSetSize, value );
111 }
112
113 void shrinkToFit () {}
114
115 void fill ( const Value &value ) { std::fill( begin(), end(), value ); }
116
117 void swap ( This &other )
118 {
119 std::swap( codim_, other.codim_ );
120 std::swap( indexSet_, other.indexSet_ );
121 std::swap( data_, other.data_ );
122 }
123
124 ConstIterator begin () const { return data_.begin(); }
125 Iterator begin () { return data_.begin(); }
126
127 ConstIterator end () const { return data_.end(); }
128 Iterator end () { return data_.end(); }
129
130 int codimension () const { return codim_; }
131
132 protected:
133 const IndexSet &indexSet () const { return *indexSet_; }
134
135 int codim_;
136 const IndexSet *indexSet_;
137 Vector data_;
138 };
139
140} // namespace Dune
141
142#endif // #ifndef DUNE_PERSISTENTCONTAINERVECTOR_HH
Wrapper class for entities.
Definition: entity.hh:66
static constexpr int codimension
Know your own codimension.
Definition: entity.hh:106
Index Set Interface base class.
Definition: indexidset.hh:78
auto size(GeometryType type) const
Return total number of entities of given geometry type in entity set .
Definition: indexidset.hh:223
IndexType subIndex(const typename Traits::template Codim< cc >::Entity &e, int i, unsigned int codim) const
Map a subentity to an index.
Definition: 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: indexidset.hh:113
vector-based implementation of the PersistentContainer
Definition: persistentcontainervector.hh:51
Dune namespace.
Definition: alignedallocator.hh:13
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 12, 23:30, 2024)