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
102 103 104 |
# File 'lib/io/event/selector/select.rb', line 102 def events @events end |
#fiber ⇒ Object
Returns the value of attribute fiber
102 103 104 |
# File 'lib/io/event/selector/select.rb', line 102 def fiber @fiber end |
#tail ⇒ Object
Returns the value of attribute tail
102 103 104 |
# File 'lib/io/event/selector/select.rb', line 102 def tail @tail end |
Instance Method Details
#alive? ⇒ Boolean
103 104 105 |
# File 'lib/io/event/selector/select.rb', line 103 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.
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/io/event/selector/select.rb', line 108 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
133 134 135 136 137 138 139 |
# File 'lib/io/event/selector/select.rb', line 133 def each(&block) if fiber = self.fiber yield fiber, self.events end self.tail&.each(&block) end |
#invalidate ⇒ Object
129 130 131 |
# File 'lib/io/event/selector/select.rb', line 129 def invalidate self.fiber = nil end |