Class: IO::Event::Selector::Select::Waiter
- Inherits:
-
Struct
- Object
- Struct
- IO::Event::Selector::Select::Waiter
- Defined in:
- lib/io/event/selector/select.rb
Instance Attribute Summary collapse
-
#events ⇒ Object
Returns the value of attribute events.
-
#fiber ⇒ Object
Returns the value of attribute fiber.
-
#tail ⇒ Object
Returns the value of attribute tail.
Instance Method Summary collapse
- #alive? ⇒ Boolean
-
#dispatch(events, &reactivate) ⇒ Object
Dispatch the given events to the list of waiting fibers.
- #each(&block) ⇒ Object
- #invalidate ⇒ Object
Instance Attribute Details
#events ⇒ Object
Returns the value of attribute events
114 115 116 |
# File 'lib/io/event/selector/select.rb', line 114 def events @events end |
#fiber ⇒ Object
Returns the value of attribute fiber
114 115 116 |
# File 'lib/io/event/selector/select.rb', line 114 def fiber @fiber end |
#tail ⇒ Object
Returns the value of attribute tail
114 115 116 |
# File 'lib/io/event/selector/select.rb', line 114 def tail @tail end |
Instance Method Details
#alive? ⇒ Boolean
115 116 117 |
# File 'lib/io/event/selector/select.rb', line 115 def alive? self.fiber&.alive? end |
#dispatch(events, &reactivate) ⇒ Object
Dispatch the given events to the list of waiting fibers. If the fiber was not waiting for the given events, it is reactivated by calling the given block.
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/io/event/selector/select.rb', line 120 def dispatch(events, &reactivate) # We capture the tail here, because calling reactivate might modify it: tail = self.tail if fiber = self.fiber if fiber.alive? revents = events & self.events if revents.zero? reactivate.call(self) else self.fiber = nil fiber.transfer(revents) end else self.fiber = nil end end tail&.dispatch(events, &reactivate) end |
#each(&block) ⇒ Object
145 146 147 148 149 150 151 |
# File 'lib/io/event/selector/select.rb', line 145 def each(&block) if fiber = self.fiber yield fiber, self.events end self.tail&.each(&block) end |
#invalidate ⇒ Object
141 142 143 |
# File 'lib/io/event/selector/select.rb', line 141 def invalidate self.fiber = nil end |