Newer
Older
#include <string>
#include <sstream>
}
Tree::~Tree() {
}
void Tree::clean() {
while (this->nodes->next != this->nodes) {
TreeNode* node = this->nodes->next;
node->unlink();
delete node;
this->nodes = new TreeNode(this);
}
bool Tree::isCorrect() {
TreeNode* current = this->nodes->next;
while (current != this->nodes) {
if (!current->isCorrect()) {
return false;
}
//TODO: fix
/*
if (current->next != this->nodes && current->next != current->afterSubtree) {
//inner node
int numChildren = 0;
for (TreeNode* child = current->next; child->afterSubtree != current->afterSubtree; child = child->afterSubtree) {
numChildren++;
if (!child->isCorrect()) {
return false;
}
}
if (dynamic_cast<BarnesHutTree*>(this) != NULL) {
if (numChildren != 8) {
return false;
}
}
}
*/
current = current->next;
}
return true;
vector<Body> Tree::dubinskiParse(string filename) {
vector<Body> result;
string line;
ifstream infile(filename.c_str(), ifstream::in);
double mass, px, py, pz, vx, vy, vz;
while (infile >> mass >> px >> py >> pz >> vx >> vy >> vz) {
Body b(px, py, pz, vx, vy, vz, mass);
result.push_back(b);
}