Skip to content
Snippets Groups Projects
TreeNode.hpp 971 B
Newer Older
#ifndef TREE_NODE_HPP
#define TREE_NODE_HPP

#include "Body.hpp"
#include "Box.hpp"
#include "Tree.hpp"
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
#include "BarnesHutTree.hpp"
#include <cstdlib>
#include <vector>

namespace nbody {
	using namespace std;

	class TreeNode {
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		friend void Tree::clean();
		friend void BarnesHutTree::build(vector<Body> bodies);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		friend bool Tree::isCorrect();
		friend unsigned long Tree::numberOfNodes();
	protected:
		Box bb;
		vector<Body> bodies;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		TreeNode* prev;
		TreeNode* next;
		TreeNode* afterSubtree;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		bool leaf;
		Tree* tree;
		Body representative;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		TreeNode(Tree* tree);
		virtual ~TreeNode();
		virtual bool isSplitable();
		virtual void extendBBforBodies();
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void extendBBtoCube();
		virtual vector<Body> getBodies();
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void insertBefore(TreeNode* node);
		virtual void insertAfter(TreeNode* node);
		virtual void unlink();
		virtual void update();
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual bool isCorrect();
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void print();