ESyS-Particle
4.0.1
|
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 }