package abstract_constraint_program;

import java.util.List;

public interface AbstractConstraintProgram<VarType, ConstraintType> {
    
    public ACPLongVar<VarType> addLongVar(String varName, long min, long max);
    public void addLongConstraint(ACPLongVar<VarType> var1, ACPOperator operator, ACPLongVar<VarType> var2);
    public void addScalarLongConstraint(List<Long> coeffs, List<ACPLongVar<VarType>> vars, Long value);
    public void addLongConstraint(ACPLongVar<VarType> lwBoundVar, ACPOperator equals, long value);
    
    /** Post the un-posted constraints **/
    public void post();
    
    /** Solve 
     * @return **/
    public boolean solve();

    public String humanFormat();
    public boolean hasReachedLimit();
}
