You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
936 B
61 lines
936 B
11 years ago
|
package mightypork.util.math.constraints;
|
||
11 years ago
|
|
||
|
|
||
|
/**
|
||
|
* Parametrized implementation of a {@link Digestable}
|
||
|
*
|
||
|
* @author MightyPork
|
||
|
* @param <D> digest class
|
||
|
*/
|
||
|
public abstract class DigestCache<D> implements Digestable<D> {
|
||
|
|
||
11 years ago
|
private D last_digest;
|
||
11 years ago
|
private boolean caching_enabled = false;
|
||
11 years ago
|
private boolean dirty = true;
|
||
11 years ago
|
|
||
|
|
||
|
@Override
|
||
|
public final D digest()
|
||
|
{
|
||
11 years ago
|
if (caching_enabled) {
|
||
|
if (dirty || last_digest == null) {
|
||
|
last_digest = createDigest();
|
||
11 years ago
|
dirty = false;
|
||
|
}
|
||
|
|
||
11 years ago
|
return last_digest;
|
||
11 years ago
|
}
|
||
|
|
||
|
return createDigest();
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @return fresh new digest
|
||
|
*/
|
||
|
protected abstract D createDigest();
|
||
|
|
||
|
|
||
|
@Override
|
||
|
public final void enableDigestCaching(boolean yes)
|
||
|
{
|
||
11 years ago
|
caching_enabled = yes;
|
||
11 years ago
|
markDigestDirty(); // mark dirty
|
||
|
}
|
||
|
|
||
|
|
||
|
@Override
|
||
|
public final boolean isDigestCachingEnabled()
|
||
|
{
|
||
11 years ago
|
return caching_enabled;
|
||
11 years ago
|
}
|
||
|
|
||
|
|
||
|
@Override
|
||
|
public final void markDigestDirty()
|
||
|
{
|
||
|
dirty = true;
|
||
|
}
|
||
|
|
||
|
}
|