Sha256: 196d732a1475c3a97d12a1cd03721c473a380d901233a47e90287bd6f4ca31bb

Contents?: true

Size: 1.09 KB

Versions: 8

Compression:

Stored size: 1.09 KB

Contents

require File.expand_path('../../core', __FILE__)

module Drone
  class UniformSample
    
    ##
    # Create a new instance.
    # 
    # @param [String] id A string which will be used by distributed
    #   storage backend to use the same value for all instances with
    #   the same id
    # @param [Number] size The size of the requested array
    # 
    def initialize(id, size)
      @id = id
      @values = Drone::request_fixed_size_array("#{id}:values", size, 0)
      @count = Drone::request_number("#{id}:count", 0)
    end
  
    # def clear
    #   @values.size.times do |n|
    #     @values[n] = 0
    #   end
    # 
    #   @count.set(0)
    # end
  
    def size
      c = @count.get
      (c > @values.size) ? @values.size : c
    end
  
    def update(val)
      @count.inc
      count = @count.get
      if count <= @values.size
        @values[count - 1] = val
      else
        r = rand(2**64 - 1) % count
        if r < @values.size
          @values[r] = val
        end
      end
    end
  
    def values
      # only return @count elements
      @values[0,@count.get]
    end
  
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
drone-1.0.10 lib/drone/utils/uniform_sample.rb
drone-1.0.9 lib/drone/utils/uniform_sample.rb
drone-1.0.8 lib/drone/utils/uniform_sample.rb
drone-1.0.7 lib/drone/utils/uniform_sample.rb
drone-1.0.6 lib/drone/utils/uniform_sample.rb
drone-1.0.5 lib/drone/utils/uniform_sample.rb
drone-1.0.4 lib/drone/utils/uniform_sample.rb
drone-1.0.1 lib/drone/utils/uniform_sample.rb