Class: AMQ::BitSet

### Home Classes Methods

### In Files

- lib/amq/bit_set.rb

### Parent

Object

### Methods

- ::new
- ::number_of_trailing_ones
- #[]
- #check_range
- #clear
- #get
- #init_words
- #next_clear_bit
- #set
- #to_s
- #unset
- #word_index

### Class/Module Index

Quicksearch

- AMQ
- AMQ::BitSet
- AMQ::Endianness
- AMQ::Hacks
- AMQ::IntAllocator
- AMQ::Pack
- AMQ::Protocol
- AMQ::Protocol::AccessRefused
- AMQ::Protocol::BadResponseError
- AMQ::Protocol::Basic
- AMQ::Protocol::Basic::Ack
- AMQ::Protocol::Basic::Cancel
- AMQ::Protocol::Basic::CancelOk
- AMQ::Protocol::Basic::Consume
- AMQ::Protocol::Basic::ConsumeOk
- AMQ::Protocol::Basic::Deliver
- AMQ::Protocol::Basic::Get
- AMQ::Protocol::Basic::GetEmpty
- AMQ::Protocol::Basic::GetOk
- AMQ::Protocol::Basic::Nack
- AMQ::Protocol::Basic::Publish
- AMQ::Protocol::Basic::Qos
- AMQ::Protocol::Basic::QosOk
- AMQ::Protocol::Basic::Recover
- AMQ::Protocol::Basic::RecoverAsync
- AMQ::Protocol::Basic::RecoverOk
- AMQ::Protocol::Basic::Reject
- AMQ::Protocol::Basic::Return
- AMQ::Protocol::BodyFrame
- AMQ::Protocol::Channel
- AMQ::Protocol::Channel::Close
- AMQ::Protocol::Channel::CloseOk
- AMQ::Protocol::Channel::Flow
- AMQ::Protocol::Channel::FlowOk
- AMQ::Protocol::Channel::Open
- AMQ::Protocol::Channel::OpenOk
- AMQ::Protocol::ChannelError
- AMQ::Protocol::Class
- AMQ::Protocol::CommandInvalid
- AMQ::Protocol::Confirm
- AMQ::Protocol::Confirm::Select
- AMQ::Protocol::Confirm::SelectOk
- AMQ::Protocol::Connection
- AMQ::Protocol::Connection::Blocked
- AMQ::Protocol::Connection::Close
- AMQ::Protocol::Connection::CloseOk
- AMQ::Protocol::Connection::Open
- AMQ::Protocol::Connection::OpenOk
- AMQ::Protocol::Connection::Secure
- AMQ::Protocol::Connection::SecureOk
- AMQ::Protocol::Connection::Start
- AMQ::Protocol::Connection::StartOk
- AMQ::Protocol::Connection::Tune
- AMQ::Protocol::Connection::TuneOk
- AMQ::Protocol::Connection::Unblocked
- AMQ::Protocol::ConnectionForced
- AMQ::Protocol::ContentTooLarge
- AMQ::Protocol::EmptyResponseError
- AMQ::Protocol::Error
- AMQ::Protocol::Exchange
- AMQ::Protocol::Exchange::Bind
- AMQ::Protocol::Exchange::BindOk
- AMQ::Protocol::Exchange::Declare
- AMQ::Protocol::Exchange::DeclareOk
- AMQ::Protocol::Exchange::Delete
- AMQ::Protocol::Exchange::DeleteOk
- AMQ::Protocol::Exchange::Unbind
- AMQ::Protocol::Exchange::UnbindOk
- AMQ::Protocol::Float32Bit
- AMQ::Protocol::Frame
- AMQ::Protocol::FrameError
- AMQ::Protocol::FrameSubclass
- AMQ::Protocol::FrameTypeError
- AMQ::Protocol::HardError
- AMQ::Protocol::HeaderFrame
- AMQ::Protocol::HeartbeatFrame
- AMQ::Protocol::InternalError
- AMQ::Protocol::InvalidPath
- AMQ::Protocol::Method
- AMQ::Protocol::MethodFrame
- AMQ::Protocol::NoConsumers
- AMQ::Protocol::NoRoute
- AMQ::Protocol::NotAllowed
- AMQ::Protocol::NotFound
- AMQ::Protocol::NotImplemented
- AMQ::Protocol::PreconditionFailed
- AMQ::Protocol::Queue
- AMQ::Protocol::Queue::Bind
- AMQ::Protocol::Queue::BindOk
- AMQ::Protocol::Queue::Declare
- AMQ::Protocol::Queue::DeclareOk
- AMQ::Protocol::Queue::Delete
- AMQ::Protocol::Queue::DeleteOk
- AMQ::Protocol::Queue::Purge
- AMQ::Protocol::Queue::PurgeOk
- AMQ::Protocol::Queue::Unbind
- AMQ::Protocol::Queue::UnbindOk
- AMQ::Protocol::ResourceError
- AMQ::Protocol::ResourceLocked
- AMQ::Protocol::SoftError
- AMQ::Protocol::SyntaxError
- AMQ::Protocol::Table
- AMQ::Protocol::Table::InvalidTableError
- AMQ::Protocol::TableValueDecoder
- AMQ::Protocol::TableValueEncoder
- AMQ::Protocol::Tx
- AMQ::Protocol::Tx::Commit
- AMQ::Protocol::Tx::CommitOk
- AMQ::Protocol::Tx::Rollback
- AMQ::Protocol::Tx::RollbackOk
- AMQ::Protocol::Tx::Select
- AMQ::Protocol::Tx::SelectOk
- AMQ::Protocol::TypeConstants
- AMQ::Protocol::UnexpectedFrame
- AMQ::URI

