3 #ifndef DUNE_PERSISTENTCONTAINERMAP_HH
4 #define DUNE_PERSISTENTCONTAINERMAP_HH
11 #include <dune/common/hybridutilities.hh>
12 #include <dune/common/typetraits.hh>
22 template<
class G,
class IdSet,
class Map >
28 template<
class reference,
class iterator >
34 typedef typename Map::mapped_type
Value;
35 typedef typename Map::size_type
Size;
49 template<
class Entity >
53 typename Map::const_iterator pos =
data_.find(
idSet().
id( entity ) );
54 assert( pos !=
data_.end() );
58 template<
class Entity >
62 typename Map::iterator pos =
data_.find(
idSet().
id( entity ) );
63 assert( pos !=
data_.end() );
67 template<
class Entity >
71 assert( pos !=
data_.end() );
75 template<
class Entity >
79 assert( pos !=
data_.end() );
87 Hybrid::forEach( std::make_index_sequence< Grid::dimension+1 >{},
88 [ & ](
auto i ){
if( i == this->
codimension() ) this->
template resize< i >( value ); } );
114 template<
int codim >
117 template<
int codim >
119 std::integral_constant< bool, true > );
121 template<
int codim >
123 std::integral_constant< bool, false > );
126 Map &oldData, Map &newData );
141 template<
class G,
class IdSet,
class Map >
142 template<
class value,
class iterator >
153 value &operator* () {
return it_->second; }
154 value *operator-> () {
return &(it_->second); }
171 template<
class G,
class IdSet,
class Map >
178 template<
class G,
class IdSet,
class Map >
186 template<
class G,
class IdSet,
class Map >
193 template<
class G,
class IdSet,
class Map >
201 template<
class G,
class IdSet,
class Map >
202 template<
int codim >
205 std::integral_constant< bool, Capabilities::hasEntityIterator< Grid, codim >::v > hasEntityIterator;
206 assert( codim == codimension() );
210 std::swap( data, data_ );
213 const int maxLevel = grid().maxLevel();
214 for (
int level = 0; level <= maxLevel; ++level )
215 migrateLevel< codim >( level, value, data, hasEntityIterator );
219 template<
class G,
class IdSet,
class Map >
220 template<
int codim >
223 std::integral_constant< bool, true > )
226 typedef typename LevelView::template Codim< codim >::Iterator LevelIterator;
228 const LevelView levelView = grid().levelGridView( level );
229 const LevelIterator end = levelView.template end< codim >();
230 for( LevelIterator it = levelView.template begin< codim >(); it != end; ++it )
231 migrateEntry( idSet().
id( *it ), value, data, data_ );
235 template<
class G,
class IdSet,
class Map >
236 template<
int codim >
239 std::integral_constant< bool, false > )
242 typedef typename LevelView::template Codim< 0 >::Iterator LevelIterator;
244 const LevelView levelView = grid().levelGridView( level );
245 const LevelIterator end = levelView.template end< 0 >();
246 for( LevelIterator it = levelView.template begin< 0 >(); it != end; ++it )
248 const typename LevelIterator::Entity &entity = *it;
249 const int subEntities = entity.subEntities( codim );
250 for(
int i = 0; i < subEntities; ++i )
251 migrateEntry( idSet().subId( entity, i, codim ), value, data, data_ );
256 template<
class G,
class IdSet,
class Map >
259 Map &oldData, Map &newData )
262 const std::pair< typename Map::iterator, bool > inserted
263 = newData.insert( std::make_pair(
id, value ) );
266 if( inserted.second )
268 const typename Map::iterator pos = oldData.find(
id );
269 if( pos != oldData.end() )
271 inserted.first->second = pos->second;
272 oldData.erase( pos );
Include standard header files.
Definition: agrid.hh:58
Wrapper class for entities.
Definition: common/entity.hh:64
@ codimension
Know your own codimension.
Definition: common/entity.hh:105
Id Set Interface.
Definition: indexidset.hh:450
IdTypeImp IdType
Type used to represent an id.
Definition: indexidset.hh:456
GridFamily::Traits::LevelGridView LevelGridView
type of view for level grid
Definition: common/grid.hh:405
map-based implementation of the PersistentContainer
Definition: persistentcontainermap.hh:24
void migrateLevel(int level, const Value &value, Map &data, std::integral_constant< bool, false >)
Definition: persistentcontainermap.hh:238
void swap(This &other)
Definition: persistentcontainermap.hh:95
void fill(const Value &value)
Definition: persistentcontainermap.hh:93
const Value & operator()(const Entity &entity, int subEntity) const
Definition: persistentcontainermap.hh:68
G Grid
Definition: persistentcontainermap.hh:29
void resize(const Value &value)
IteratorWrapper< const Value, typename Map::const_iterator > ConstIterator
Definition: persistentcontainermap.hh:37
int codim_
Definition: persistentcontainermap.hh:131
const Grid * grid_
Definition: persistentcontainermap.hh:130
int codimension() const
Definition: persistentcontainermap.hh:109
void resize(const Value &value=Value())
Definition: persistentcontainermap.hh:85
ConstIterator begin() const
Definition: persistentcontainermap.hh:173
static void migrateEntry(const typename IdSet::IdType &id, const Value &value, Map &oldData, Map &newData)
Definition: persistentcontainermap.hh:258
Map::mapped_type Value
Definition: persistentcontainermap.hh:34
Iterator end()
Definition: persistentcontainermap.hh:195
const Value & operator[](const Entity &entity) const
Definition: persistentcontainermap.hh:50
PersistentContainerMap(const Grid &grid, int codim, const IdSet &idSet, const Value &value)
Definition: persistentcontainermap.hh:40
Iterator begin()
Definition: persistentcontainermap.hh:180
Map::size_type Size
Definition: persistentcontainermap.hh:35
ConstIterator end() const
Definition: persistentcontainermap.hh:188
Map data_
Definition: persistentcontainermap.hh:133
Size size() const
Definition: persistentcontainermap.hh:83
const IdSet & idSet() const
Definition: persistentcontainermap.hh:128
IteratorWrapper< Value, typename Map::iterator > Iterator
Definition: persistentcontainermap.hh:38
const IdSet * idSet_
Definition: persistentcontainermap.hh:132
void migrateLevel(int level, const Value &value, Map &data, std::integral_constant< bool, true >)
Definition: persistentcontainermap.hh:222
const Grid & grid() const
Definition: persistentcontainermap.hh:112
void shrinkToFit()
Definition: persistentcontainermap.hh:91
Definition: persistentcontainermap.hh:145
IteratorWrapper(const iterator &it)
Definition: persistentcontainermap.hh:149
A set of traits classes to store static information about grid implementation.