package market.util;

import java.io.*;
/**
 * Insert the type's description here.
 * Creation date: (14.6.2000 “. 09:08:09)
 * @author: 
 */
public class Stack {
	private Queue memStack;
	public int fileIndex;
	public String fileName;
	public boolean isEmpty=true;
/**
 * Stack constructor comment.
 */
public Stack() {
	super();
}
	/**
	 * Stack constructor comment.
	 */
	public Stack(int size, String fName , int swapIndex) {
		super();
		memStack = new Queue(size);
		fileName = fName + File.separator + swapIndex + "_";
		fileIndex = -1;
	}
/**
 * Insert the method's description here.
 * Creation date: (30.6.2000 “. 17:13:18)
 * @return java.lang.Object
 */
public Object pull() {
	Object tmpObj = new Object();
	if (!memStack.canRead()) {
		if (fileIndex >= 0) {
			File inputFile = new File(fileName + fileIndex + ".swap");
			try {
				ObjectInputStream fileRead = new ObjectInputStream(new FileInputStream(inputFile));
				while (memStack.canWrite()) {
					tmpObj = fileRead.readObject();
					memStack.writeObject(tmpObj);
				}
				fileRead.close();
				inputFile.delete();
			} catch (Exception e) {
				System.out.println(e.toString());
			}
			fileIndex--;
		}
	}
	
	tmpObj = memStack.readObject();
	if ((fileIndex <= -1) && (!memStack.canRead()))
		isEmpty = true;
	return (tmpObj);
}
/**
 * Insert the method's description here.
 * Creation date: (30.6.2000 “. 17:12:36)
 * @param obj java.lang.Object
 */
public void push(Object obj) {
	isEmpty = false;
	if ( !memStack.canWrite() ) {
		fileIndex++;
		try {
			ObjectOutputStream fileRecStream = new ObjectOutputStream(new FileOutputStream(fileName + fileIndex+".swap"));
			while (memStack.canRead()) {
				Object tmpObj = memStack.readObject();
				fileRecStream.writeObject(tmpObj);
			}
			fileRecStream.close();
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
	memStack.writeObject(obj);
	isEmpty = false;

}
}

