amqp 1.0.0.pre1 → 1.0.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,8 +24,8 @@ Gem::Specification.new do |s|
24
24
 
25
25
  # Dependencies
26
26
  s.add_dependency "eventmachine"
27
- s.add_dependency "amq-client", "~> 1.0.0.pre1"
28
- s.add_dependency "amq-protocol", "~> 1.0.0.pre1"
27
+ s.add_dependency "amq-client", "~> 1.0.0.pre2"
28
+ s.add_dependency "amq-protocol", "~> 1.0.0.pre6"
29
29
 
30
30
  begin
31
31
  require "changelog"
@@ -1,80 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
- module AMQP
4
- # Very minimalistic, pure Ruby implementation of bit set. Inspired by java.util.BitSet,
5
- # although significantly smaller in scope.
6
- class BitSet
7
-
8
- #
9
- # API
10
- #
11
-
12
- ADDRESS_BITS_PER_WORD = 6
13
- BITS_PER_WORD = (1 << ADDRESS_BITS_PER_WORD)
14
- WORD_MASK = 0xffffffffffffffff
15
-
16
- # @param [Integer] Number of bits in the set
17
- # @api public
18
- def initialize(nbits)
19
- @nbits = nbits
20
-
21
- self.init_words(nbits)
22
- end # initialize(nbits)
23
-
24
- # Sets (flags) given bit. This method allows bits to be set more than once in a row, no exception will be raised.
25
- #
26
- # @param [Integer] A bit to set
27
- # @api public
28
- def set(i)
29
- w = self.word_index(i)
30
- @words[w] |= (1 << i)
31
- end # set(i)
32
-
33
- # Fetches flag value for given bit.
34
- #
35
- # @param [Integer] A bit to fetch
36
- # @return [Boolean] true if given bit is set, false otherwise
37
- # @api public
38
- def get(i)
39
- w = self.word_index(i)
40
-
41
- (@words[w] & (1 << i)) != 0
42
- end # get(i)
43
- alias [] get
3
+ require "amq/bit_set"
44
4
 
45
- # Unsets (unflags) given bit. This method allows bits to be unset more than once in a row, no exception will be raised.
46
- #
47
- # @param [Integer] A bit to unset
48
- # @api public
49
- def unset(i)
50
- w = self.word_index(i)
51
- return if w.nil?
52
-
53
- @words[w] &= ~(1 << i)
54
- end # unset(i)
55
-
56
- # Clears all bits in the set
57
- # @api public
58
- def clear
59
- self.init_words(@nbits)
60
- end # clear
61
-
62
-
63
- #
64
- # Implementation
65
- #
66
-
67
- protected
68
-
69
- # @private
70
- def init_words(nbits)
71
- n = word_index(nbits-1) + 1
72
- @words = Array.new(n) { 1 }
73
- end # init_words
74
-
75
- # @private
76
- def word_index(i)
77
- i >> ADDRESS_BITS_PER_WORD
78
- end # word_index(i)
79
- end # BitSet
5
+ module AMQP
6
+ # A forward reference for AMQP::BitSet that was extracted to amq-protocol
7
+ # to make it possible to reuse it in Bunny.
8
+ BitSet = AMQ::BitSet
80
9
  end # AMQP
@@ -1,96 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "amqp/bit_set"
3
+ require "amq/int_allocator"
4
4
 
5
5
  module AMQP
