ESyS-Particle  2.3
ParticleCollection.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_LSMPARTICLECOLLECTION_H
14 #define ESYS_LSMPARTICLECOLLECTION_H
15 
16 #include "Foundation/BoundingBox.h"
17 #include "Foundation/StlIterator.h"
18 #include "Geometry/Vec3L.h"
19 
20 #include <boost/shared_ptr.hpp>
21 #include <boost/pool/object_pool.hpp>
22 
23 #include <vector>
24 #include <float.h>
25 
26 namespace esys
27 {
28  namespace lsm
29  {
33  template <typename TmplParticle>
35  {
36  public:
37  typedef TmplParticle Particle;
38  typedef boost::object_pool<Particle> ParticlePool;
39  typedef boost::shared_ptr<ParticlePool> ParticlePoolPtr;
40 
41  private:
42  typedef std::vector<Particle *> ParticleVector;
45 
46  public:
47 
48  class ParticleIterator : public VectorIterator
49  {
50  public:
51  typedef Particle& value_type;
52  ParticleIterator(const VectorIterator &it)
53  : VectorIterator(it)
54  {
55  }
56 
57  value_type next()
58  {
59  return *(VectorIterator::next());
60  }
61 
62  value_type current() const
63  {
64  return *(VectorIterator::current());
65  }
66  };
67 
68  class ParticleConstIterator : public VectorConstIterator
69  {
70  public:
71  typedef const Particle& value_type;
72  ParticleConstIterator(const VectorConstIterator &it)
73  : VectorConstIterator(it)
74  {
75  }
76 
77  ParticleConstIterator(const VectorIterator &it)
78  : VectorConstIterator(it)
79  {
80  }
81 
82  value_type next()
83  {
84  return *(VectorConstIterator::next());
85  }
86 
87  value_type current() const
88  {
89  return *(VectorConstIterator::current());
90  }
91  };
92 
94 
95  ParticleCollection(ParticlePoolPtr particlePoolPtr);
96 
98 
100 
101  virtual ~ParticleCollection();
102 
103  int getNumParticles() const;
104 
106 
108  {
110  }
111 
112  ParticleConstIterator getParticleIterator() const
113  {
114  return ParticleConstIterator(VectorConstIterator(m_particleVector));
115  }
116 
122  void translateBy(const Vec3 &vec);
123 
131  void rotate(const Vec3 &rotation, const Vec3 &posn);
132 
138  void incrementIdBy(typename Particle::Id idIncr);
139 
144  void insertRef(Particle &p);
145 
151  Particle &createParticle(const Particle &p);
152 
153  protected:
158  void noCheckInsertRef(Particle &p);
159 
160  private:
161  ParticlePoolPtr m_particlePoolPtr;
162  ParticleVector m_particleVector;
163  };
164  }
165 }
166 
168 
169 #endif
void translateBy(const Vec3 &vec)
Definition: ParticleCollection.hpp:104
Definition: ParticleCollection.h:68
virtual ~ParticleCollection()
Definition: ParticleCollection.hpp:93
void incrementIdBy(typename Particle::Id idIncr)
Definition: ParticleCollection.hpp:127
Definition: StlIterator.h:26
reference next()
Definition: StlIterator.h:112
Definition: vec3.h:46
reference current() const
Definition: StlIterator.h:53
boost::shared_ptr< ParticlePool > ParticlePoolPtr
Definition: ParticleCollection.h:39
Particle & value_type
Definition: ParticleCollection.h:51
ParticleVector m_particleVector
Definition: ParticleCollection.h:162
void insertRef(Particle &p)
Definition: ParticleCollection.hpp:67
Definition: CheckPointable.cpp:16
std::vector< Particle * > ParticleVector
Definition: ParticleCollection.h:42
reference next()
Definition: StlIterator.h:60
BoundingBox getParticleBBox() const
Definition: ParticleCollection.hpp:140
Particle & createParticle(const Particle &p)
Definition: ParticleCollection.hpp:85
ParticlePoolPtr m_particlePoolPtr
Definition: ParticleCollection.h:161
ForwardConstIterator< ParticleVector > VectorConstIterator
Definition: ParticleCollection.h:44
3D bounding box
Definition: BoundingBox.h:27
int getNumParticles() const
Definition: ParticleCollection.hpp:98
reference current() const
Definition: StlIterator.h:105
TmplParticle Particle
Definition: ParticleCollection.h:37
const Particle & value_type
Definition: ParticleCollection.h:71
value_type current() const
Definition: ParticleCollection.h:87
Definition: GeometryReader.h:40
ParticleCollection()
Definition: ParticleCollection.hpp:27
ParticleConstIterator(const VectorConstIterator &it)
Definition: ParticleCollection.h:72
Definition: StlIterator.h:29
value_type current() const
Definition: ParticleCollection.h:62
Definition: ParticleCollection.h:48
ParticleCollection & operator=(const ParticleCollection &p)
Definition: ParticleCollection.hpp:52
void noCheckInsertRef(Particle &p)
Definition: ParticleCollection.hpp:60
ParticleConstIterator getParticleIterator() const
Definition: ParticleCollection.h:112
value_type next()
Definition: ParticleCollection.h:57
value_type next()
Definition: ParticleCollection.h:82
void rotate(const Vec3 &rotation, const Vec3 &posn)
Definition: ParticleCollection.hpp:114
ParticleIterator(const VectorIterator &it)
Definition: ParticleCollection.h:52
boost::object_pool< Particle > ParticlePool
Definition: ParticleCollection.h:38
ParticleConstIterator(const VectorIterator &it)
Definition: ParticleCollection.h:77
ForwardIterator< ParticleVector > VectorIterator
Definition: ParticleCollection.h:43
ParticleIterator getParticleIterator()
Definition: ParticleCollection.h:107
Definition: ParticleCollection.h:34