// StringList.cpp
// linked list of strings with print function

#include "stringlist.h"

StringList::StringList( string name ) {
		assignName(name);
		Next = NULL;
}

string StringList::getName() {
		return value;
}

StringList *StringList::getNext() {
		return Next;
}

StringList *StringList::get( string name ) {
		if (this->getName() == name) {
				return this;
		}
		else if (getNext() == NULL) {
				return NULL;
			}
			else return getNext()->get(name);
}

void StringList::addNoRestrict( string name ) {
	if (getName().empty()) {
		assignName(name);
	}
	else if (getNext() == NULL) {
				StringList *temp = new StringList(name);
				assignNext(*temp);
			}
			else { getNext()->addNoRestrict(name);}
}


int StringList::add( string name ) {
	if (getName().empty()) {
		//cout << "\nAdding to start of queue\n";
		assignName(name);
		return 1;
	}
	else if (getName() == name) {
		//cout << "\n" << name << " already found\n";
		return 0;
	}
		else if (getNext() == NULL) {
				//cout << "\n Adding to end of queue";
				StringList *temp = new StringList(name);
				assignNext(*temp);
				return 1;
			}
			else { return getNext()->add(name);}
}

int StringList::assignNext( StringList &newNext ) {
		Next = &newNext;
		return 1;
}

int StringList::assignName( string newName ) {
		value = newName;
		return 1;
}

StringList::~StringList() {
		if (getNext() != NULL)
		delete Next;
}

void StringList::testList() {
		cout << getName() << " ";
		if (getNext() != NULL) getNext()->testList();
}
