14 #ifndef ESYS_LSMSPHERENEIGHBOURS_H
15 #define ESYS_LSMSPHERENEIGHBOURS_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 TmplSphere,
typename TmplIdPairVector>
39 typedef TmplSphere Sphere;
40 typedef TmplIdPairVector IdPairVector;
41 typedef typename IdPairVector::value_type IdPair;
46 bool operator()(
const IdPair &c1,
const IdPair &c2)
const
53 (c1.first == c2.first)
56 (c1.second < c2.second)
61 bool operator()(
const IdPair *c1,
const IdPair *c2)
const
63 return (*
this)(*c1, *c2);
67 typedef std::set<IdPair *,Cmp> IdPairSet;
68 typedef std::set<const IdPair *,Cmp> ConstIdPairSet;
69 typedef std::vector<Sphere *> SphereVector;
75 typedef typename NTable::BoolVector BoolVector;
80 const BoolVector &circDimensions = BoolVector(3,
false)
85 int getNumSpheres()
const;
87 int getNumIdPairs()
const;
89 double getMinRadius()
const;
91 double getMaxRadius()
const;
97 template<
typename TmplSphereIterator>
98 IdPairVector getNeighbours(TmplSphereIterator it);
105 typedef const IdPair& value_type;
106 typedef const IdPair& reference;
114 return *(IdPairConstIterator::next());
117 value_type current()
const
119 return *(IdPairConstIterator::current());
132 const IdPair &createIdPair(
const Sphere &p1,
const Sphere &p2);
135 typedef boost::shared_ptr<NTable> NTablePtr;
136 typedef boost::object_pool<IdPair> IdPairPool;
137 typedef boost::shared_ptr<IdPairPool> IdPairPoolPtr;
139 IdPairPoolPtr m_connectionPoolPtr;
140 IdPairSet m_connectionSet;
141 NTablePtr m_nTablePtr;
151 #include "Geometry/SphereNeighbours.hpp"