예제 #1
0
        /// <inheritdoc cref="IReservoir" />
        public IReservoirSnapshot GetSnapshot(bool resetReservoir)
        {
            var size = Math.Min((int)_count.GetValue(), _values.Length);

            if (size == 0)
            {
                return(new UniformSnapshot(0, 0.0, Enumerable.Empty <long>()));
            }

            var snapshotValues = new UserValueWrapper[size];

            Array.Copy(_values, snapshotValues, size);

            Array.Sort(snapshotValues, UserValueWrapper.Comparer);

            var minValue = snapshotValues[0].UserValue;
            var maxValue = snapshotValues[size - 1].UserValue;

            var result = new UniformSnapshot(
                _count.GetValue(),
                _sum.GetValue(),
                snapshotValues.Select(v => v.Value),
                true,
                minValue,
                maxValue);

            if (resetReservoir)
            {
                Array.Clear(_values, 0, snapshotValues.Length);
                _count.SetValue(0L);
                _sum.SetValue(0.0);
            }

            return(result);
        }
        // ReSharper restore MemberCanBePrivate.Global

        /// <inheritdoc cref="IReservoir" />
        public IReservoirSnapshot GetSnapshot(bool resetReservoir)
        {
            var size = Size;

            if (size == 0)
            {
                return(new UniformSnapshot(0, 0.0, Enumerable.Empty <long>()));
            }

            var snapshotValues = new UserValueWrapper[size];

            Array.Copy(_values, snapshotValues, size);

            if (resetReservoir)
            {
                _count.SetValue(0L);
                _sum.SetValue(0.0);
            }

            Array.Sort(snapshotValues, UserValueWrapper.Comparer);

            var minValue = snapshotValues[0].UserValue;
            var maxValue = snapshotValues[size - 1].UserValue;

            return(new UniformSnapshot(
                       _count.GetValue(),
                       _sum.GetValue(),
                       snapshotValues.Select(v => v.Value),
                       valuesAreSorted: true,
                       minUserValue: minValue,
                       maxUserValue: maxValue));
        }
예제 #3
0
        public Snapshot GetSnapshot(bool resetReservoir = false)
        {
            var size = this.Size;
            if (size == 0)
            {
                return new UniformSnapshot(0, Enumerable.Empty<long>());
            }

            UserValueWrapper[] values = new UserValueWrapper[size];
            Array.Copy(this.values, values, size);

            if (resetReservoir)
            {
                count.SetValue(0L);
            }

            Array.Sort(values, UserValueWrapper.Comparer);
            var minValue = values[0].UserValue;
            var maxValue = values[size - 1].UserValue;
            return new UniformSnapshot(this.count.Value, values.Select(v => v.Value), valuesAreSorted: true, minUserValue: minValue, maxUserValue: maxValue);
        }