#include "include.h"


bool Iterador::hasNext() {
	return this->lista != NULL;
}

void * Iterador::next() {
	if (!this->lista) {
		return NULL;
	}
	void * o = this->lista->objeto;
	this->lista = this->lista->next;
	return o;
}

Lista::Lista() {
	this->lista = NULL;
	this->largo = 0;
}

Lista::~Lista() {
	while (this->lista) {
		_SLista * aux = this->lista;
		this->lista = this->lista->next;
		delete aux;
	}
}

void * Lista::get(int i) {
	_SLista * lista = this->lista;
	while (i > 0 && lista) {
		lista = lista->next;
		i--;
	}
	if (lista) {
		return lista->objeto;
	} else {
		return NULL;
	}
}

void Lista::add(void * objeto) {
	_SLista * lista = new _SLista();
	lista->next = this->lista;
	lista->objeto = objeto;
	this->lista = lista;
	this->largo++;
}

void Lista::remove(void * objeto) {
	_SLista ** lista = &this->lista, * aux;
	while (*lista) {
		if ((*lista)->objeto == objeto) {
			aux = *lista;
			*lista = aux->next;
			delete aux;
			this->largo--;
			return;
		}
		lista = &((*lista)->next);
	}
}

int Lista::count() {
	return this->largo;
}

Iterador * Lista::iterador() {
	Iterador * i = new Iterador();
	i->lista = this->lista;
	return i;
}
