Skip to content

Commit

Permalink
try another way to fix overloading
Browse files Browse the repository at this point in the history
  • Loading branch information
Clonkk committed Nov 4, 2024
1 parent 235be8b commit 89da3ab
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions zmq/connections.nim
Original file line number Diff line number Diff line change
Expand Up @@ -93,27 +93,29 @@ proc terminate*(ctx: ZContext) =
]#

# Some option take cstring
proc setsockopt_impl(s: ZSocket, option: ZSockOptions, optval: string) =
var val: string = optval
if setsockopt(s, option, cstring(val), val.len) != 0:
zmqError()

# Some option take cint, int64 or uint64
proc setsockopt_impl[T: string|SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: T) =
when T is string:
var val: string = optval
if setsockopt(s, option, cstring(val), val.len) != 0:
zmqError()
elif T is SomeOrdinal:
var val: T = optval
if setsockopt(s, option, addr(val), sizeof(val)) != 0:
zmqError()
proc setsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: T) =
var val: T = optval
if setsockopt(s, option, addr(val), sizeof(val)) != 0:
zmqError()

# some sockopt returns integer values
proc getsockopt_impl[T: SomeOrdinal|string](s: ZSocket, option: ZSockOptions, optval: var T) =
when T is string:
var optval_len: int = optval.len
if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0:
zmqError()
elif T is SomeOrdinal:
var optval_len: int = sizeof(optval)
if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0:
zmqError()
proc getsockopt_impl(s: ZSocket, option: ZSockOptions, optval: var string) =
var optval_len: int = optval.len

if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0:
zmqError()

proc getsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: var T) =
var optval_len: int = sizeof(optval)

if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0:
zmqError()

#[
Public set/get sockopt function on ZSocket / ZConnection
Expand All @@ -123,7 +125,7 @@ proc setsockopt*[T: SomeOrdinal|string](s: ZSocket, option: ZSockOptions, optval
##
## Careful, the ``sizeof`` of ``optval`` depends on the ``ZSockOptions`` passed.
## Check http://api.zeromq.org/4-2:zmq-setsockopt
setsockopt_impl[T](s, option, optval)
setsockopt_impl(s, option, optval)

proc setsockopt[T: SomeOrdinal|string](c: ZConnectionImpl, option: ZSockOptions, optval: T) =
## Internal
Expand Down

0 comments on commit 89da3ab

Please sign in to comment.