class WebMock::Util::HashCounter

def each(&block)

def each(&block)
  @order.to_a.sort_by { |a| a[1] }.each do |a|
    yield(a[0], hash[a[0]])
  end
end

def get(key)

def get(key)
  @lock.synchronize do
    hash[key]
  end
end

def initialize

def initialize
  self.hash = Hash.new(0)
  @order = {}
  @max = 0
  @lock = ::Mutex.new
end

def put(key, num=1)

def put(key, num=1)
  @lock.synchronize do
    hash[key] += num
    @order[key] = @max += 1
  end
end

def select(&block)

def select(&block)
  return unless block_given?
  @lock.synchronize do
    hash.select(&block)
  end
end