14 #ifndef ESYS_LSMDISTCONNECTIONS_H
15 #define ESYS_LSMDISTCONNECTIONS_H
17 #include "Geometry/CircularNeighbourTable.h"
18 #include "Geometry/BasicInteraction.h"
20 #include <boost/shared_ptr.hpp>
21 #include <boost/pool/object_pool.hpp>
34 template <
typename TmplParticle,
typename TmplConnection>
38 typedef TmplParticle Particle;
39 typedef TmplConnection Connection;
45 bool operator()(
const Connection &c1,
const Connection &c2)
const
49 (c1.first() < c2.first())
52 (c1.first() == c2.first())
55 (c1.second() < c2.second())
58 (c1.second() == c2.second())
60 (c1.getTag() < c2.getTag())
66 bool operator()(
const Connection *c1,
const Connection *c2)
const
68 return (*
this)(*c1, *c2);
72 typedef std::set<Connection *,Cmp> ConnectionSet;
73 typedef std::vector<Particle *> ParticleVector;
79 typedef typename NTable::BoolVector BoolVector;
85 const BoolVector &circDimensions = BoolVector(3,
false)
90 int getNumParticles()
const;
92 int getNumConnections()
const;
94 double getMinRadius()
const;
96 double getMaxRadius()
const;
102 template<
typename TmplParticleIterator>
103 void create(TmplParticleIterator it);
105 template<
typename TmplParticleIterator>
106 void create(TmplParticleIterator it, Tag tag);
108 Tag getDefaultTag()
const;
109 void setDefaultTag(Tag defaultTag);
116 typedef const Connection& value_type;
117 typedef const Connection& reference;
125 return *(ConnectionConstIterator::next());
128 value_type current()
const
130 return *(ConnectionConstIterator::current());
141 void insert(Particle &p);
143 void createConnection(
const Particle &p1,
const Particle &p2, Tag tag);
146 typedef boost::shared_ptr<NTable> NTablePtr;
147 typedef boost::object_pool<Connection> ConnectionPool;
148 typedef boost::shared_ptr<ConnectionPool> ConnectionPoolPtr;
150 ConnectionPoolPtr m_connectionPoolPtr;
151 ConnectionSet m_connectionSet;
152 NTablePtr m_nTablePtr;
163 #include "Geometry/DistConnections.hpp"