package parser.ServletParser.library;

/** 이 클래스는 참조되는 변수들을 관리하는 스택이다.
 */
public final
class VarRefStack extends List 
{
	/** 생성자이다.
	 */
	public VarRefStack() {
		super();
	}
	/** 스택 연산의 push 기능 함수이다.
	 */
	public void push(VarRefBlock ptr) {
		super._push((Object)ptr);
	}
	/** 스택 연산의 pop 기능 함수이다.
	 */
	public VarRefBlock pop() {
		return (VarRefBlock)super._pop();
	}
	/** 스택 연산의 top 기능 함수이다.
	 */
	public VarRefBlock top() {
		return (VarRefBlock)super._top();
	}
	/** 이 리스트를 비우는 함수이다.
	 */
	public void clear() {
		super._clear();
	}
	/** 스택에서 변수의 레퍼런스를 찾는 함수이다.
	 */
	public VarRefItem searchVarRefItem(String name) {
		VarRefBlock aBlock = getFirst();
		while (aBlock != null) {
			VarRefItem item = aBlock.getFirst();
			while (item != null) {
				if (name.compareTo(item.getName()) == 0) {
					return item;
				}
				item = aBlock.getNext();
			}
			aBlock = getNext();
		}
		return null;
	}
	/** 스택에서 변수의 타입을 찾는 함수이다.
	 */
	public String searchType(String name) {
		VarRefBlock aBlock = getFirst();
		while (aBlock != null) {
			VarRefItem item = aBlock.getFirst();
			while (item != null) {
				if (name.compareTo(item.getName()) == 0) {
					return item.getType();
				}
				item = aBlock.getNext();
			}
			aBlock = getNext();
		}
		return new String("__unknown");
	}
	/** 리스트의 객체들을 traverse 할 때 맨 첫번째 객체를 찾아오는 함수이다.
	 * 만약 리스트가 비어있게되면 null 값을 리턴한다.
	 */
	public VarRefBlock getFirst() {
		return (VarRefBlock)super._getFirst();
	}
	/** 리스트의 객체들을 반대 방향으로 traverse 하기위해 맨 마지막 객체를 찾아오는 함수이다.
	 * 만약 리스트가 비어있게되면 null 값을 리턴한다.
	 */
	public VarRefBlock getLast() {
		return (VarRefBlock)super._getLast();
	}
	/** 리스트의 객체들을 traverse 할 때 다음 객체를 찾아오는 함수이다.
	 * 만약 리스트의 끝에 도달하면 null 값을 리턴한다.
	 */
	public VarRefBlock getNext() {
		return (VarRefBlock)super._getNext();
	}
	/** 리스트의 객체들을 반대 방향으로 traverse 할 때 다음 객체를 찾아오는 함수이다.
	 * 만약 리스트의 앞에 도달하면 null 값을 리턴한다.
	 */
	public VarRefBlock getPrevious() {
		return (VarRefBlock)super._getPrevious();
	}
}
