ESyS-Particle  4.0.1
Packer.hpp
00001 
00002 //                                                         //
00003 // Copyright (c) 2003-2011 by The University of Queensland //
00004 // Earth Systems Science Computational Centre (ESSCC)      //
00005 // http://www.uq.edu.au/esscc                              //
00006 //                                                         //
00007 // Primary Business: Brisbane, Queensland, Australia       //
00008 // Licensed under the Open Software License version 3.0    //
00009 // http://www.opensource.org/licenses/osl-3.0.php          //
00010 //                                                         //
00012 
00013 
00014 namespace esys
00015 {
00016   namespace lsm
00017   {
00018     template <typename TmplParticleCollection>
00019     Packer<TmplParticleCollection>::Packer(NTablePtr nTablePtr)
00020       : m_nTablePtr(nTablePtr),
00021         m_particlePoolPtr(new ParticlePool),
00022         m_particleCollectionPtr(
00023           new ParticleCollection(m_particlePoolPtr)
00024         ),
00025         m_idSet()
00026     {
00027     }
00028 
00029     template <typename TmplParticleCollection>
00030     Packer<TmplParticleCollection>::Packer(
00031       ParticlePoolPtr particlePoolPtr,
00032       NTablePtr       nTablePtr
00033     )
00034       : m_nTablePtr(nTablePtr),
00035         m_particlePoolPtr(particlePoolPtr),
00036         m_particleCollectionPtr(
00037           new ParticleCollection(m_particlePoolPtr)
00038         ),
00039         m_idSet()
00040     {
00041     }
00042 
00043     template <typename TmplParticleCollection>
00044     Packer<TmplParticleCollection>::~Packer()
00045     {
00046     }
00047 
00048     template <typename TmplParticleCollection>
00049     void Packer<TmplParticleCollection>::setNTablePtr(NTablePtr nTablePtr)
00050     {
00051       m_nTablePtr = nTablePtr;
00052     }
00053 
00054     template <typename TmplParticleCollection>
00055     typename Packer<TmplParticleCollection>::NTable &Packer<TmplParticleCollection>::getNTable()
00056     {
00057       return *(m_nTablePtr);
00058     }
00059 
00060     template <typename TmplParticleCollection>
00061     const typename Packer<TmplParticleCollection>::NTable &
00062     Packer<TmplParticleCollection>::getNTable() const
00063     {
00064       return *m_nTablePtr;
00065     }
00066 
00067     template <typename TmplParticleCollection>
00068     typename Packer<TmplParticleCollection>::ParticlePool &
00069     Packer<TmplParticleCollection>::getParticlePool()
00070     {
00071       return *m_particlePoolPtr;
00072     }
00073 
00074     template <typename TmplParticleCollection>
00075     typename Packer<TmplParticleCollection>::ParticlePoolPtr
00076     Packer<TmplParticleCollection>::getParticlePoolPtr()
00077     {
00078       return m_particlePoolPtr;
00079     }
00080 
00081     template <typename TmplParticleCollection>
00082     const typename Packer<TmplParticleCollection>::ParticlePool &
00083     Packer<TmplParticleCollection>::getParticlePool() const
00084     {
00085       return *m_particlePoolPtr;
00086     }
00087 
00088     template <typename TmplParticleCollection>
00089     typename Packer<TmplParticleCollection>::ParticleCollection &
00090     Packer<TmplParticleCollection>::getParticleCollection()
00091     {
00092       return *m_particleCollectionPtr;
00093     }
00094 
00095     template <typename TmplParticleCollection>
00096     const typename Packer<TmplParticleCollection>::ParticleCollection &
00097     Packer<TmplParticleCollection>::getParticleCollection() const
00098     {
00099       return *m_particleCollectionPtr;
00100     }
00101 
00102     template <typename TmplParticleCollection>
00103     typename Packer<TmplParticleCollection>::Particle &
00104     Packer<TmplParticleCollection>::constructParticle(const Particle &particle)
00105     {
00106       return getParticleCollection().createParticle(particle);
00107     }
00108 
00109     template <typename TmplParticleCollection>
00110     typename Packer<TmplParticleCollection>::ParticleIterator
00111     Packer<TmplParticleCollection>::getParticleIterator()
00112     {
00113       return getParticleCollection().getParticleIterator();
00114     }
00115 
00116     template <typename TmplParticleCollection>
00117     typename Packer<TmplParticleCollection>::ParticleConstIterator
00118     Packer<TmplParticleCollection>::getParticleIterator() const
00119     {
00120       return getParticleCollection().getParticleIterator();
00121     }
00122 
00123     template <typename TmplParticleCollection>
00124     int
00125     Packer<TmplParticleCollection>::getNumParticles() const
00126     {
00127       return getParticleCollection().getNumParticles();
00128     }
00129 
00130     template <typename TmplParticleCollection>
00131     int Packer<TmplParticleCollection>::getNextParticleId()
00132     {
00133       return static_cast<int>(getNTable().getNumParticles());
00134     }
00135 
00136 
00137     template <typename TmplParticleCollection>
00138     typename Packer<TmplParticleCollection>::Particle &
00139     Packer<TmplParticleCollection>::createAndInsertParticle(
00140       const Particle &particle
00141     )
00142     {
00143       Particle *pParticle = &(constructParticle(particle));
00144       pParticle->setId(getNextParticleId());
00145       m_idSet.insert(pParticle->getId());
00146       getNTable().insert(pParticle);
00147       return *pParticle;
00148     }
00149 
00150     template <typename TmplParticleCollection>
00151     bool Packer<TmplParticleCollection>::contains(const Particle &particle) const
00152     {
00153       return (m_idSet.find(particle.getID()) != m_idSet.end());
00154     }
00155   }
00156 }