package freenet.support; /** Tracks when a condition was last true, e.g. whether a peer is connected. Self-synchronized. */ public class BooleanLastTrueTracker { private boolean isTrue; private long timeLastTrue; public BooleanLastTrueTracker() { isTrue = false; timeLastTrue = -1; } /** Initialise with a time last connected */ public BooleanLastTrueTracker(long lastTrue) { isTrue = false; timeLastTrue = lastTrue; } public synchronized boolean isTrue() { return isTrue; } public synchronized boolean set(boolean value, long now) { if(value == isTrue) return value; if(!isTrue) timeLastTrue = now; isTrue = value; return !value; } public synchronized long getTimeLastTrue(long now) { if(isTrue) return now; else return timeLastTrue; } }