3#ifndef DUNE_PERSISTENTCONTAINERMAP_HH
4#define DUNE_PERSISTENTCONTAINERMAP_HH
9#include <dune/common/typetraits.hh>
10#include <dune/common/forloop.hh>
20 template<
class G,
class IdSet,
class Map >
26 template<
class reference,
class iterator >
35 typedef typename Map::mapped_type
Value;
36 typedef typename Map::size_type
Size;
50 template<
class Entity >
54 typename Map::const_iterator pos =
data_.find(
idSet().
id( entity ) );
55 assert( pos !=
data_.end() );
59 template<
class Entity >
63 typename Map::iterator pos =
data_.find(
idSet().
id( entity ) );
64 assert( pos !=
data_.end() );
68 template<
class Entity >
72 assert( pos !=
data_.end() );
76 template<
class Entity >
80 assert( pos !=
data_.end() );
88 return ForLoop< Resize, 0, Grid::dimension >::apply( *
this, 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); }
170 template<
class G,
class IdSet,
class Map >
171 template<
int codim >
178 container.template resize< codim >( value );
187 template<
class G,
class IdSet,
class Map >
194 template<
class G,
class IdSet,
class Map >
202 template<
class G,
class IdSet,
class Map >
209 template<
class G,
class IdSet,
class Map >
217 template<
class G,
class IdSet,
class Map >
218 template<
int codim >
221 std::integral_constant< bool, Capabilities::hasEntity< Grid, codim >::v > hasEntity;
222 assert( codim == codimension() );
229 const int maxLevel = grid().maxLevel();
230 for (
int level = 0; level <= maxLevel; ++level )
231 migrateLevel< codim >( level, value, data, hasEntity );
235 template<
class G,
class IdSet,
class Map >
236 template<
int codim >
239 std::integral_constant< bool, true > )
242 typedef typename LevelView::template Codim< codim >::Iterator LevelIterator;
244 const LevelView levelView = grid().levelGridView( level );
245 const LevelIterator end = levelView.template end< codim >();
246 for( LevelIterator it = levelView.template begin< codim >(); it != end; ++it )
247 migrateEntry( idSet().id( *it ), value, data, data_ );
251 template<
class G,
class IdSet,
class Map >
252 template<
int codim >
255 std::integral_constant< bool, false > )
258 typedef typename LevelView::template Codim< 0 >::Iterator LevelIterator;
260 const LevelView levelView = grid().levelGridView( level );
261 const LevelIterator end = levelView.template end< 0 >();
262 for( LevelIterator it = levelView.template begin< 0 >(); it != end; ++it )
264 const typename LevelIterator::Entity &entity = *it;
265 const int subEntities = entity.subEntities( codim );
266 for(
int i = 0; i < subEntities; ++i )
267 migrateEntry( idSet().subId( entity, i, codim ), value, data, data_ );
272 template<
class G,
class IdSet,
class Map >
275 Map &oldData, Map &newData )
278 const std::pair< typename Map::iterator, bool > inserted
279 = newData.insert( std::make_pair(
id, value ) );
282 if( inserted.second )
284 const typename Map::iterator pos = oldData.find(
id );
285 if( pos != oldData.end() )
287 inserted.first->second = pos->second;
288 oldData.erase( pos );
void swap(Dune::PersistentContainer< G, T > &a, Dune::PersistentContainer< G, T > &b)
Definition utility/persistentcontainer.hh:81
Include standard header files.
Definition agrid.hh:60
Wrapper class for entities.
Definition common/entity.hh:62
@ codimension
Know your own codimension.
Definition common/entity.hh:104
Id Set Interface.
Definition indexidset.hh:397
IdTypeImp IdType
Type used to represent an id.
Definition indexidset.hh:400
GridFamily::Traits::LevelGridView LevelGridView
type of view for level grid
Definition common/grid.hh:406
map-based implementation of the PersistentContainer
Definition persistentcontainermap.hh:22
void migrateLevel(int level, const Value &value, Map &data, std::integral_constant< bool, false >)
Definition persistentcontainermap.hh:254
void swap(This &other)
Definition persistentcontainermap.hh:95
void fill(const Value &value)
Definition persistentcontainermap.hh:93
G Grid
Definition persistentcontainermap.hh:33
void resize(const Value &value)
Definition persistentcontainermap.hh:219
IteratorWrapper< const Value, typename Map::const_iterator > ConstIterator
Definition persistentcontainermap.hh:38
int codim_
Definition persistentcontainermap.hh:131
const Grid * grid_
Definition persistentcontainermap.hh:130
const Value & operator[](const Entity &entity) const
Definition persistentcontainermap.hh:51
int codimension() const
Definition persistentcontainermap.hh:109
void resize(const Value &value=Value())
Definition persistentcontainermap.hh:86
const IdSet & idSet() const
Definition persistentcontainermap.hh:128
ConstIterator begin() const
Definition persistentcontainermap.hh:189
static void migrateEntry(const typename IdSet::IdType &id, const Value &value, Map &oldData, Map &newData)
Definition persistentcontainermap.hh:274
Map::mapped_type Value
Definition persistentcontainermap.hh:35
Iterator end()
Definition persistentcontainermap.hh:211
const Grid & grid() const
Definition persistentcontainermap.hh:112
const Value & operator()(const Entity &entity, int subEntity) const
Definition persistentcontainermap.hh:69
PersistentContainerMap(const Grid &grid, int codim, const IdSet &idSet, const Value &value)
Definition persistentcontainermap.hh:41
Iterator begin()
Definition persistentcontainermap.hh:196
Map::size_type Size
Definition persistentcontainermap.hh:36
ConstIterator end() const
Definition persistentcontainermap.hh:204
Map data_
Definition persistentcontainermap.hh:133
Size size() const
Definition persistentcontainermap.hh:84
IteratorWrapper< Value, typename Map::iterator > Iterator
Definition persistentcontainermap.hh:39
const IdSet * idSet_
Definition persistentcontainermap.hh:132
void migrateLevel(int level, const Value &value, Map &data, std::integral_constant< bool, true >)
Definition persistentcontainermap.hh:238
void shrinkToFit()
Definition persistentcontainermap.hh:91
Definition persistentcontainermap.hh:145
IteratorWrapper(const iterator &it)
Definition persistentcontainermap.hh:149
Definition persistentcontainermap.hh:173
static void apply(PersistentContainerMap< G, IdSet, Map > &container, const Value &value)
Definition persistentcontainermap.hh:174
A set of traits classes to store static information about grid implementation.