Tests separated and cleanups done and cleanups done
diff --git a/ConcDCT.h b/ConcDCT.h
index 84ae605..59a4e34 100644
--- a/ConcDCT.h
+++ b/ConcDCT.h
@@ -25,10 +25,7 @@
 
 	void copy_pointer_val(ConcertedDef *copy_val1)
 	{
-		//dct_node *val = (dct_node*)val1;
 		dct_node *copy_val = (dct_node*)copy_val1;
-
-		cout<<"In dct_node copy_pointer_val"<<endl;
 		*this = *copy_val;
 	}
 
@@ -195,12 +192,10 @@
 		if (locksTaken == 0)
 		{
 			read_lock_val->GetLock();
-			//cout<<"Taken read lock1"<<endl;
 		}
 
 		if (parent_pointer == NULL)
 		{
-			//cout<<"parent pointer is NULL"<<endl;
 			return NULL;
 		}
 
@@ -208,24 +203,12 @@
 		if (locksTaken == 0)
 		{
 			read_lock_val->ReleaseLock();
-			//cout<<"Released read lock1"<<endl;
 		}
 
 		traverse = head;
 
-		if ((parent_pointer->get_child_pointer()) == NULL)
-		{
-			cout<<"child pointer is NULL search node"<<endl;
-		}
-		else
-		{
-			cout<<"child pointer is not NULL search node"<<" "<<(parent_pointer->get_child_pointer()->getval())<<endl;
-		}
-
 		while (traverse != NULL)
 		{
-
-			cout<<"In loop"<<endl;
 			write_lock_val = traverse->getwrite_lock_val();
 			read_lock_val = traverse->getread_lock_val();
 
@@ -236,7 +219,6 @@
 			if (locksTaken == 0)
 			{
 				read_lock_val->GetLock();
-				//cout<<"Taken read lock2"<<endl;
 			}
 
 			if ((traverse->getval()) == val)
@@ -244,15 +226,10 @@
 				cout<<"value found search"<<" "<<traverse->getval()<<" "<<val<<endl;
 				return traverse;
 			}
-			else
-			{
-				cout<<"value not found search2"<<" "<<traverse->getval()<<endl;
-			}
 
 			if (locksTaken == 0)
 			{
 				read_lock_val->ReleaseLock();
-				//cout<<"Released read lock2"<<endl;
 			}
 
 			traverse = traverse->getnext();
@@ -336,7 +313,6 @@
 			write_lock_val = traverse->getwrite_lock_val();
 			read_lock_val = traverse->getread_lock_val();
 			transact_val1.add_lock(write_lock_val);
-			cout<<"lock value insert1"<<" "<<write_lock_val<<endl;
 
 			while ((read_lock_val->CheckLockIsAcquired()) == 1)
 			{
@@ -347,14 +323,6 @@
 				cout<<"write lock not taken"<<endl;
 				throw -1;
 			}
-			else
-			{
-				cout<<"write lock taken"<<endl;
-			}
-
-			//throw -1;
-
-			//cout<<"Write lock taken2"<<endl;
 
 			temp_return = search_node(val_array[i], traverse,1);
 			if (temp_return == NULL)
@@ -365,46 +333,16 @@
 				traverse->insert(temp);
 				write_lock_val->ReleaseLock();
 				transact_val1.delete_lock(write_lock_val);
-				if ((traverse->get_child_pointer()) == NULL)
-				{
-					cout<<"child pointer is NULL insert"<<endl;
-				}
-				else
-				{
-					cout<<"child pointer is not NULL insert"<<" "<<((traverse->get_child_pointer()->getval()))<<endl;
-				}
-				//cout<<"Write lock released2"<<endl;
 				traverse = temp;
-				cout<<"value inserted1"<<" "<<val_array[i]<<endl;
 			}
 			else
 			{
 				write_lock_val->ReleaseLock();
 				transact_val1.delete_lock(write_lock_val);
-				if ((traverse->get_child_pointer()) == NULL)
-				{
-					cout<<"child pointer is NULL insert2"<<endl;
-				}
-				else
-				{
-					cout<<"child pointer is not NULL insert2"<<" "<<((traverse->get_child_pointer())->getval())<<endl;
-				}
-				//cout<<"Write lock released3"<<endl;
+
 				traverse = temp_return;
-				cout<<"value inserted2"<<" "<<val_array[i]<<endl;
 			}
 
