Provide a way to use the throttle with ones own timestamps.

git-svn-id: https://samskivert.googlecode.com/svn/trunk@958 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2002-12-04 02:54:58 +00:00
parent 93386819d5
commit b79c3d38c4
@@ -1,5 +1,5 @@
// //
// $Id: Throttle.java,v 1.2 2001/08/11 22:43:29 mdb Exp $ // $Id: Throttle.java,v 1.3 2002/12/04 02:54:58 mdb Exp $
// //
// samskivert library - useful routines for java programs // samskivert library - useful routines for java programs
// Copyright (C) 2001 Michael Bayne // Copyright (C) 2001 Michael Bayne
@@ -78,18 +78,38 @@ public class Throttle
*/ */
public boolean throttleOp () public boolean throttleOp ()
{ {
long now = System.currentTimeMillis(); return throttleOp(System.currentTimeMillis());
}
/**
* Registers an attempt at an operation and returns true if the
* operation should be performed or false if it should be throttled
* (meaning N operations have already been performed in the last M
* seconds). For systems that don't wish to use {@link
* System#currentTimeMillis} (opting in favor for some custom timing
* mechanism that is more accurate that {@link
* System#currentTimeMillis}) or those that already have the time,
* they can avoid an unnecessary call to {@link
* System#currentTimeMillis} by using this version of the method.
*
* @param timeStamp the timestamp at which this operation is being
* attempted.
*
* @return true if the throttle is activated, false if the operation
* can proceed.
*/
public boolean throttleOp (long timeStamp)
{
// if the oldest operation was performed less than _period ago, we // if the oldest operation was performed less than _period ago, we
// need to throttle // need to throttle
if ((now - _ops[_lastOp]) < _period) { if ((timeStamp - _ops[_lastOp]) < _period) {
return true; return true;
} }
// otherwise overwrite the oldest operation with the current time // otherwise overwrite the oldest operation with the current time
// and move the oldest operation pointer to the second oldest // and move the oldest operation pointer to the second oldest
// operation (which is now the oldest as we overwrote the oldest) // operation (which is now the oldest as we overwrote the oldest)
_ops[_lastOp] = now; _ops[_lastOp] = timeStamp;
_lastOp = (_lastOp + 1) % _ops.length; _lastOp = (_lastOp + 1) % _ops.length;
return false; return false;
} }