package de.dhbwstuttgart.syntaxtree;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import de.dhbwstuttgart.typeinference.Menge;

import de.dhbwstuttgart.parser.GenericVarDeclarationList;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;


/**
 * Stellt eine Deklarations-Liste von Generischen Variablen dar.
 * Kann vor Methoden und Klassen auftauchen. (<....>)
 * @author janulrich
 *
 */
public class GenericDeclarationList extends SyntaxTreeNode implements Iterable<GenericTypeVar>{

	private int offsetOfLastElement;
	private List<GenericTypeVar> gtvs = new Menge<>();
	
<<<<<<< HEAD
	public GenericDeclarationList(List<GenericTypeVar> values, int endOffset) {
		super(endOffset);
		gtvs = values;
=======
	public GenericDeclarationList(){
		this(new Menge<GenericTypeVar>(), -1);
	}
	
	public GenericDeclarationList(Menge<GenericTypeVar> values, int endOffset) {
		this.addAll(values);
>>>>>>> refactoring
		this.offsetOfLastElement = endOffset;
	}
	
	public int getEndOffset(){
		return offsetOfLastElement;
	}

	@Override
	public int getOffset() {
		return getEndOffset();
	}

	@Override
	public int getVariableLength() {
		return 0;
	}

	@Override
	public Iterator<GenericTypeVar> iterator() {
		return this.gtvs.iterator();
	}

	@Override
	public Menge<SyntaxTreeNode> getChildren() {
		Menge<SyntaxTreeNode> ret = new Menge<>();
		for(GenericTypeVar gtv : gtvs){
			ret.add(gtv);
		}
		return ret;
	}

	public int size() {
		return gtvs.size();
	}

	public void add(GenericTypeVar t) {
		this.gtvs.add(t);
	}

	public List<GenericTypeVar> getGTVList() {
		return this.gtvs;
	}
}