Sha256: c59dd952bae789ac4c9792c86e0161414f1ae38ea6083405be588a417bcf8d14

Contents?: true

Size: 880 Bytes

Versions: 63

Compression:

Stored size: 880 Bytes

Contents

module Skylight
  module Util
    class UniformSample
      include Enumerable

      attr_reader :size, :count

      def initialize(size)
        @size   = size
        @count  = 0
        @values = []
      end

      def clear
        @count = 0
        @values.clear
        self
      end

      def length
        @size < @count ? @size : @count
      end

      def empty?
        @count == 0
      end

      def each
        i  = 0
        to = length

        while i < to
          yield @values[i]
          i += 1
        end

        self
      end

      def <<(v)
        if idx = increment!
          @values[idx] = v
        end

        self
      end

    private

      def increment!
        c = (@count += 1)

        if (c <= @size)
          c - 1
        else
          r = rand(@count)
          r if r < @size
        end
      end

    end
  end
end

Version data entries

63 entries across 63 versions & 1 rubygems

Version Path
skylight-0.3.21 lib/skylight/util/uniform_sample.rb
skylight-0.3.20 lib/skylight/util/uniform_sample.rb
skylight-0.3.19 lib/skylight/util/uniform_sample.rb
skylight-0.3.18 lib/skylight/util/uniform_sample.rb
skylight-0.3.17 lib/skylight/util/uniform_sample.rb
skylight-0.3.14 lib/skylight/util/uniform_sample.rb
skylight-0.3.13 lib/skylight/util/uniform_sample.rb
skylight-0.3.12 lib/skylight/util/uniform_sample.rb
skylight-0.3.11 lib/skylight/util/uniform_sample.rb
skylight-0.3.10 lib/skylight/util/uniform_sample.rb
skylight-0.3.8 lib/skylight/util/uniform_sample.rb
skylight-0.3.7 lib/skylight/util/uniform_sample.rb
skylight-0.3.6 lib/skylight/util/uniform_sample.rb
skylight-0.3.3 lib/skylight/util/uniform_sample.rb
skylight-0.3.2 lib/skylight/util/uniform_sample.rb
skylight-0.3.1 lib/skylight/util/uniform_sample.rb
skylight-0.3.0 lib/skylight/util/uniform_sample.rb
skylight-0.2.7 lib/skylight/util/uniform_sample.rb
skylight-0.2.6 lib/skylight/util/uniform_sample.rb
skylight-0.3.0.rc.6 lib/skylight/util/uniform_sample.rb