IntValue.java
/* Copyright 2015 Laurent COCAULT
* Licensed to Laurent COCAULT under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership. Laurent COCAULT licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the
* License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.csp.constraint.model.integer;
import org.csp.constraint.model.Value;
/**
* Value for an integer variable.
*/
public class IntValue implements Value<IntValue> {
/**
* Maximum value for the type IntValue (the quarter of the Integer size is
* considered in order to make the "compare" function work effectively).
*/
protected static final IntValue MAX_INT_VALUE = new IntValue(
Integer.MAX_VALUE / 2 - 1);
/**
* Minimum value for the type IntValue (the quarter of the Integer size is
* considered in order to make the "compare" function work effectively).
*/
protected static final IntValue MIN_INT_VALUE = new IntValue(
Integer.MIN_VALUE / 2 + 1);
/** Value. */
private int value_;
/**
* Constructor.
* @param value
* Integer value
*/
public IntValue(final int value) {
value_ = value;
}
/**
* Compute the difference of two integer variables.
* @param first
* First argument
* @param second
* Second argument
* @return Difference of the two arguments
*/
public static IntValue diff(final IntValue first, final IntValue second) {
return new IntValue(first.value_ - second.value_);
}
/**
* Compute the sum of two integer variables.
* @param first
* First argument
* @param second
* Second argument
* @return Sum of the two arguments
*/
public static IntValue sum(final IntValue first, final IntValue second) {
return new IntValue(first.value_ + second.value_);
}
/**
* {@inheritDoc}
*/
@Override
public int compareTo(final IntValue other) {
return value_ - other.value_;
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals(final Object other) {
// Assume not equal
boolean equal = false;
if (other instanceof IntValue) {
// Compare with an other IntValue
equal = value_ == ((IntValue) other).value_;
}
return equal;
}
/**
* {@inheritDoc}
*/
@Override
public int getDistance(final IntValue from) {
return Math.abs(value_ - from.value_);
}
/**
* Get the integer value.
* @return Integer value
*/
public int getIntValue() {
return value_;
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
return value_;
}
/**
* {@inheritDoc}
*/
@Override
public IntValue maxValue() {
return MAX_INT_VALUE;
}
/**
* {@inheritDoc}
*/
@Override
public IntValue minValue() {
return MIN_INT_VALUE;
}
/**
* {@inheritDoc}
*/
@Override
public IntValue nextValue() {
return new IntValue(value_ + 1);
}
/**
* {@inheritDoc}
*/
@Override
public IntValue previousValue() {
return new IntValue(value_ - 1);
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return Integer.toString(value_);
}
/**
* {@inheritDoc}
*/
@Override
public IntValue value() {
return this;
}
}