ESyS-Particle  2.3
GrainCollection.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef ESYS_LSMGRAINCOLLECTION_H
14 #define ESYS_LSMGRAINCOLLECTION_H
15 
16 #include "Foundation/StlIterator.h"
17 #include <boost/shared_ptr.hpp>
18 #include <boost/pool/object_pool.hpp>
19 
20 #include <vector>
21 
22 namespace esys
23 {
24  namespace lsm
25  {
29  template <typename TmplGrain>
31  {
32  public:
33  typedef TmplGrain Grain;
34  typedef typename Grain::Particle Particle;
40  typedef boost::object_pool<Grain> GrainPool;
41  typedef boost::shared_ptr<GrainPool> GrainPoolPtr;
42  typedef std::vector<Grain *> GrainVector;
43 
44  protected:
47 
48  public:
49 
50  class GrainIterator : public VectorIterator
51  {
52  public:
53  typedef Grain& value_type;
54  GrainIterator(const VectorIterator &it)
55  : VectorIterator(it)
56  {
57  }
58 
59  value_type next()
60  {
61  return *(VectorIterator::next());
62  }
63 
64  value_type current() const
65  {
66  return *(VectorIterator::current());
67  }
68  };
69 
70  class GrainConstIterator : public VectorConstIterator
71  {
72  public:
73  typedef const Grain& value_type;
74  GrainConstIterator (const VectorConstIterator &it)
75  : VectorConstIterator(it)
76  {
77  }
78 
79  GrainConstIterator (const VectorIterator &it)
80  : VectorConstIterator(it)
81  {
82  }
83 
84  value_type next()
85  {
86  return *(VectorConstIterator::next());
87  }
88 
89  value_type current() const
90  {
91  return *(VectorConstIterator::current());
92  }
93  };
94 
96 
97  GrainCollection(ParticlePoolPtr particlePoolPtr);
98 
99  GrainCollection(ParticlePoolPtr particlePoolPtr, GrainPoolPtr grainPoolPtr);
100 
101  virtual ~GrainCollection();
102 
106  int getNumGrains() const;
107 
112  int getNumParticles() const;
113 
121  void insertRef(Grain &g);
122 
127  Grain &createGrain();
128 
134  Grain &createGrain(typename Grain::Id id);
135 
141  Grain &createGrain(const Grain &g);
142 
143  GrainIterator getGrainIterator();
144 
145  GrainConstIterator getGrainIterator() const;
146 
147  protected:
148  ParticlePoolPtr getParticlePoolPtr();
149 
150  GrainPoolPtr getGrainPoolPtr();
151 
152  private:
153  ParticlePoolPtr m_particlePoolPtr;
154  GrainPoolPtr m_grainPoolPtr;
155  GrainVector m_grainVector;
156  };
157  }
158 }
159 
161 
162 #endif
ParticleCollection::ParticleConstIterator ParticleConstIterator
Definition: GrainCollection.h:39
Definition: GrainCollection.h:70
Definition: ParticleCollection.h:68
Grain::ParticleCollection ParticleCollection
Definition: GrainCollection.h:35
ParticleCollection::ParticlePool ParticlePool
Definition: GrainCollection.h:36
Definition: GrainCollection.h:30
Definition: StlIterator.h:26
reference next()
Definition: StlIterator.h:112
value_type current() const
Definition: GrainCollection.h:64
Grain & value_type
Definition: GrainCollection.h:53
reference current() const
Definition: StlIterator.h:53
GrainCollection()
Definition: GrainCollection.hpp:26
GrainVector m_grainVector
Definition: GrainCollection.h:155
Definition: GrainCollection.h:50
value_type next()
Definition: GrainCollection.h:84
GrainIterator(const VectorIterator &it)
Definition: GrainCollection.h:54
boost::shared_ptr< ParticlePool > ParticlePoolPtr
Definition: ParticleCollection.h:39
GrainIterator getGrainIterator()
Definition: GrainCollection.hpp:140
Grain & createGrain()
Definition: GrainCollection.hpp:113
value_type next()
Definition: GrainCollection.h:59
GrainPoolPtr getGrainPoolPtr()
Definition: GrainCollection.hpp:63
value_type current() const
Definition: GrainCollection.h:89
int getNumGrains() const
Definition: GrainCollection.hpp:74
Definition: SimpleSpherePy.h:24
Definition: CheckPointable.cpp:16
ForwardConstIterator< GrainVector > VectorConstIterator
Definition: GrainCollection.h:46
reference next()
Definition: StlIterator.h:60
boost::shared_ptr< GrainPool > GrainPoolPtr
Definition: GrainCollection.h:41
ParticleCollection::ParticleIterator ParticleIterator
Definition: GrainCollection.h:38
reference current() const
Definition: StlIterator.h:105
ParticleCollection::ParticlePoolPtr ParticlePoolPtr
Definition: GrainCollection.h:37
virtual ~GrainCollection()
Definition: GrainCollection.hpp:69
boost::object_pool< Grain > GrainPool
Definition: GrainCollection.h:40
Grain::Particle Particle
Definition: GrainCollection.h:34
int getNumParticles() const
Definition: GrainCollection.hpp:80
long Id
Definition: Grain.h:36
std::vector< Grain * > GrainVector
Definition: GrainCollection.h:42
GrainConstIterator(const VectorIterator &it)
Definition: GrainCollection.h:79
Definition: StlIterator.h:29
ParticlePoolPtr getParticlePoolPtr()
Definition: GrainCollection.hpp:56
Definition: ParticleCollection.h:48
TmplGrain Grain
Definition: GrainCollection.h:33
ParticlePoolPtr m_particlePoolPtr
Definition: GrainCollection.h:153
ForwardIterator< GrainVector > VectorIterator
Definition: GrainCollection.h:45
boost::object_pool< Particle > ParticlePool
Definition: ParticleCollection.h:38
GrainConstIterator(const VectorConstIterator &it)
Definition: GrainCollection.h:74
const Grain & value_type
Definition: GrainCollection.h:73
void insertRef(Grain &g)
Definition: GrainCollection.hpp:95
GrainPoolPtr m_grainPoolPtr
Definition: GrainCollection.h:154