コード例 #1
0
        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);
        }
コード例 #2
0
 public RunningStatValueBucket(RunningStatValueBucket prev, long k, int n)
 {
     _prev = prev;
     _k    = k;
     _stat = new RunningStatValue[n];
     _n    = new double[n];
 }
コード例 #3
0
        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);
        }
コード例 #4
0
 public List <RunningStatValueBucket> GetBuckets(DateTime?utcNow = null)
 {
     return(RunningStatValueBucket.GetBuckets(ref _bucket, (utcNow ?? DateTime.UtcNow).Ticks / _window.Ticks));
 }
コード例 #5
0
 public RunningStatValueBucket GetBucket(DateTime?utcNow = null)
 {
     return(RunningStatValueBucket.GetBucket(ref _bucket, (utcNow ?? DateTime.UtcNow).Ticks / _window.Ticks, _n));
 }