Sha256: c0e41caf4a0cdb34305c64a609e54c700f3be27872f7cbc8e9d26c7522f6b688

Contents?: true

Size: 1.33 KB

Versions: 93

Compression:

Stored size: 1.33 KB

Contents

require "set"
require "thread"
require "monitor"

module Bunny
  module Concurrent
    # Minimalistic implementation of a synchronized fixnum value,
    # designed after (but not implementing the entire API of!)
    #
    # @note Designed to be intentionally minimalistic and only cover Bunny's needs.
    #
    # @api public
    class AtomicFixnum
      def initialize(n = 0)
        @n     = n
        @mutex = Monitor.new
      end

      def get
        @mutex.synchronize do
          @n
        end
      end
      alias to_i get

      def set(n)
        @mutex.synchronize do
          @n = n
        end
      end

      def increment
        @mutex.synchronize do
          @n = @n + 1
        end
      end
      alias inc increment
      alias increment_and_get increment

      def get_and_add(i)
        @mutex.synchronize do
          v = @n
          @n = @n + i

          v
        end
      end

      def get_and_increment
        @mutex.synchronize do
          v = @n
          @n = @n + 1

          v
        end
      end

      def decrement
        @mutex.synchronize do
          @n = @n - 1
        end
      end
      alias dec decrement
      alias decrement_and_get decrement

      def ==(m)
        @mutex.synchronize { @n == m }
      end

      def ===(v)
        @mutex.synchronize { @n === v }
      end
    end
  end
end

Version data entries

93 entries across 93 versions & 2 rubygems

Version Path
bunny-2.23.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.22.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.21.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.20.3 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.20.2 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.20.1 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.20.0 lib/bunny/concurrent/atomic_fixnum.rb
garaio_bunny-2.19.2 lib/bunny/concurrent/atomic_fixnum.rb
garaio_bunny-2.19.1 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.19.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.18.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.17.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.16.1 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.15.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.14.4 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.14.3 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.14.2 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.14.1 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.13.0 lib/bunny/concurrent/atomic_fixnum.rb
bunny-2.12.1 lib/bunny/concurrent/atomic_fixnum.rb