-			cout<<"val is insert"<<" "<<dummy2<<" "<<dummy<<endl;
-			//transact_val1.commit_transaction();
-		}
-
-		if (search_node(val_array[0], dummy, 1))
-		{
-			cout<<"0 value found after insertion"<<endl;
-		}
-		else
-		{
-			cout<<"0 value not found after insertion"<<endl;
 		}
 
 	}
diff --git a/ConcDCT.h~ b/ConcDCT.h~
new file mode 100644
index 0000000..e2dbe88
--- /dev/null
+++ b/ConcDCT.h~
@@ -0,0 +1,352 @@
+#include <iostream>
+#include "TransactionManager.h"
+using namespace std;
+
+class dct_node:public ConcertedDef
+{
+	int value;
+	int level;
+	int current_insertion_index;
+	dct_node *child_pointer;
+	dct_node *next;
+	QueueLock *read_lock_val;
+	QueueLock *write_lock_val;
+public:
+	dct_node()
+	{
+		value = 0;
+		level = 0;
+		current_insertion_index = 0;
+		child_pointer = NULL;
+		next = NULL;
+		read_lock_val = new QueueLock;
+		write_lock_val = new QueueLock;
+	}
+
+	void copy_pointer_val(ConcertedDef *copy_val1)
+	{
+		dct_node *copy_val = (dct_node*)copy_val1;
+
+		cout<<"In dct_node copy_pointer_val"<<endl;
+		*this = *copy_val;
+	}
+
+	int getval()
+	{
+		return value;
+	}
+
+	void setval(int a)
+	{
+		value = a;
+	}
+
+	int getlevel()
+	{
+		return level;
+	}
+
+	void setlevel(int a)
+	{
+		level = a;
+	}
+
+	void insert(dct_node *pointer_val)
+	{
+		dct_node *traverse = NULL;
+
+		if (child_pointer == NULL)
+		{
+			child_pointer = pointer_val;
+			return;
+		}
+
+		traverse = child_pointer;
+
+		while ((traverse->getnext()) != NULL)
+		{
+			traverse = traverse->getnext();
+		}
+
+		traverse->setnext(pointer_val);
+
+	}
+
+	dct_node* get_child_pointer()
+	{
+		return child_pointer;
+	}
+
+	void setnext(dct_node *next_element_pointer)
+	{
+		next = next_element_pointer;
+	}
+
+	dct_node* getnext()
+	{
+		return next;
+	}
+
+	QueueLock* getread_lock_val()
+	{
+		return read_lock_val;
+	}
+
+	QueueLock* getwrite_lock_val()
+	{
+		return write_lock_val;
+	}
+
+	~dct_node()
+	{
+		dct_node *traverse = child_pointer;
+		dct_node *temp = NULL;
+
+		if (child_pointer != NULL)
+		{
+			temp = child_pointer->getnext();
+		}
+
+		while (traverse != NULL)
+		{
+			if (child_pointer != NULL)
+			{
+				delete child_pointer;
+			}
+
+			traverse = temp;
+			if (traverse != NULL)
+			{
+				temp = traverse->getnext();
+			}
+
+		}
+
+	}
+};
+
+class dct_tree
+{
+	dct_node *dummy;
+	int number_of_nodes;
+public:
+	dct_tree(int n)
+	{
+		dummy = new dct_node;
+		dummy->setlevel(0);
+		number_of_nodes = n;
+	}
+
+	dct_tree(dct_node *val, int n)
+	{
+		dummy = val;
+		dummy->setlevel(0);
+		number_of_nodes = n;
+	}
+
+	dct_node* getdummy()
+	{
+		return dummy;
+	}
+
+	int getnumber_of_nodes()
+	{
+		return number_of_nodes;
+	}
+
+	~dct_tree()
+	{
+		delete dummy;
+	}
+
+};
+
+	dct_node* search_val(int[3], dct_node*);
+	dct_node* search_node(int, dct_node*);
+	dct_node* insert_val(int[3], dct_node*);
+	dct_tree* build_dcttree();
+
+	dct_tree* build_dcttree(int n)
+	{
+		dct_tree *tree_val = NULL;
+
+		tree_val = new dct_tree(n);
+
+		return tree_val;
+	}
+
+	dct_node* search_node(int val, dct_node *parent_pointer, int locksTaken)
+	{
+		dct_node *head = NULL;
+		dct_node *traverse = NULL;
+		QueueLock *write_lock_val = parent_pointer->getwrite_lock_val();
+		QueueLock *read_lock_val = parent_pointer->getread_lock_val();
+
+		if (locksTaken == 0)
+		{
+			while ((write_lock_val->CheckLockIsAcquired()) == 1)
+			{
+				cout<<"Waiting for write lock release1"<<endl;
+			}
+
+		}
+
+		if (locksTaken == 0)
+		{
+			read_lock_val->GetLock();
+		}
+
+		if (parent_pointer == NULL)
+		{
+			return NULL;
+		}
+
+		head = parent_pointer->get_child_pointer();
+		if (locksTaken == 0)
+		{
+			read_lock_val->ReleaseLock();
+		}
+
+		traverse = head;
+
+		while (traverse != NULL)
+		{
+
+			cout<<"In loop"<<endl;
+			write_lock_val = traverse->getwrite_lock_val();
+			read_lock_val = traverse->getread_lock_val();
+
+			while ((write_lock_val->CheckLockIsAcquired()) == 1)
+			{
+			}
+
+			if (locksTaken == 0)
+			{
+				read_lock_val->GetLock();
+			}
+
+			if ((traverse->getval()) == val)
+			{
+				cout<<"value found search"<<" "<<traverse->getval()<<" "<<val<<endl;
+				return traverse;
+			}
+
+			if (locksTaken == 0)
+			{
+				read_lock_val->ReleaseLock();
+			}
+
+			traverse = traverse->getnext();
+		}
+
+		cout<<"value not found"<<endl;
+		return NULL;
+	}
+
+	dct_node* search_val(int search_val_array[3], dct_tree *tree_val)
+	{
+		dct_node *dummy = tree_val->getdummy();
+		dct_node *traverse = dummy;
+		dct_node *temp = NULL;
+		int i = 0;
+		int current_value = 0;
+
+		for (i = 0;i < (tree_val->getnumber_of_nodes());i++)
+		{
+			current_value = search_val_array[i];
+			temp = search_node(current_value, traverse,1);
+			if (temp == NULL)
+			{
+				cout<<"value not found search val"<<" "<<current_value<<endl;
+				return NULL;
+			}
+
+			traverse = temp;
+		}
+
+		return traverse;
+
+	}
+
+	dct_tree* copy_val(dct_node *val, int number_of_nodes)
+	{
+		int i = 0;
+		dct_node *traverse1 = new dct_node();
+		dct_node *traverse2 = val->get_child_pointer();
+		dct_node *temp = NULL;
+		dct_tree *return_val = NULL;
+
+		i = val->getlevel();
+
+		traverse1->setval(val->getval());
+		traverse1->setlevel(val->getlevel());
+		for (;i < number_of_nodes;i++)
+		{
+			while (traverse2 != NULL)
+			{
+				temp = new dct_node(*(traverse2));
+				traverse1->insert(temp);
+				copy_val(temp, number_of_nodes);
+				traverse2 = traverse2->getnext();
+			}
+
+		}
+
+		return_val = new dct_tree(traverse1, number_of_nodes);
+
+		return return_val;
+
+	}
+
+	dct_node* insert_val(int val_array[3], dct_tree *tree_val, TransactionManager &transact_val1)
+	{
+		dct_tree *val1 = copy_val((tree_val->getdummy()), (tree_val->getnumber_of_nodes()));
+		dct_node *dummy = val1->getdummy();
+		dct_node *dummy2 = tree_val->getdummy();
+		dct_node *traverse = NULL;
+		dct_node *temp = NULL;
+		dct_node *temp_return = NULL;
+		QueueLock *write_lock_val = dummy->getwrite_lock_val();
+		QueueLock *read_lock_val = dummy->getread_lock_val();
+		int i = 0;
+
+		traverse = dummy;
+		transact_val1.add_commit_val(dummy2, dummy);
+		for (i = 0;i < (tree_val->getnumber_of_nodes());i++)
+		{
+			write_lock_val = traverse->getwrite_lock_val();
+			read_lock_val = traverse->getread_lock_val();
+			transact_val1.add_lock(write_lock_val);
+
+			while ((read_lock_val->CheckLockIsAcquired()) == 1)
+			{
+			}
+
+			if (!(write_lock_val->GetLock()))
+			{
+				cout<<"write lock not taken"<<endl;
+				throw -1;
+			}
+
+			temp_return = search_node(val_array[i], traverse,1);
+			if (temp_return == NULL)
+			{
+				temp = new dct_node;
+				temp->setval(val_array[i]);
+				temp->setlevel(i);
+				traverse->insert(temp);
+				write_lock_val->ReleaseLock();
+				transact_val1.delete_lock(write_lock_val);
+				traverse = temp;
+			}
+			else
+			{
+				write_lock_val->ReleaseLock();
+				transact_val1.delete_lock(write_lock_val);
+
+				traverse = temp_return;
+			}
+
+		}
+
+	}
diff --git a/ConcMAT.h b/ConcMAT.h
index 4ed99f4..1c8dc0e 100644
--- a/ConcMAT.h
+++ b/ConcMAT.h
@@ -130,10 +130,6 @@
 					cout<<"value found"<<" "<<temp->getval()<<" "<<val<<endl;
 					return temp;
 				}