No matching classes.

# AMQ::BitSet

Very minimalistic, pure Ruby implementation of bit set. Inspired by java.util.BitSet, although significantly smaller in scope.

Originally part of amqp gem. Extracted to make it possible for Bunny to use it.

### Constants

ADDRESS_BITS_PER_WORD

  API

BITS_PER_WORD
WORD_MASK

### Attributes

words_in_use[R]

### Public Class Methods

new(nbits) click to toggle source

@param [Integer] Number of bits in the set @api public

    # File lib/amq/bit_set.rb, line 20
    def initialize(nbits)
      @nbits = nbits

      self.init_words(nbits)
    end

number_of_trailing_ones(num) click to toggle source

@private

    # File lib/amq/bit_set.rb, line 92
    def self.number_of_trailing_ones(num)
      0.upto(BITS_PER_WORD) do |bit|
        return bit if num[bit] == 0
      end
      BITS_PER_WORD
    end

### Public Instance Methods

[](i) click to toggle source
Alias for: get
clear() click to toggle source

Clears all bits in the set @api public

    # File lib/amq/bit_set.rb, line 65
    def clear
      self.init_words(@nbits)
    end

get(i) click to toggle source

Fetches flag value for given bit.

@param [Integer] A bit to fetch @return [Boolean] true if given bit is set, false otherwise @api public

    # File lib/amq/bit_set.rb, line 42
    def get(i)
      check_range(i)
      w = self.word_index(i)

      (@words[w] & (1 << i % BITS_PER_WORD)) != 0
    end

Also aliased as: []
next_clear_bit() click to toggle source

    # File lib/amq/bit_set.rb, line 69
    def next_clear_bit()
      @words.each_with_index do |word, i|
        if word == WORD_MASK
          next
        end
        return i * BITS_PER_WORD + BitSet.number_of_trailing_ones(word)
      end
      -1
    end

set(i) click to toggle source

Sets (flags) given bit. This method allows bits to be set more than once in a row, no exception will be raised.

@param [Integer] A bit to set @api public

    # File lib/amq/bit_set.rb, line 30
    def set(i)
      check_range(i)
      w = self.word_index(i)
      result = @words[w] |= (1 << (i % BITS_PER_WORD))
      result
    end

to_s() click to toggle source

    # File lib/amq/bit_set.rb, line 79
    def to_s
      result = ""
      @words.each do |w|
        result += w.to_s(2).rjust(BITS_PER_WORD,'0') + ":"
      end
      result
    end

unset(i) click to toggle source

Unsets (unflags) given bit. This method allows bits to be unset more than once in a row, no exception will be raised.

@param [Integer] A bit to unset @api public

    # File lib/amq/bit_set.rb, line 54
    def unset(i)
      check_range(i)
      w = self.word_index(i)
      return if w.nil?

      result = @words[w] &= ~(1 << i % BITS_PER_WORD)
      result
    end

word_index(i) click to toggle source

@private

    # File lib/amq/bit_set.rb, line 100
    def word_index(i)
      i >> ADDRESS_BITS_PER_WORD
    end

### Protected Instance Methods

check_range(i) click to toggle source

    # File lib/amq/bit_set.rb, line 112
    def check_range(i)
      if i < 0 || i >= @nbits
        raise IndexError.new("Cannot access bit #{i} from a BitSet with #{@nbits} bits")
      end
    end

init_words(nbits) click to toggle source

@private

    # File lib/amq/bit_set.rb, line 107
    def init_words(nbits)
      n      = word_index(nbits-1) + 1
      @words = Array.new(n) { 0 }
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.