D7.java 4.39 KB
/**
 *
 */
package is2.data;

/**
 * @author Dr. Bernd Bohnet, 30.10.2010
 * 
 *         This class computes the mapping of features to the weight vector.
 */
final public class D7 extends DX {

	private long shift;
	private long h;
	private final Long2IntInterface _li;

	public D7(Long2IntInterface li) {
		_li = li;
	}

	boolean fixed = false;

	@Override
	public void fix() {

		long t0 = 1, t1 = a0, t2 = t1 * a1, t3 = t2 * a2, t4 = t3 * a3, t5 = t4 * a4, t6 = t5 * a5, t7 = t6 * a6,
				t8 = t7 * a7, t9 = t8 * a8;

		a0 = t0;
		a1 = t1;
		a2 = t2;
		a3 = t3;
		a4 = t4;
		a5 = t5;
		a6 = t6;
		a7 = t7;
		a8 = t8;
		a9 = t9;

	}

	@Override
	final public void clean() {
		v0 = 0;
		v1 = 0;
		v2 = 0;
		v3 = 0;
		v4 = 0;
		v5 = 0;
		v6 = 0;
		v7 = 0;
		v8 = 0;
		shift = 0;
		h = 0;
	}

	@Override
	final public void cz3() {
		if (v2 < 0) {
			h = -1;
			return;
		}

		h = v0 + v1 * a1 + v2 * a2;
		shift = a3;
	}

	final public long c3() {
		if (v2 < 0) {
			h = -1;
			return h;
		}

		h = v0 + v1 * a1 + v2 * a2;
		shift = a3;
		return h;
	}

	final public long d3() {
		if (v2 < 0)
			return -1;
		return v0 + v2 * a2;
	}

	@Override
	final public void cz4() {
		// if (v0<0||v1<0||v2<0||v3<0) {h=-1;return;}
		if (v2 < 0 || v3 < 0) {
			h = -1;
			return;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3;
		shift = a4;
	}

	final public long c4() {
		if (v2 < 0 || v3 < 0) {
			h = -1;
			return h;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3;
		shift = a4;
		return h;
	}

	final public long d4() {
		if (v2 < 0 || v3 < 0)
			return -1;
		return v0 + v2 * a2 + v3 * a3;
	}

	@Override
	final public void cz5() {

		if (v2 < 0 || v3 < 0 || v4 < 0) {
			h = -1;
			return;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4;
		shift = a5;

	}

	final public long c5() {

		if (v2 < 0 || v3 < 0 || v4 < 0) {
			h = -1;
			return h;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4;
		shift = a5;
		return h;
	}

	final public long d5() {
		if (v2 < 0 || v3 < 0 || v4 < 0)
			return -1;
		return v0 + v2 * a2 + v3 * a3 + v4 * a4;
	}

	@Override
	final public void cz6() {

		if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) {
			h = -1;
			return;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5;
		shift = a6;
	}

	final public long c6() {

		if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) {
			h = -1;
			return h;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5;
		shift = a6;
		return h;
	}

	final public long d6() {
		if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0)
			return -1;
		return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5;
	}

	@Override
	final public long cs(int b, int v) {
		if (h < 0) {
			h = -1;
			return h;
		}

		h += v * shift;
		shift *= b;
		return h;

	}

	@Override
	final public void csa(int b, int v, IFV f) {
		if (h < 0) {
			h = -1;
			return;
		}

		h += v * shift;
		shift *= b;
		f.add(_li.l2i(h));
	}

	@Override
	final public long csa(int b, int v) {
		if (h < 0) {
			h = -1;
			return -1;
		}

		h += v * shift;
		shift *= b;
		return h;
	}

	@Override
	public final long getVal() {
		return h;
	}

	@Override
	public final void map(IFV f, long l) {
		if (l > 0)
			f.add(this._li.l2i(l));
	}

	/**
	 * @param f
	 */
	final public void add(IFV f) {
		f.add(_li.l2i(h));
	}

	@Override
	final public void cz7() {
		if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) {
			h = -1;
			return;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6;
		shift = a7;

	}

	final public long c7() {
		if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) {
			h = -1;
			return h;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6;
		shift = a7;
		return h;
	}

	final public long d7() {
		if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0)
			return -1;
		return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6;
	}

	/**
	 *
	 */
	@Override
	final public void cz8() {
		if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) {
			h = -1;
			return;
		}

		h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7;
		shift = a8;
	}

	final public long d8() {
		if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) {
			return -1;
		}
		return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see is2.data.DX#computeLabeValue(short, short)
	 */
	@Override
	public int computeLabeValue(int label, int shift) {
		return label * shift;
	}

}