lib/hamster/experimental/mutable_queue.rb



require "forwardable"
require "hamster/queue"
require "hamster/read_copy_update"

module Hamster
  def self.mutable_queue(*items)
    MutableQueue.new(queue(*items))
  end

  class MutableQueue
    extend Forwardable
    include ReadCopyUpdate

    def enqueue(item)
      transform { |queue| queue.enqueue(item) }
    end
    def_delegate :self, :enqueue, :<<
    def_delegate :self, :enqueue, :add

    def dequeue
      head = nil
      transform do |queue|
        head = queue.head
        queue.dequeue
      end
      head
    end
  end
end