Skip to content
Snippets Groups Projects
adt2amas.cpp 3.89 KiB
#include "ad_tree.hpp"
#include "gate.hpp"
#include "and.hpp"
#include "or.hpp"
#include "sand.hpp"
#include "sor.hpp"
#include "nand.hpp"
#include "nor.hpp"
#include "snand.hpp"
#include "snor.hpp"

int main(){

	TreeNode* node_zero = new TreeNode();
	TreeNode* node_one = new TreeNode();
	TreeNode* node_two = new TreeNode();
	TreeNode* node_three = new TreeNode();
	TreeNode* node_four = new TreeNode();
	TreeNode* node_five = new TreeNode();
	TreeNode* node_six = new TreeNode();
	TreeNode* node_seven = new TreeNode();
	TreeNode* node_eight = new TreeNode();
	TreeNode* node_nine = new TreeNode();
	And* node_ten = new And();
	Or* node_eleven = new Or();
	Sand* node_twelve = new Sand();
	Sor* node_thirdteen = new Sor();
	Nand* node_fourteen = new Nand();
	Nor* node_fiveteen = new Nor();
	Snand* node_sixteen = new Snand();
	Snor* node_seventeen = new Snor();

	//ADtree tree;
	ADtree *tree = new ADtree(node_zero);
	/*Proof if you can add a child to parent which is not in the tree*/

	// Adding...
	cout << "Adding..." << endl;
	tree->add_child(node_one, node_zero);
	tree->add_child(node_two, node_zero);
	tree->add_child(node_three, node_zero);
	tree->add_child(node_four, node_zero);
	tree->add_child(node_five, node_zero);
	tree->add_parent(node_one, node_five);
	tree->add_child(node_six, node_five);
	tree->add_child(node_six, node_zero);
	tree->add_child_pos(node_seven, node_zero, 2);
	tree->add_parent(node_two, node_five);
	tree->add_parent_pos(node_four, node_five, 2);
	tree->add_child(node_five, node_five); // probably doesn't make sense
	tree->add_parent(node_zero, node_zero); // probably doesn't make sense */

	/* cout << node_zero->get_info() << endl;
	cout << node_one->get_info() << endl;
	cout << node_two->get_info() << endl;
	cout << node_three->get_info() << endl;
	cout << node_four->get_info() << endl;
	cout << node_five->get_info() << endl;
	cout << node_six->get_info() << endl;
	cout << node_seven->get_info() << endl;
	cout << node_eight->get_info() << endl;
	cout << node_nine->get_info() << endl; */
	cout << tree->get_info();
	cout << tree->ids_in_tree() << endl;


	// Removing...
	cout << "Removing ..." << endl;
	/* tree->remove_child(node_one, node_zero);
	tree->remove_child(node_two, node_zero);
	tree->remove_child(node_three, node_zero);
	tree->remove_child(node_four, node_zero);
	tree->remove_child(node_five, node_zero);
	tree->remove_child(node_six, node_zero);
	tree->remove_child(node_seven, node_zero); */

	/* tree->remove_parent_pos(0, node_five);
	tree->remove_parent_pos(2, node_five);
	tree->remove_parent_pos(1, node_five);
	tree->remove_parent_pos(0, node_five); */
	tree->remove_parent(node_zero, node_one);
	tree->remove_parent(node_zero, node_two);
	tree->remove_parent(node_zero, node_three);
	tree->remove_parent(node_zero, node_four);
	tree->remove_parent(node_zero, node_five);
	tree->remove_parent(node_zero, node_six);
	tree->remove_parent(node_zero, node_seven);
	
	//tree->remove_child_pos(0, node_nine);
	cout << tree->get_info();
	cout << tree->ids_in_tree() << endl;

	// Lineage printing...
	/* cout << "child associated ids of node one:" << endl;
	for (auto& i : node_zero->get_child_associated_ids()) // reference to The C++ Programming Language book, p. 899
		cout << i << ' ';
	std::cout << endl;
	set<int> tmp_set = node_zero->get_child_associated_ids();
	for(auto it = (tmp_set).cbegin() ; it != (tmp_set).cend() && *it != cur_child->get_id(); it++){
		std::cout << *it << ' ';
	} */
	tree->add_child(node_ten, node_zero);
	delete tree;
	cout << node_ten->get_info() << endl;
	cout << node_eleven->get_info() << endl;
	cout << node_twelve->get_info() << endl;
	cout << node_thirdteen->get_info() << endl;
	cout << node_fourteen->get_info() << endl;
	cout << node_fiveteen->get_info() << endl;
	cout << node_sixteen->get_info() << endl;
	cout << node_seventeen->get_info() << endl;
	/* NodeType nodeTest{NodeType::Attack};
	cout << "node type = " << to_string(nodeTest) << endl; */
	return 0;
}