OctTree is now a full template

This commit is contained in:
Guilhem Lavaux 2015-01-26 18:20:56 +01:00
parent 730185ff89
commit 29f991f0d4
3 changed files with 15 additions and 7 deletions

View File

@ -6,7 +6,6 @@ SET(CosmoTool_SRCS
load_data.cpp load_data.cpp
loadGadget.cpp loadGadget.cpp
loadRamses.cpp loadRamses.cpp
octTree.cpp
powerSpectrum.cpp powerSpectrum.cpp
miniargs.cpp miniargs.cpp
growthFactor.cpp growthFactor.cpp

View File

@ -186,4 +186,6 @@ namespace CosmoTool
}; };
#include "octTree.tcc"
#endif #endif

View File

@ -39,8 +39,9 @@ knowledge of the CeCILL license and that you accept its terms.
#include "config.hpp" #include "config.hpp"
#include "octTree.hpp" #include "octTree.hpp"
namespace CosmoTool {
using namespace std; using namespace std;
using namespace CosmoTool;
//#define VERBOSE //#define VERBOSE
@ -59,7 +60,8 @@ static uint32_t mypow(uint32_t i, uint32_t p)
return j*j*i; return j*j*i;
} }
OctTree::OctTree(const FCoordinates *particles, octPtr numParticles, template<typename Updater, typename T>
OctTree<Updater,T>::OctTree(const FCoordinates *particles, octPtr numParticles,
uint32_t maxMeanTreeDepth, uint32_t maxAbsoluteDepth, uint32_t maxMeanTreeDepth, uint32_t maxAbsoluteDepth,
uint32_t threshold) uint32_t threshold)
{ {
@ -94,7 +96,7 @@ OctTree::OctTree(const FCoordinates *particles, octPtr numParticles,
} }
cout << xMin[0] << " " << xMin[1] << " " << xMin[2] << " lNorm=" << lenNorm << endl; cout << xMin[0] << " " << xMin[1] << " " << xMin[2] << " lNorm=" << lenNorm << endl;
cells = new OctCell[numCells]; cells = new OctCell<T>[numCells];
Lbox = (float)(octCoordTypeNorm+1); Lbox = (float)(octCoordTypeNorm+1);
cells[0].numberLeaves = 0; cells[0].numberLeaves = 0;
@ -110,12 +112,14 @@ OctTree::OctTree(const FCoordinates *particles, octPtr numParticles,
//#endif //#endif
} }
OctTree::~OctTree() template<typename Updater, typename T>
OctTree<Updater,T>::~OctTree()
{ {
delete cells; delete cells;
} }
void OctTree::buildTree(uint32_t maxAbsoluteDepth) template<typename Updater, typename T>
void OctTree<Updater,T>::buildTree(uint32_t maxAbsoluteDepth)
{ {
for (octPtr i = 0; i < numParticles; i++) for (octPtr i = 0; i < numParticles; i++)
{ {
@ -129,7 +133,8 @@ void OctTree::buildTree(uint32_t maxAbsoluteDepth)
} }
void OctTree::insertParticle(octPtr node, template<typename Updater, typename T>
void OctTree<Updater,T>::insertParticle(octPtr node,
const OctCoords& icoord, const OctCoords& icoord,
octCoordType halfNodeLength, octCoordType halfNodeLength,
octPtr particleId, octPtr particleId,
@ -208,3 +213,5 @@ void OctTree::insertParticle(octPtr node,
cells[node].children[octPos] = newNode; cells[node].children[octPos] = newNode;
} }
};