#ifndef BARNES_HUT_TREE_HPP #define BARNES_HUT_TREE_HPP #include "Tree.hpp" #include "Box.hpp" #include <pthread.h> #include <stack> namespace nbody { using namespace std; class Node; class BarnesHutTree; typedef struct _Control { unsigned int maxLeafBodies; BarnesHutTree* tree; int processedNodes; stack<Node*> toProcess; pthread_rwlock_t lock; } Control; class BarnesHutTree : public Tree { protected: virtual vector<Box> splitBB(Node* node); virtual void splitNode(Node* current); virtual void update(); Control control; public: BarnesHutTree(); virtual ~BarnesHutTree(); virtual void build(vector<Body> bodies); virtual void build(vector<Body> bodies, Box domain); virtual void mergeLET(vector<Body> bodies); virtual int numberOfChildren(); }; } #endif