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;
}
//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;
unsigned long Tree::numberOfNodes() {
unsigned long nodes = 0;
for (TreeNode* node = this->nodes->next; node != this->nodes; node = node->next) {
nodes++;
}
return nodes;
}
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);
}