package mstparser;

public class ParseForestItem {

    public int s,r,t,dir,comp,length,type;
    public double prob;
    public FeatureVector fv;
    public ParseForestItem left, right;
	
    // productions
    public ParseForestItem(int i, int k, int j, int type,
			   int dir, int comp,
			   double prob, FeatureVector fv,
			   ParseForestItem left, ParseForestItem right) {
	this.s = i;
	this.r = k;
	this.t = j;
	this.dir = dir;
	this.comp = comp;
	this.type = type;
	length = 6;
		
	this.prob = prob;
	this.fv = fv;

	this.left = left;
	this.right = right;
		
    }

    // preproductions
    public ParseForestItem(int s, int type, int dir, double prob, FeatureVector fv) {
	this.s = s;
	this.dir = dir;
	this.type = type;
	length = 2;
		
	this.prob = prob;
	this.fv = fv;

	left = null;
	right = null;

    }

    public ParseForestItem() {}

    public void copyValues(ParseForestItem p) {
	p.s = s;
	p.r = r;
	p.t = t;
	p.dir = dir;
	p.comp = comp;
	p.prob = prob;
	p.fv = fv;
	p.length = length;
	p.left = left;
	p.right = right;
	p.type = type;
    }
	
    // way forest works, only have to check rule and indeces
    // for equality.
    public boolean equals(ParseForestItem p) {
	return s == p.s && t == p.t && r == p.r
	    && dir == p.dir && comp == p.comp
	    && type == p.type;
    }

    public boolean isPre() { return length == 2; }
	
}
