package rpn.basic;

import java.util.Hashtable;
import rpn.Calculator;

public class RepeatItem extends Item {
	
	public RepeatItem(Calculator ca) {
		super(ca);
		ca.systemInstall(this);
	}
	
	public void exec() {
		if (ca.check(2)) {
			Item a = ca.peek(1);
			Item b = ca.peek(0);
			if (a instanceof IntValue && b instanceof ProcItem) {
				int n = ((IntValue) a).intValue();
				int m = ((ProcItem) b).size();
				if (n > 0) {
					Item ell[] = new Item[m+4];
					for (int i=0;i<m;i++) {
						ell[i] = ((ProcItem) b).item(i);
					}
					ell[m] = new IntItem(ca, n-1);
					ell[m+1] = new GenericArrayItem(ca, ((ProcItem) b).a);
					ell[m+2] = new CVXItem(ca);
					ell[m+3] = new RepeatItem(ca);
					ProcItem p = new ProcItem(ca, ell);
					p.exec();
				}
				ca.pop(2);
			} else {
				ca.error(this, CalcErr.Type);
			}
		}
		else {
			// underflow
			ca.error(this, CalcErr.Underflow);
		}
	}
	
	public String toString() {
		return("repeat");
	}
}