Newer
Older
ResourceDependencyLogic / src / models / terms / meta / OrderVariableConstraint.java
@Sakoda2269 Sakoda2269 on 20 Dec 1 KB 途中まで
package models.terms.meta;

import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@Getter
public class OrderVariableConstraint {

	// lower <= x <= upper
	private int upper = 100000000;
	private int lower = -1;
	private boolean isOk = true;
	
	public boolean setConstraint(int value, OrderConstraint constraint) {
		switch (constraint) {
		case ANY:
			return true;
		case EQ:
			return setEq(value);
		case GE:
			return setUpper(value);
		case GT:
			return setUpper(value - 1);
		case LE:
			return setLower(value);
		case LT:
			return setLower(value + 1);
		}
		return false;
	}
	
	public int getOrder() {
		if (isOk) {
			return lower;
		}
		return -1;
	}
	
	private boolean setEq(int eq) {
		return setUpper(eq) && setLower(eq);
	}
	
	private boolean setUpper(int upper) {
		if (isOk && this.lower <= upper && upper <= this.upper) {
			this.upper = upper;
			return true;
		}
		isOk = false;
		return false;
	}
	
	private boolean setLower(int lower) {
		if (isOk && this.lower <= lower && lower <= this.upper) {
			this.lower = lower;
			return true;
		}
		isOk = false;
		return false;
	}
	
}