Attention une mise à jour du service Gitlab va être effectuée le mardi 30 novembre entre 17h30 et 18h00. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes. Cette mise à jour intermédiaire en version 14.0.12 nous permettra de rapidement pouvoir mettre à votre disposition une version plus récente.

Commit 1389346c authored by berenger-bramas's avatar berenger-bramas
Browse files

Put FLightOctree into a separate file.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/scalfmm/scalfmm/trunk@202 2616d619-271b-44dc-8df4-d4a8f33a7222
parent bb1f3c5d
#ifndef FLIGHTOCTREE_HPP
#define FLIGHTOCTREE_HPP
/**
* @author Berenger Bramas (berenger.bramas@inria.fr)This class is a light octree
* It is just a linked list with 8 pointers per node
* it is used to store small data in an octree way.
*/
class FLightOctree {
// The node class
class Node {
Node* next[8]; // Child
const void* data; // Data in this cell
public:
Node(){
memset(next, 0, sizeof(Node*)*8);
}
virtual ~Node(){
for(int idxNext = 0 ; idxNext < 8 ; ++idxNext){
delete next[idxNext];
}
}
void insert(const MortonIndex& index, const void* const cell, const int level){
if(level){
const int host = (index >> (3 * (level-1))) & 0x07;
if(!next[host]){
next[host] = new Node();
}
next[host]->insert(index, cell, level - 1);
}
else{
data = cell;
}
}
const void* getCell(const MortonIndex& index, const int level) const {
if(level){
const int host = (index >> (3 * (level-1))) & 0x07;
if(next[host]){
return next[host]->getCell(index, level - 1);
}
return 0;
}
else{
return data;
}
}
};
// Tree root
Node root;
public:
FLightOctree(){
}
// Insert a cell
void insertCell(const MortonIndex& index, const void* const cell, const int level){
root.insert(index, cell, level);
}
// Retreive a cell
const void* getCell(const MortonIndex& index, const int level) const{
return root.getCell(index, level);
}
};
#endif // FLIGHTOCTREE_HPP
......@@ -536,6 +536,7 @@ public:
}
} while(hasToBeReceivedFromLeft);
}
if(iWillReceiveFromRight){
do{
while(arrayIdxRight < sizeOfRightData){
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment