Class: Irc::QueueRing
Instance Method Summary collapse
- #clear ⇒ Object
- #empty? ⇒ Boolean
-
#initialize ⇒ QueueRing
constructor
A QueueRing is implemented as an array with elements in the form [chan, [message1, message2, …] Note that the channel
chan
has no actual bearing with the channels to which messages will be sent. - #length ⇒ Object (also: #size)
- #next ⇒ Object
- #push(mess, chan) ⇒ Object
- #shift ⇒ Object
Constructor Details
#initialize ⇒ QueueRing
A QueueRing is implemented as an array with elements in the form
- chan, [message1, message2, …
-
Note that the channel
chan
has no actual bearing with the channels to which messages will be sent
92 93 94 95 |
# File 'lib/rbot/ircsocket.rb', line 92 def initialize @storage = Array.new @last_idx = -1 end |
Instance Method Details
#clear ⇒ Object
97 98 99 100 |
# File 'lib/rbot/ircsocket.rb', line 97 def clear @storage.clear @last_idx = -1 end |
#empty? ⇒ Boolean
111 112 113 |
# File 'lib/rbot/ircsocket.rb', line 111 def empty? @storage.empty? end |
#length ⇒ Object Also known as: size
102 103 104 105 106 107 108 |
# File 'lib/rbot/ircsocket.rb', line 102 def length len = 0 @storage.each {|c| len += c[1].size } return len end |
#next ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/rbot/ircsocket.rb', line 126 def next if empty? warning "trying to access empty ring" return nil end save_idx = @last_idx @last_idx = (@last_idx + 1) % @storage.size mess = @storage[@last_idx][1].first @last_idx = save_idx return mess end |
#push(mess, chan) ⇒ Object
115 116 117 118 119 120 121 122 123 124 |
# File 'lib/rbot/ircsocket.rb', line 115 def push(mess, chan) cmess = @storage.assoc(chan) if cmess idx = @storage.index(cmess) cmess[1] << mess @storage[idx] = cmess else @storage << [chan, [mess]] end end |
#shift ⇒ Object
138 139 140 141 142 143 144 145 146 147 |
# File 'lib/rbot/ircsocket.rb', line 138 def shift if empty? warning "trying to access empty ring" return nil end @last_idx = (@last_idx + 1) % @storage.size mess = @storage[@last_idx][1].shift @storage.delete(@storage[@last_idx]) if @storage[@last_idx][1] == [] return mess end |