package parser.ServletParser.library;

import java.io.*;
/** 이 클래스는 컨테이너 역할을 하는 리스트 클래스로서 StrWithObj들을
 * 관리하는 클래스이다.
 */
public final
	class StrWithObjList extends List {
	/** 생성자이다.
	 */
	public StrWithObjList() {
		super();
	}
	/** 이 리스트의 마지막에 새로운 객체를 insert 하는 함수이다.
	 * 리스트에 이미 객체가 있으면 insert 하지 않는다.
	 */
	public void insert(String name,Object obj) {
		StrWithObj newItem = new StrWithObj(name,obj);
		_insert(newItem,0);
	}
	/** 이 리스트의 마지막에 새로운 객체를 insert 하는 함수이다.
	 * 리스트에 이미 객체가 있으면 insert 하지 않는다.
	 */
	public void insert(String name,Object obj,int x,int y) {
		StrWithObj newItem = new StrWithObj(name,obj,x,y);
		_insert(newItem,0);
	}
	/** 이 리스트의 마지막에 새로운 객체를 insert 하는 함수이다.
	 * 리스트에 이미 객체가 있으면 insert 하지 않는다.
	 */
	public void insert(String name) {
		StrWithObj newItem = new StrWithObj(name);
		_insert(newItem,0);
	}
	/** 이 리스트의 마지막에 새로운 객체를 무조건 insert 하는 함수이다.
	 */
	public void addTail(StrWithObj obj) {
		super._insert((Object)obj,ABSOLUTELY);
	}
	/** 이 리스트의 마지막에 새로운 객체를 무조건 insert 하는 함수이다.
	 */
	public void addTail(String name,Object obj) {
		StrWithObj newItem = new StrWithObj(name,obj);
		super._insert((Object)newItem,ABSOLUTELY);
	}
	/** 이 리스트의 마지막에 새로운 객체를 무조건 insert 하는 함수이다.
	 */
	public void addTail(String name,Object obj,int x,int y) {
		StrWithObj newItem = new StrWithObj(name,obj,x,y);
		super._insert((Object)newItem,ABSOLUTELY);
	}
	/** 이 리스트에 스트링 관계 객체의 위치를 찾는 함수이다.
	 */
	public Object findObject(String name) {
		StrWithObj anItem = getFirst();
		while (anItem != null) {
			if (name.compareTo(anItem.getName()) == 0) {
				return anItem.getObject();
			}
			anItem = getNext();
		}
		return null;
	}
	/** 스택 연산의 push 기능 함수이다.
	 */
	public void push(Object ptr) {
		StrWithObj newItem = new StrWithObj("",ptr);
		super._push((Object)newItem);
	}
	/** 스택 연산의 pop 기능 함수이다.
	 */
	public StrWithObj pop() {
		return (StrWithObj)super._pop();
	}
	/** 스택 연산의 top 기능 함수이다.
	 */
	public StrWithObj top() {
		return (StrWithObj)super._top();
	}
	/** 이 리스트를 비우는 함수이다.
	 */
	public void clear() {
		super._clear();
	}
	/** 리스트의 객체들을 traverse 할 때 맨 첫번째 객체를 찾아오는 함수이다.
	 * 만약 리스트가 비어있게되면 null 값을 리턴한다.
	 */
	public StrWithObj getFirst() {
		return (StrWithObj)super._getFirst();
	}
	/** 리스트의 객체들을 traverse 할 때 다음 객체를 찾아오는 함수이다.
	 * 만약 리스트의 끝에 도달하면 null 값을 리턴한다.
	 */
	public StrWithObj getNext() {
		return (StrWithObj)super._getNext();
	}
}