6
- # Simple bitset-based integer allocator, heavily inspired by com.rabbitmq.utility.IntAllocator class
7
- # in the RabbitMQ Java client.
8
- #
9
- # Unlike monotonically incrementing identifier, this allocator is suitable for very long running programs
10
- # that aggressively allocate and release channels.
11
- class IntAllocator
12
-
13
- #
14
- # API
15
- #
16
-
17
- # @return [Integer] Number of integers in the allocation range
18
- attr_reader :number_of_bits
19
- # @return [Integer] Upper boundary of the integer range available for allocation
20
- attr_reader :hi
21
- # @return [Integer] Lower boundary of the integer range available for allocation
22
- attr_reader :lo
23
-
24
- # @param [Integer] lo Lower boundary of the integer range available for allocation
25
- # @param [Integer] hi Upper boundary of the integer range available for allocation
26
- # @raise [ArgumentError] if upper boundary is not greater than the lower one
27
- def initialize(lo, hi)
28
- raise ArgumentError.new "upper boundary must be greater than the lower one (given: hi = #{hi}, lo = #{lo})" unless hi > lo
29
-
30
- @hi = hi
31
- @lo = lo
32
-
33
- @number_of_bits = hi - lo
34
- @range = Range.new(1, @number_of_bits)
35
- @free_set = BitSet.new(@number_of_bits)
36
- end # initialize(hi, lo)
37
-
38
- # Attempts to allocate next available integer. If allocation succeeds, allocated value is returned.
39
- # Otherwise, nil is returned.
40
- #
41
- # Current implementation of this method is O(n), where n is number of bits in the range available for
42
- # allocation.
43
- #
44
- # @return [Integer] Allocated integer if allocation succeeded. nil otherwise.
45
- def allocate
46
- if n = find_unallocated_position
47
- @free_set.set(n)
48
-
49
- n
50
- else
51
- -1
52
- end
53
- end # allocate
54
-
55
- # Releases previously allocated integer. If integer provided as argument was not previously allocated,
56
- # this method has no effect.
57
- #
58
- # @return [NilClass] nil
59
- def free(reservation)
60
- @free_set.unset(reservation)
61
- end # free(reservation)
62
- alias release free
63
-
64
- # @return [Boolean] true if provided argument was previously allocated, false otherwise
65
- def allocated?(reservation)
66
- @free_set.get(reservation)
67
- end # allocated?(reservation)
68
-
69
- # Releases the whole allocation range
70
- def reset
71
- @free_set.clear
72
- end # reset
73
-
74
-
75
-
76
- protected
77
-
78
- # This implementation is significantly less efficient
79
- # that what the RabbitMQ Java client has (based on java.lang.Long#nextSetBit and
80
- # java.lang.Long.numberOfTrailingZeros, and thus binary search over bits).
81
- # But for channel id generation, this is a good enough implementation.
82
- #
83
- # @private
84
- def find_unallocated_position
85
- r = nil
86
- @range.each do |i|
87
- if !@free_set.get(i)
88
- r = i
89
- break;
90
- end
91
- end
92
-
93
- r
94
- end # find_unallocated_position
95
- end # IntAllocator
6
+ # A forward reference for AMQP::IntAllocator that was extracted to amq-protocol
7
+ # to make it possible to reuse it in Bunny.
8
+ IntAllocator = AMQ::IntAllocator
96
9
  end # AMQP
@@ -6,5 +6,5 @@ module AMQP
6
6
  #
7
7
  # @see AMQ::Protocol::VERSION
8
8
  # @return [String] AMQP gem version
9
- VERSION = '1.0.0.pre1'
9
+ VERSION = '1.0.0.pre2'
10
10
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amqp
3
3
  version: !ruby/object:Gem::Version
4
- hash: 2787483469
4
+ hash: -1633158744
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
9
  - 0
10
10
  - pre
11
- - 1
12
- version: 1.0.0.pre1
11
+ - 2
12
+ version: 1.0.0.pre2
13
13
  platform: ruby
14
14
  authors:
15
15
  - Aman Gupta
@@ -19,7 +19,7 @@ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
21
 
22
- date: 2012-06-22 00:00:00 Z
22
+ date: 2012-07-03 00:00:00 Z
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency
25
25
  name: eventmachine
@@ -43,14 +43,14 @@ dependencies:
43
43
  requirements:
44
44
  - - ~>
45
45
  - !ruby/object:Gem::Version
46
- hash: 2787483469
46
+ hash: -1633158744
47
47
  segments:
48
48
  - 1
49
49
  - 0
50
50
  - 0
51
51
  - pre
52
- - 1
53
- version: 1.0.0.pre1
52
+ - 2
53
+ version: 1.0.0.pre2
54
54
  type: :runtime
55
55
  version_requirements: *id002
56
56
  - !ruby/object:Gem::Dependency
@@ -61,14 +61,14 @@ dependencies:
61
61
  requirements:
62
62
  - - ~>
63
63
  - !ruby/object:Gem::Version
64
- hash: 2787483469
64
+ hash: -1633158752
65
65
  segments:
66
66
  - 1
67
67
  - 0
68
68
  - 0
69
69
  - pre
70
- - 1
71
- version: 1.0.0.pre1
70
+ - 6
71
+ version: 1.0.0.pre6
72
72
  type: :runtime
73
73
  version_requirements: *id003
74
74
  description: Widely used, feature-rich asynchronous AMQP 0.9.1 client with batteries included.
@@ -350,7 +350,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
350
350
  requirements: []
351
351
 
352
352
  rubyforge_project: amqp
353
- rubygems_version: 1.8.15
353
+ rubygems_version: 1.8.24
354
354
  signing_key:
355
355
  specification_version: 3
356
356
  summary: Widely used, feature-rich asynchronous AMQP 0.9.1 client with batteries included