public static List <RunningStatValueBucket> GetBuckets(ref RunningStatValueBucket _bucket, long k) { var bucket = _bucket; if (bucket == null) { return(null); } var list = new List <RunningStatValueBucket>(); while (bucket != null) { if (bucket._k < k) { list.Add(bucket); } var bucket2 = bucket; bucket = bucket2._prev; bucket2._prev = null; } list.Reverse(); return(list); }
public RunningStatValueBucket(RunningStatValueBucket prev, long k, int n) { _prev = prev; _k = k; _stat = new RunningStatValue[n]; _n = new double[n]; }
public static RunningStatValueBucket GetBucket(ref RunningStatValueBucket _bucket, long k, int n) { int m = 0; _GetBucket: var bucket = _bucket; if (bucket == null) { var bucket2 = new RunningStatValueBucket(null, k, n); if (Interlocked.CompareExchange(ref _bucket, bucket2, null) != null) { if (m < 1) { m++; goto _GetBucket; } return(bucket2); // discard } return(bucket2); } if (bucket._k < k) { var bucket3 = new RunningStatValueBucket(bucket, k, n); if (Interlocked.CompareExchange(ref _bucket, bucket3, bucket) != bucket) { if (m < 1) { m++; goto _GetBucket; } return(bucket3); // discard } return(bucket3); } return(bucket); }
public List <RunningStatValueBucket> GetBuckets(DateTime?utcNow = null) { return(RunningStatValueBucket.GetBuckets(ref _bucket, (utcNow ?? DateTime.UtcNow).Ticks / _window.Ticks)); }
public RunningStatValueBucket GetBucket(DateTime?utcNow = null) { return(RunningStatValueBucket.GetBucket(ref _bucket, (utcNow ?? DateTime.UtcNow).Ticks / _window.Ticks, _n)); }