/*******************************************************************************
* Copyright (c) 2013 Michael Kutschke.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Michael Kutschke - initial API and implementation
******************************************************************************/
package org.eclipse.recommenders.jayes.factor.opcache;
/**
* This class is to be used when modulo operations are performance critical, and appear in sequence such that many
* subsequent values would result in the same value, if divided by the divisor.
*/
public class ModuloCache {
private final int divisor;
private final DivisionCache subCache;
private int cachedSubtrahent;
public ModuloCache(int divisor) {
this.divisor = divisor;
this.subCache = new DivisionCache(divisor);
cachedSubtrahent = 0;
}
public int apply(int arg) {
if (subCache.isInCache(arg)) {
return arg - cachedSubtrahent;
}
cachedSubtrahent = divisor * subCache.apply(arg);
return arg - cachedSubtrahent;
}
}