#include "TreeNode.h"

TreeNode::TreeNode(string name,string value,vector<TreeNode *> * childVec) {
	init(name,value,childVec);
}
TreeNode::TreeNode(string name,string value) {
	init(name,value,NULL);
}
TreeNode::TreeNode() {
	init("","",NULL);
}
void TreeNode::init(string names,string values,vector<TreeNode*> * vecChild) {
	name = string(names);
	value = string(values);
	if (vecChild==NULL) {
		children = new vector<TreeNode *>();
	} else {
		children = vecChild;
	}
}
TreeNode::~TreeNode() {
	vector<TreeNode*>::iterator iter;
	for (iter = children->begin(); iter < children->end(); iter++) {
		delete *iter;
	}
	delete children;
}
TreeNode * TreeNode::getChild(const string & name) { //throws an exception if child not found!
						//Easier than NULL pointers!
	vector<TreeNode*>::iterator iter;
	if (children!=NULL) {
		for (iter = children->begin(); iter < children->end(); iter++) {
			if ((*iter)->getName() == name) {
				return (*iter);
			}
		}
	}
	throw new string("Child Not Found!");
}
bool TreeNode::existChild(const string & name) { 
	vector<TreeNode*>::iterator iter;
	if (children!=NULL) {
		for (iter = children->begin(); iter < children->end(); iter++) {
			if ((*iter)->getName() == name) {
				return true;
			}
		}
	}
	return false;
}
vector<TreeNode*> * TreeNode::getChildren() {
	return children;
}
string TreeNode::getName() { return name; }
string TreeNode::getValue() { return value; }

