This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

sliding_window_map.rb

By: a guest on Sep 3rd, 2012  |  syntax: Ruby  |  size: 1.11 KB  |  views: 83  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # By Pseudon Mousie
  2. class SlidingWindowMap
  3.  
  4.   # Create a hash, with the keys as keys
  5.   # The values will be the timestamps when the key was used.
  6.   def initialize(keys, max_count, period_ms, verbose=false)
  7.     @verbose = verbose
  8.     @key_counts = Hash.new
  9.     keys.each{|key|
  10.       @key_counts[key] = []
  11.     }
  12.     @max_count = max_count
  13.     # store period in floating point seconds to match Time objects
  14.     @period_f_sec = period_ms / 1000.0
  15.     puts "keycounts:#{@key_counts.inspect}..." if @verbose
  16.   end
  17.  
  18.   def getNextKey()
  19.     @key_counts.keys.each{|key|
  20.     puts "checking #{key}..." if @verbose
  21.       return key if has_uses_remaining?(key)
  22.     }
  23.     nil
  24.   end
  25.  
  26.   # Calling this function counts as a "use"
  27.   # unless there are no uses available.
  28.   def has_uses_remaining?(key)
  29.     times_used = @key_counts[key]
  30.     # Clear out expired uses
  31.     while !(times_used.empty?) && (times_used.first < Time.now)
  32.       times_used.shift
  33.     end
  34.     if times_used.length < @max_count
  35.       times_used.push(Time.now + @period_f_sec)
  36.       return true
  37.     else
  38.       return false
  39.     end
  40.   end
  41. end
clone this paste RAW Paste Data