All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aima.core.probability.domain.AbstractFiniteDomain Maven / Gradle / Ivy

Go to download

AIMA-Java Core Algorithms from the book Artificial Intelligence a Modern Approach 3rd Ed.

The newest version!
package aima.core.probability.domain;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public abstract class AbstractFiniteDomain implements FiniteDomain {

	private String toString = null;
	private Map valueToIdx = new HashMap();
	private Map idxToValue = new HashMap();

	public AbstractFiniteDomain() {

	}

	//
	// START-Domain
	@Override
	public boolean isFinite() {
		return true;
	}

	@Override
	public boolean isInfinite() {
		return false;
	}

	@Override
	public abstract int size();

	@Override
	public abstract boolean isOrdered();

	// END-Domain
	//

	//
	// START-FiniteDomain
	@Override
	public abstract Set getPossibleValues();

	@Override
	public int getOffset(Object value) {
		Integer idx = valueToIdx.get(value);
		if (null == idx) {
			throw new IllegalArgumentException("Value [" + value
					+ "] is not a possible value of this domain.");
		}
		return idx.intValue();
	}

	@Override
	public Object getValueAt(int offset) {
		return idxToValue.get(offset);
	}

	// END-FiniteDomain
	//

	@Override
	public String toString() {
		if (null == toString) {
			toString = getPossibleValues().toString();
		}
		return toString;
	}

	//
	// PROTECTED METHODS
	//
	protected void indexPossibleValues(Set possibleValues) {
		int idx = 0;
		for (Object value : possibleValues) {
			valueToIdx.put(value, idx);
			idxToValue.put(idx, value);
			idx++;
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy