void StatFile::flushOneExpBucket() { // flush the bucket being shifted out, but nothing else Bucket &eb0(expBucket[0]); Log(LL_Debug, "istat") << "StatFile::flushOneExpBucket()" << eb0.time(); if (eb0.time() > 0) { int64_t ix = mapTimeToBucketIndex(eb0.time()); int64_t oix = mapTimeToBucketIndex(eb0.time() - fileHeader_->season); Bucket *wb = writableBucket(ix); Bucket const &o = bucket(oix); if (o.time() > 0) { *wb = o; wb->expUpdate(eb0, fileHeader_->lambda); } else { *wb = eb0; } } // must move one over memmove(expBucket, &expBucket[1], sizeof(expBucket)-sizeof(expBucket[0])); expBucket[sizeof(expBucket)/sizeof(expBucket[0])-1] = Bucket(true); }