diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2017-11-22 14:43:10 +0000 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-11-22 15:43:10 +0100 |
commit | d3394be5559c324da1c6b576d0ae9bfa966698d9 (patch) | |
tree | 72698b80e6045f35f783abe55405500b19808475 /lib/pure/ioselects/ioselectors_poll.nim | |
parent | 2c584cdb3d71f0cd811e3774c49db34735040032 (diff) | |
download | Nim-d3394be5559c324da1c6b576d0ae9bfa966698d9.tar.gz |
Async upcoming (#6585)
* Merge upcoming async with current. * Various improvements to selectors (mostly docs). Two changes to highlight: * Renamed ``setEvent`` to ``trigger`` * Reused setBlocking from nativesockets. * Various changes/fixes to asyncdispatch after upcoming merge. * Make some attempts to be compatible with older selectors. * Reuse epoll module in ioselectors_epoll.
Diffstat (limited to 'lib/pure/ioselects/ioselectors_poll.nim')
-rw-r--r-- | lib/pure/ioselects/ioselectors_poll.nim | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/lib/pure/ioselects/ioselectors_poll.nim b/lib/pure/ioselects/ioselectors_poll.nim index 1b90e0806..cc06aa592 100644 --- a/lib/pure/ioselects/ioselectors_poll.nim +++ b/lib/pure/ioselects/ioselectors_poll.nim @@ -208,7 +208,7 @@ proc newSelectEvent*(): SelectEvent = result.rfd = fds[0] result.wfd = fds[1] -proc setEvent*(ev: SelectEvent) = +proc trigger*(ev: SelectEvent) = var data: uint64 = 1 if posix.write(ev.wfd, addr data, sizeof(uint64)) != sizeof(uint64): raiseIOSelectorsError(osLastError()) @@ -279,16 +279,19 @@ proc select*[T](s: Selector[T], timeout: int): seq[ReadyKey] = template isEmpty*[T](s: Selector[T]): bool = (s.count == 0) -proc getData*[T](s: Selector[T], fd: SocketHandle|int): T = +proc contains*[T](s: Selector[T], fd: SocketHandle|int): bool {.inline.} = + return s.fds[fd].ident != 0 + +proc getData*[T](s: Selector[T], fd: SocketHandle|int): var T = let fdi = int(fd) s.checkFd(fdi) - if s.fds[fdi].ident != 0: + if fdi in s: result = s.fds[fdi].data proc setData*[T](s: Selector[T], fd: SocketHandle|int, data: T): bool = let fdi = int(fd) s.checkFd(fdi) - if s.fds[fdi].ident != 0: + if fdi in s: s.fds[fdi].data = data result = true @@ -297,8 +300,8 @@ template withData*[T](s: Selector[T], fd: SocketHandle|int, value, mixin checkFd let fdi = int(fd) s.checkFd(fdi) - if s.fds[fdi].ident != 0: - var value = addr(s.fds[fdi].data) + if fdi in s: + var value = addr(s.getData(fdi)) body template withData*[T](s: Selector[T], fd: SocketHandle|int, value, body1, @@ -306,8 +309,8 @@ template withData*[T](s: Selector[T], fd: SocketHandle|int, value, body1, mixin checkFd let fdi = int(fd) s.checkFd(fdi) - if s.fds[fdi].ident != 0: - var value = addr(s.fds[fdi].data) + if fdi in s: + var value = addr(s.getData(fdi)) body1 else: body2 |