Skip to content
Snippets Groups Projects
BarnesHutTree.hpp 805 B
Newer Older
#ifndef BARNES_HUT_TREE_HPP
#define BARNES_HUT_TREE_HPP

#include "Tree.hpp"
#include "Box.hpp"
#include <pthread.h>
#include <stack>
	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);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void update();
		Control control;
	public:
		BarnesHutTree();
		virtual ~BarnesHutTree();
		virtual void build(vector<Body> bodies);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void build(vector<Body> bodies, Box domain);
		virtual void mergeLET(vector<Body> bodies);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual int numberOfChildren();