-				else
-				{
-					cout<<"value not found2"<<" "<<temp->getval()<<" "<<i<<endl;
-				}
 
 			}
 
diff --git a/ConcMAT.h~ b/ConcMAT.h~
new file mode 100644
index 0000000..4ed99f4
--- /dev/null
+++ b/ConcMAT.h~
@@ -0,0 +1,197 @@
+#include<iostream>
+using namespace std;
+
+class mat_node
+{
+	int value;
+	int level;
+	int current_insertion_index;
+	mat_node *child_pointer_array[10];
+public:
+	mat_node()
+	{
+		int i = 0;
+		value = 0;
+		level = 0;
+		current_insertion_index = 0;
+		for (i = 0;i < 10;i++)
+		{
+			*(child_pointer_array + i) = NULL;
+		}
+	}
+	int getval()
+	{
+		return value;
+	}
+
+	void setval(int a)
+	{
+		value = a;
+	}
+
+	int getlevel()
+	{
+		return level;
+	}
+
+	void setlevel(int a)
+	{
+		level = a;
+	}
+
+	void insert(mat_node *pointer_val)
+	{
+		child_pointer_array[0] = pointer_val;
+	}
+
+	mat_node** get_child_pointer_array()
+	{
+		return child_pointer_array;
+	}
+
+	~mat_node()
+	{
+		mat_node *traverse = child_pointer_array[0];
+		int i = 0;
+
+		while(traverse != NULL && i < 10)
+		{
+			delete traverse;
+			++i;
+			traverse = *(child_pointer_array + i);
+		}
+
+		delete traverse;
+
+	}
+};
+
+	class mat_tree
+	{
+		mat_node *dummy;
+		int number_of_attributes;
+	public:
+		mat_tree(int n)
+		{
+			dummy = new mat_node;
+			dummy->setlevel(0);
+			number_of_attributes = n;
+		}
+
+		mat_node* getdummy()
+		{
+			return dummy;
+		}
+
+		int getnumber_of_attributes()
+		{
+			return number_of_attributes;
+		}
+
+		~mat_tree()
+		{
+			delete dummy;
+		}
+	};
+
+	mat_tree* build_mattree(int);
+	mat_node* search_node(int, mat_node*, mat_node*);
+	mat_node* search_val(int[3],mat_node*);
+	mat_node* insert_val(int[3],mat_node*);
+
+	mat_tree* build_mattree(int n)
+	{
+		mat_tree* tree_val = NULL;
+
+		tree_val = new mat_tree(n);
+
+		return tree_val;
+	}
+
+	mat_node* search_node(int val, mat_node *parent_pointer, mat_node *dummy)
+	{
+		mat_node **traverse = parent_pointer->get_child_pointer_array();
+		mat_node *temp = NULL;
+		int i = 0;
+
+		if (parent_pointer == NULL)
+		{
+			cout<<"parent pointer is NULL"<<endl;
+			return NULL;
+		}
+
+		while (i < 3)
+		{
+			temp = *(traverse + i);
+			if (temp != NULL)
+			{
+				if ((temp->getval()) == val)
+				{
+					cout<<"value found"<<" "<<temp->getval()<<" "<<val<<endl;
+					return temp;
+				}
+				else
+				{
+					cout<<"value not found2"<<" "<<temp->getval()<<" "<<i<<endl;
+				}
+
+			}
+
+			++i;
+		}
+
+		cout<<"value not found"<<endl;
+		return NULL;
+	}
+
+	mat_node* search_val(int search_val_array[3], mat_tree *tree_val)
+	{
+		mat_node *dummy = tree_val->getdummy();
+		mat_node *traverse = dummy;
+		mat_node *temp = NULL;
+		int i = 0;
+		int current_value = 0;
+
+		for (i = 0;i < 3;i++)
+		{
+			current_value = search_val_array[i];
+			temp = search_node(current_value, traverse, dummy);
+			if (temp == NULL)
+			{
+				cout<<"value not found"<<" "<<current_value<<endl;
+				return NULL;
+			}
+
+			traverse = temp;
+		}
+
+	}
+
+	mat_node* insert_val(int val_array[3], mat_tree *tree_val)
+	{
+		mat_node *dummy = tree_val->getdummy();
+		mat_node *traverse = NULL;
+		mat_node *temp = NULL;
+		mat_node *temp_return = NULL;
+		int i = 0;
+
+		traverse = dummy;
+		for (i = 0;i < 3;i++)
+		{
+			temp_return = search_node(val_array[i], traverse, dummy);
+			if (temp_return == NULL)
+			{
+				temp = new mat_node;
+				temp->setval(val_array[i]);
+				temp->setlevel(i);
+				traverse->insert(temp);
+				traverse = temp;
+			}
+			else
+			{
+				traverse = temp_return;
+			}
+
+		}
+
+	}
diff --git a/ConcDCTConcurrencyTest.cpp b/Tests/ConcDCTConcurrencyTest.cpp
similarity index 100%
rename from ConcDCTConcurrencyTest.cpp
rename to Tests/ConcDCTConcurrencyTest.cpp
diff --git a/ConcDCTFileReader.cpp b/Tests/ConcDCTFileReader.cpp
similarity index 100%
rename from ConcDCTFileReader.cpp
rename to Tests/ConcDCTFileReader.cpp
diff --git a/ConcDCTTest.cpp b/Tests/ConcDCTTest.cpp
similarity index 100%
rename from ConcDCTTest.cpp
rename to Tests/ConcDCTTest.cpp
diff --git a/ConcMATFileReader.cpp b/Tests/ConcMATFileReader.cpp
similarity index 100%
rename from ConcMATFileReader.cpp
rename to Tests/ConcMATFileReader.cpp
diff --git a/ConcMATTest.cpp b/Tests/ConcMATTest.cpp
similarity index 100%
rename from ConcMATTest.cpp
rename to Tests/ConcMATTest.cpp
diff --git a/ConcSegHashTableTest.cpp b/Tests/ConcSegHashTableTest.cpp
similarity index 100%
rename from ConcSegHashTableTest.cpp
rename to Tests/ConcSegHashTableTest.cpp
diff --git a/ConcSkipListTest.cpp b/Tests/ConcSkipListTest.cpp
similarity index 100%
rename from ConcSkipListTest.cpp
rename to Tests/ConcSkipListTest.cpp
diff --git a/FileReader.cpp b/Tests/FileReader.cpp
similarity index 100%
rename from FileReader.cpp
rename to Tests/FileReader.cpp
diff --git a/QueueLockTest.cpp b/Tests/QueueLockTest.cpp
similarity index 100%
rename from QueueLockTest.cpp
rename to Tests/QueueLockTest.cpp
diff --git a/TransactionManager.cpp b/Tests/TransactionManager.cpp
similarity index 100%
rename from TransactionManager.cpp
rename to Tests/TransactionManager.cpp
diff --git a/TransactionManager.h b/TransactionManager.h
index 4b4038b..cb7c1ff 100644
--- a/TransactionManager.h
+++ b/TransactionManager.h
@@ -72,7 +72,6 @@
 		{
 			if (lock_val_array[i] == val)
 			{
-				cout<<"lock value found2"<<" "<<i<<endl;
 				lock_val_array[i] = NULL;
 				for (j = i;j < lock_counter;j++)
 				{
@@ -112,7 +111,6 @@
 			{
 				if (mem_allocated_val_array[i] == val)
 				{
-					cout<<"memory location found2"<<" "<<i<<endl;
 					mem_allocated_val_array[i] = NULL;
 					for (j = i;j < memory_counter;j++)
 					{
@@ -176,7 +174,6 @@
 
 		lock_val_array[lock_counter] = val;
 		++lock_counter;
-		cout<<"lock value is"<<" "<<val<<" "<<lock_val_array[lock_counter -1]<<endl;
 	}
 
 	void commit_transaction()
@@ -186,7 +183,6 @@
 		delete_val = 0;
 		for (i = 0;i < commit_val_counter;i++)
 		{
-			cout<<"value is"<<" "<<current_val[i]<<" "<<copy_val[i]<<endl;
 			(current_val[i])->copy_pointer_val(copy_val[i]);
 		}
 
@@ -198,16 +194,13 @@
 	{
 		int i = 0;
 
-		cout<<"in destructor"<<endl;
 		if (delete_val == 1)
 		{
-			cout<<"delete_val is 1"<<endl;
 			cout<<"Rollback"<<endl;
 			for (i = 0;i < lock_counter;i++)
 			{
 				if (lock_val_array[i] != NULL && (lock_val_array[i])->CheckLockIsAcquired())
 				{
-					cout<<"lock found"<<endl;
 					lock_val_array[i]->ReleaseLock();
 				}
 
diff --git a/TransactionManager.h~ b/TransactionManager.h~
new file mode 100644
index 0000000..8c1197b
--- /dev/null
+++ b/TransactionManager.h~
@@ -0,0 +1,230 @@
+#include <iostream>
+#include "QueueLock2.h"
+#include "ConcDef.h"
+using namespace std;
+
+class TransactionManager
+{
+	static int active_transaction_number;
+	int current_transaction_number;
+	static int counter;
+	int lock_counter;
+	int memory_counter;
+	int commit_val_counter;
+	static int active_transactions[10];
+	int delete_val;
+	ConcertedDef* current_val[10];
+	ConcertedDef* copy_val[10];
+	void *mem_allocated_val_array[10];
+	QueueLock *lock_val_array[10];
+public:
+	TransactionManager()
+	{
+		int i = 0;
+
+		for(i = 0;i < 10;i++)
+		{
+			current_val[i] = NULL;
+			copy_val[i] = NULL;
+			active_transactions[i] = 0;
+			lock_val_array[i] = NULL;
+			mem_allocated_val_array[i] = NULL;
+		}
+
+		if (counter == 10)
+		{
+			cout<<"A new transaction number cannot be inserted due to lack of space"<<endl;
+			throw -1;
+		}
+
+		current_transaction_number = ++active_transaction_number;
+		active_transactions[counter] = active_transaction_number;
+		++counter;
+
+		lock_counter = 0;
+		memory_counter = 0;
+		commit_val_counter = 0;
+		delete_val = 1;
+	}
+
+	int add_transaction()
+	{
+
+		if (counter == 10)
+		{
+			cout<<"A new transaction number cannot be inserted due to lack of space"<<endl;
+			return -1;
+		}
+
+		++active_transaction_number;
+		active_transactions[counter] = active_transaction_number;
+		++counter;
+
+		return active_transaction_number;
+	}
+
+	void delete_lock(QueueLock *val)
+	{
+		int i = 0;
+		int j = 0;
+
+		for(i = 0;i < lock_counter;i++)
+		{
+			if (lock_val_array[i] == val)
+			{
+				lock_val_array[i] = NULL;
+				for (j = i;j < lock_counter;j++)
+				{
+					lock_val_array[j] = lock_val_array[j + 1];
+				}
+
+				--lock_counter;
+				break;
+			}
+
+		}
+
+	}
+
+	int add_mem_location(ConcertedDef *mem)
+	{
+		if (memory_counter == 10)
+		{
+			cout<<"new memory location val cannot be added due to lack of element in array"<<endl;
+			throw -1;
+		}
+
+		mem_allocated_val_array[memory_counter] = mem;
+		++memory_counter;
+
+		return 1;
+	}
+
+	void delete_mem_location(ConcertedDef *val)
+	{
+		int i = 0;
+		int j = 0;
+
+		for (i = 0; i < memory_counter;i++)
+		{
+			if (mem_allocated_val_array[i] != NULL)
+			{
+				if (mem_allocated_val_array[i] == val)
+				{
+					mem_allocated_val_array[i] = NULL;
+					for (j = i;j < memory_counter;j++)
+					{
+						mem_allocated_val_array[j] = mem_allocated_val_array[j + 1];
+					}
+
+					--memory_counter;
+					break;
+				}
+
+			}
+
+		}
+
+	}
+
+	void delete_transaction(int val)
+	{
+		int i = 0;
+		int j = 0;
+
+		for (i = 0;i < 10;i++)
+		{
+			if (active_transactions[i] == val)
+			{
+				active_transactions[i] = 0;
+				for (j = i;j < counter;j++)
+				{
+					active_transactions[j] = active_transactions[j + 1];
+				}
+
+				--counter;
+			}
+
+		}
+
+	}
+
+	void add_commit_val(ConcertedDef *val, ConcertedDef *copy_val1)
+	{
+
+		if (commit_val_counter == 10)
+		{
+			cout<<"commit val cannot be added due to lack of element in array"<<endl;
+			throw -1;
+		}
+
+		current_val[commit_val_counter] = val;
+		copy_val[commit_val_counter] = copy_val1;
+		++commit_val_counter;
+	}
+
+	void add_lock(QueueLock *val)
+	{
+
+		if (lock_counter == 10)
+		{
+			cout<<"lock cannot be added due to lack of element in array"<<endl;
+			throw -1;
+		}
+
+		lock_val_array[lock_counter] = val;
+		++lock_counter;
+		cout<<"lock value is"<<" "<<val<<" "<<lock_val_array[lock_counter -1]<<endl;
+	}
+
+	void commit_transaction()
+	{
+		int i = 0;
+
+		delete_val = 0;
+		for (i = 0;i < commit_val_counter;i++)
+		{
+			(current_val[i])->copy_pointer_val(copy_val[i]);
+		}
+
+		cout<<"commit"<<endl;
+
+	}
+
+	~TransactionManager()
+	{
+		int i = 0;
+
+		if (delete_val == 1)
+		{
+			cout<<"Rollback"<<endl;
+			for (i = 0;i < lock_counter;i++)
+			{
+				if (lock_val_array[i] != NULL && (lock_val_array[i])->CheckLockIsAcquired())
+				{
+					lock_val_array[i]->ReleaseLock();
+				}
+
+			}
+
+			i = 0;
+
+			for (i = 0;i < memory_counter;i++)
+			{
+				if (mem_allocated_val_array[i] != NULL)
+				{
+					free(mem_allocated_val_array[i]);
+				}
+
+			}
+
+		delete_transaction(current_transaction_number);
+
+		}
+
+	}
+};
+
+int TransactionManager::counter = 0;
+int TransactionManager::active_transaction_number = 0;
+int TransactionManager::active_transactions[10] = {0,0,0,0,0,0,0,0,0,0};
diff --git a/a.out b/a.out
new file mode 100755
index 0000000..8206f74
--- /dev/null
+++ b/a.out
Binary files differ