HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/rubygems-integration/all/gems/bunny-2.19.0/lib/bunny/concurrent/atomic_fixnum.rb
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