/** Remove one sample (from bucket) at {@code timeMsSinceEpoch}. */ public void remove(long timeMsSinceEpoch) { long key = key(timeMsSinceEpoch); Bucket bucket = buckets.get(key); if (bucket == null) { return; } if (bucket.remove()) { buckets.remove(key); } }
/** Add one sample of {@code value} (to bucket) at {@code timeMsSinceEpoch}. */ public void add(long timeMsSinceEpoch, long value) { long key = key(timeMsSinceEpoch); Bucket bucket = buckets.computeIfAbsent(key, k -> new Bucket(this)); bucket.add(this, value); }