Fix some warnings. (#310)
* Fix some warnings messages. * More warning fixes. * Address review comments. Fix MacOS issues. * More warning fixes. * More Windows specific fixes. * Fix macos and windows warnings. * Fix warnings in timer.nim Refactor to remove `result`. Improve performance and behavior of timer to string procedure. Add tests.
This commit is contained in:
parent
24146463a3
commit
6525f4ce1d
|
@ -237,11 +237,11 @@ func getAsyncTimestamp*(a: Duration): auto {.inline.} =
|
|||
var res = nansec div milsec
|
||||
let mid = nansec mod milsec
|
||||
when defined(windows):
|
||||
res = min(cast[int64](high(int32) - 1), res)
|
||||
res = min(int64(high(int32) - 1), res)
|
||||
result = cast[DWORD](res)
|
||||
result += DWORD(min(1'i32, cast[int32](mid)))
|
||||
else:
|
||||
res = min(cast[int64](high(int32) - 1), res)
|
||||
res = min(int64(high(int32) - 1), res)
|
||||
result = cast[int32](res)
|
||||
result += min(1, cast[int32](mid))
|
||||
|
||||
|
|
|
@ -13,11 +13,10 @@ else:
|
|||
{.push raises: [].}
|
||||
|
||||
import std/[net, nativesockets]
|
||||
import stew/base10
|
||||
import ./asyncloop
|
||||
|
||||
when defined(windows) or defined(nimdoc):
|
||||
import os, winlean
|
||||
import os, winlean, stew/base10
|
||||
const
|
||||
asyncInvalidSocket* = AsyncFD(-1)
|
||||
TCP_NODELAY* = 1
|
||||
|
|
|
@ -433,7 +433,7 @@ proc selectInto*[T](s: Selector[T], timeout: int,
|
|||
if posix.read(cint(fdi), addr data,
|
||||
sizeof(SignalFdInfo)) != sizeof(SignalFdInfo):
|
||||
raiseIOSelectorsError(osLastError())
|
||||
if cast[int](data.ssi_pid) == pkey.param:
|
||||
if data.ssi_pid == uint32(pkey.param):
|
||||
rkey.events.incl(Event.Process)
|
||||
else:
|
||||
inc(i)
|
||||
|
|
|
@ -468,7 +468,7 @@ proc newTLSClientAsyncStream*(rsource: AsyncStreamReader,
|
|||
|
||||
if TLSFlags.NoVerifyHost in flags:
|
||||
sslClientInitFull(res.ccontext, addr res.x509, nil, 0)
|
||||
initNoAnchor(res.xwc, addr res.x509.vtable)
|
||||
x509NoanchorInit(res.xwc, addr res.x509.vtable)
|
||||
sslEngineSetX509(res.ccontext.eng, addr res.xwc.vtable)
|
||||
else:
|
||||
sslClientInitFull(res.ccontext, addr res.x509,
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
## This clock is slower then ``system`` clock.
|
||||
##
|
||||
## You can specify which timer you want to use ``-d:asyncTimer=<system/mono>``.
|
||||
import stew/base10
|
||||
|
||||
const asyncTimer* {.strdefine.} = "mono"
|
||||
|
||||
when (NimMajor, NimMinor) < (1, 4):
|
||||
|
@ -38,15 +40,15 @@ when defined(windows):
|
|||
## Timer resolution is millisecond.
|
||||
var t: FILETIME
|
||||
getSystemTimeAsFileTime(t)
|
||||
result = ((cast[uint64](t.dwHighDateTime) shl 32) or
|
||||
cast[uint64](t.dwLowDateTime)) div 10_000
|
||||
((cast[uint64](t.dwHighDateTime) shl 32) or
|
||||
cast[uint64](t.dwLowDateTime)) div 10_000
|
||||
|
||||
proc fastEpochTimeNano(): uint64 {.inline.} =
|
||||
## Timer resolution is nanosecond.
|
||||
var t: FILETIME
|
||||
getSystemTimeAsFileTime(t)
|
||||
result = ((cast[uint64](t.dwHighDateTime) shl 32) or
|
||||
cast[uint64](t.dwLowDateTime)) * 100
|
||||
((cast[uint64](t.dwHighDateTime) shl 32) or
|
||||
cast[uint64](t.dwLowDateTime)) * 100
|
||||
|
||||
else:
|
||||
proc QueryPerformanceCounter*(res: var uint64) {.
|
||||
|
@ -61,14 +63,13 @@ when defined(windows):
|
|||
## Procedure's resolution is nanosecond.
|
||||
var res: uint64
|
||||
QueryPerformanceCounter(res)
|
||||
result = res * queryFrequencyN
|
||||
res * queryFrequencyN
|
||||
|
||||
proc fastEpochTime*(): uint64 {.
|
||||
inline, deprecated: "Use Moment.now()".} =
|
||||
proc fastEpochTime*(): uint64 {.inline, deprecated: "Use Moment.now()".} =
|
||||
## Procedure's resolution is millisecond.
|
||||
var res: uint64
|
||||
QueryPerformanceCounter(res)
|
||||
result = res div queryFrequencyM
|
||||
res div queryFrequencyM
|
||||
|
||||
proc setupQueryFrequence() =
|
||||
var freq: uint64
|
||||
|
@ -94,15 +95,13 @@ elif defined(macosx):
|
|||
## Procedure's resolution is millisecond.
|
||||
var t: Timeval
|
||||
posix_gettimeofday(t)
|
||||
result = (cast[uint64](t.tv_sec) * 1_000 +
|
||||
cast[uint64](t.tv_usec) div 1_000)
|
||||
uint64(t.tv_sec) * 1_000 + uint64(t.tv_usec) div 1_000
|
||||
|
||||
proc fastEpochTimeNano(): uint64 {.inline.} =
|
||||
## Procedure's resolution is nanosecond.
|
||||
var t: Timeval
|
||||
posix_gettimeofday(t)
|
||||
result = (cast[uint64](t.tv_sec) * 1_000_000_000 +
|
||||
cast[uint64](t.tv_usec) * 1_000)
|
||||
uint64(t.tv_sec) * 1_000_000_000 + uint64(t.tv_usec) * 1_000
|
||||
else:
|
||||
type
|
||||
MachTimebaseInfo {.importc: "struct mach_timebase_info",
|
||||
|
@ -126,12 +125,12 @@ elif defined(macosx):
|
|||
proc fastEpochTime*(): uint64 {.
|
||||
inline, deprecated: "Use Moment.now()".} =
|
||||
## Procedure's resolution is millisecond.
|
||||
result = (mach_absolute_time() * queryFrequencyN) div queryFrequencyD
|
||||
result = result div 1_000_000
|
||||
let res = (mach_absolute_time() * queryFrequencyN) div queryFrequencyD
|
||||
res div 1_000_000
|
||||
|
||||
proc fastEpochTimeNano(): uint64 {.inline.} =
|
||||
## Procedure's resolution is nanosecond.
|
||||
result = (mach_absolute_time() * queryFrequencyN) div queryFrequencyD
|
||||
(mach_absolute_time() * queryFrequencyN) div queryFrequencyD
|
||||
|
||||
setupQueryFrequence()
|
||||
|
||||
|
@ -144,15 +143,13 @@ elif defined(posix):
|
|||
## Procedure's resolution is millisecond.
|
||||
var t: Timespec
|
||||
discard clock_gettime(CLOCK_REALTIME, t)
|
||||
result = (cast[uint64](t.tv_sec) * 1_000 +
|
||||
(cast[uint64](t.tv_nsec) div 1_000_000))
|
||||
uint64(t.tv_sec) * 1_000 + (uint64(t.tv_nsec) div 1_000_000)
|
||||
|
||||
proc fastEpochTimeNano(): uint64 {.inline.} =
|
||||
## Procedure's resolution is nanosecond.
|
||||
var t: Timespec
|
||||
discard clock_gettime(CLOCK_REALTIME, t)
|
||||
result = cast[uint64](t.tv_sec) * 1_000_000_000'u64 +
|
||||
cast[uint64](t.tv_nsec)
|
||||
uint64(t.tv_sec) * 1_000_000_000'u64 + uint64(t.tv_nsec)
|
||||
|
||||
else:
|
||||
proc fastEpochTime*(): uint64 {.
|
||||
|
@ -160,15 +157,13 @@ elif defined(posix):
|
|||
## Procedure's resolution is millisecond.
|
||||
var t: Timespec
|
||||
discard clock_gettime(CLOCK_MONOTONIC, t)
|
||||
result = (cast[uint64](t.tv_sec) * 1_000 +
|
||||
(cast[uint64](t.tv_nsec) div 1_000_000))
|
||||
uint64(t.tv_sec) * 1_000 + (uint64(t.tv_nsec) div 1_000_000)
|
||||
|
||||
proc fastEpochTimeNano(): uint64 {.inline.} =
|
||||
## Procedure's resolution is nanosecond.
|
||||
var t: Timespec
|
||||
discard clock_gettime(CLOCK_MONOTONIC, t)
|
||||
result = cast[uint64](t.tv_sec) * 1_000_000_000'u64 +
|
||||
cast[uint64](t.tv_nsec)
|
||||
uint64(t.tv_sec) * 1_000_000_000'u64 + uint64(t.tv_nsec)
|
||||
|
||||
elif defined(nimdoc):
|
||||
|
||||
|
@ -196,15 +191,15 @@ else:
|
|||
|
||||
func `+`*(a: Duration, b: Duration): Duration {.inline.} =
|
||||
## Duration + Duration = Duration
|
||||
result.value = a.value + b.value
|
||||
Duration(value: a.value + b.value)
|
||||
|
||||
func `+`*(a: Duration, b: Moment): Moment {.inline.} =
|
||||
## Duration + Moment = Moment
|
||||
result.value = a.value + b.value
|
||||
Moment(value: a.value + b.value)
|
||||
|
||||
func `+`*(a: Moment, b: Duration): Moment {.inline.} =
|
||||
## Moment + Duration = Moment
|
||||
result.value = a.value + b.value
|
||||
Moment(value: a.value + b.value)
|
||||
|
||||
func `+=`*(a: var Moment, b: Duration) {.inline.} =
|
||||
## Moment += Duration
|
||||
|
@ -218,79 +213,79 @@ func `-`*(a, b: Moment): Duration {.inline.} =
|
|||
## Moment - Moment = Duration
|
||||
##
|
||||
## Note: Duration can't be negative.
|
||||
result.value = if a.value >= b.value: a.value - b.value else: 0'i64
|
||||
Duration(value: if a.value >= b.value: a.value - b.value else: 0'i64)
|
||||
|
||||
func `-`*(a: Moment, b: Duration): Moment {.inline.} =
|
||||
## Moment - Duration = Moment
|
||||
##
|
||||
## Note: Moment can be negative
|
||||
result.value = a.value - b.value
|
||||
Moment(value: a.value - b.value)
|
||||
|
||||
func `-`*(a: Duration, b: Duration): Duration {.inline.} =
|
||||
## Duration - Duration = Duration
|
||||
##
|
||||
## Note: Duration can't be negative.
|
||||
result.value = if a.value >= b.value: a.value - b.value else: 0'i64
|
||||
Duration(value: if a.value >= b.value: a.value - b.value else: 0'i64)
|
||||
|
||||
func `-=`*(a: var Duration, b: Duration): Duration {.inline.} =
|
||||
func `-=`*(a: var Duration, b: Duration) {.inline.} =
|
||||
## Duration -= Duration
|
||||
a.value = if a.value >= b.value: a.value - b.value else: 0'i64
|
||||
|
||||
func `-=`*(a: var Moment, b: Duration): Moment {.inline.} =
|
||||
func `-=`*(a: var Moment, b: Duration) {.inline.} =
|
||||
## Moment -= Duration
|
||||
a.value -= b.value
|
||||
|
||||
func `==`*(a, b: Duration): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` equal to ``b``.
|
||||
result = (a.value == b.value)
|
||||
a.value == b.value
|
||||
|
||||
func `==`*(a, b: Moment): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` equal to ``b``.
|
||||
result = (a.value == b.value)
|
||||
a.value == b.value
|
||||
|
||||
func `<`*(a, b: Duration): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` less then ``b``.
|
||||
result = (a.value < b.value)
|
||||
a.value < b.value
|
||||
|
||||
func `<`*(a, b: Moment): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` less then ``b``.
|
||||
result = (a.value < b.value)
|
||||
a.value < b.value
|
||||
|
||||
func `<=`*(a, b: Duration): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` less or equal ``b``.
|
||||
result = (a.value <= b.value)
|
||||
a.value <= b.value
|
||||
|
||||
func `<=`*(a, b: Moment): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` less or equal ``b``.
|
||||
result = (a.value <= b.value)
|
||||
a.value <= b.value
|
||||
|
||||
func `>`*(a, b: Duration): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` bigger then ``b``.
|
||||
result = (a.value > b.value)
|
||||
a.value > b.value
|
||||
|
||||
func `>`*(a, b: Moment): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` bigger then ``b``.
|
||||
result = (a.value > b.value)
|
||||
a.value > b.value
|
||||
|
||||
func `>=`*(a, b: Duration): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` bigger or equal ``b``.
|
||||
result = (a.value >= b.value)
|
||||
a.value >= b.value
|
||||
|
||||
func `>=`*(a, b: Moment): bool {.inline.} =
|
||||
## Returns ``true`` if ``a`` bigger or equal ``b``.
|
||||
result = (a.value >= b.value)
|
||||
a.value >= b.value
|
||||
|
||||
func `*`*(a: Duration, b: SomeIntegerI64): Duration {.inline.} =
|
||||
## Returns Duration multiplied by scalar integer.
|
||||
result.value = a.value * int64(b)
|
||||
Duration(value: a.value * int64(b))
|
||||
|
||||
func `*`*(a: SomeIntegerI64, b: Duration): Duration {.inline.} =
|
||||
## Returns Duration multiplied by scalar integer.
|
||||
result.value = int64(a) * b.value
|
||||
Duration(value: int64(a) * b.value)
|
||||
|
||||
func `div`*(a: Duration, b: SomeIntegerI64): Duration {.inline.} =
|
||||
## Returns Duration which is result of dividing a Duration by scalar integer.
|
||||
result.value = a.value div int64(b)
|
||||
Duration(value: a.value div int64(b))
|
||||
|
||||
const
|
||||
Nanosecond* = Duration(value: 1'i64)
|
||||
|
@ -319,139 +314,167 @@ template low*(T: typedesc[Duration]): Duration =
|
|||
|
||||
func nanoseconds*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with nanoseconds value ``v``.
|
||||
result.value = int64(v)
|
||||
Duration(value: int64(v))
|
||||
|
||||
func microseconds*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with microseconds value ``v``.
|
||||
result.value = int64(v) * Microsecond.value
|
||||
Duration(value: int64(v) * Microsecond.value)
|
||||
|
||||
func milliseconds*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with milliseconds value ``v``.
|
||||
result.value = int64(v) * Millisecond.value
|
||||
Duration(value: int64(v) * Millisecond.value)
|
||||
|
||||
func seconds*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with seconds value ``v``.
|
||||
result.value = int64(v) * Second.value
|
||||
Duration(value: int64(v) * Second.value)
|
||||
|
||||
func minutes*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with minutes value ``v``.
|
||||
result.value = int64(v) * Minute.value
|
||||
Duration(value: int64(v) * Minute.value)
|
||||
|
||||
func hours*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with hours value ``v``.
|
||||
result.value = int64(v) * Hour.value
|
||||
Duration(value: int64(v) * Hour.value)
|
||||
|
||||
func days*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with days value ``v``.
|
||||
result.value = int64(v) * Day.value
|
||||
Duration(value: int64(v) * Day.value)
|
||||
|
||||
func weeks*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
## Initialize Duration with weeks value ``v``.
|
||||
result.value = int64(v) * Week.value
|
||||
Duration(value: int64(v) * Week.value)
|
||||
|
||||
func nanoseconds*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to nanoseconds.
|
||||
result = v.value
|
||||
v.value
|
||||
|
||||
func microseconds*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to microseconds.
|
||||
result = v.value div Microsecond.value
|
||||
v.value div Microsecond.value
|
||||
|
||||
func milliseconds*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to milliseconds.
|
||||
result = v.value div Millisecond.value
|
||||
v.value div Millisecond.value
|
||||
|
||||
func seconds*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to seconds.
|
||||
result = v.value div Second.value
|
||||
v.value div Second.value
|
||||
|
||||
func minutes*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to minutes.
|
||||
result = v.value div Minute.value
|
||||
v.value div Minute.value
|
||||
|
||||
func hours*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to hours.
|
||||
result = v.value div Hour.value
|
||||
v.value div Hour.value
|
||||
|
||||
func days*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to days.
|
||||
result = v.value div Day.value
|
||||
v.value div Day.value
|
||||
|
||||
func weeks*(v: Duration): int64 {.inline.} =
|
||||
## Round Duration ``v`` to weeks.
|
||||
result = v.value div Week.value
|
||||
v.value div Week.value
|
||||
|
||||
func nanos*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
result = nanoseconds(v)
|
||||
nanoseconds(v)
|
||||
|
||||
func micros*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
result = microseconds(v)
|
||||
microseconds(v)
|
||||
|
||||
func millis*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
result = milliseconds(v)
|
||||
milliseconds(v)
|
||||
|
||||
func secs*(v: SomeIntegerI64): Duration {.inline.} =
|
||||
result = seconds(v)
|
||||
seconds(v)
|
||||
|
||||
func nanos*(v: Duration): int64 {.inline.} =
|
||||
result = nanoseconds(v)
|
||||
nanoseconds(v)
|
||||
|
||||
func micros*(v: Duration): int64 {.inline.} =
|
||||
result = microseconds(v)
|
||||
microseconds(v)
|
||||
|
||||
func millis*(v: Duration): int64 {.inline.} =
|
||||
result = milliseconds(v)
|
||||
milliseconds(v)
|
||||
|
||||
func secs*(v: Duration): int64 {.inline.} =
|
||||
result = seconds(v)
|
||||
seconds(v)
|
||||
|
||||
template add(a: var string, b: Base10Buf[uint64]) =
|
||||
for index in 0 ..< b.len:
|
||||
a.add(char(b.data[index]))
|
||||
|
||||
func `$`*(a: Duration): string {.inline.} =
|
||||
## Returns string representation of Duration ``a`` as nanoseconds value.
|
||||
var res = ""
|
||||
var v = a.value
|
||||
|
||||
if v >= Week.value:
|
||||
result = $(v div Week.value) & "w"
|
||||
res.add(Base10.toBytes(uint64(v div Week.value)))
|
||||
res.add('w')
|
||||
v = v mod Week.value
|
||||
if v == 0: return res
|
||||
if v >= Day.value:
|
||||
result &= $(v div Day.value) & "d"
|
||||
res.add(Base10.toBytes(uint64(v div Day.value)))
|
||||
res.add('d')
|
||||
v = v mod Day.value
|
||||
if v == 0: return res
|
||||
if v >= Hour.value:
|
||||
result &= $(v div Hour.value) & "h"
|
||||
res.add(Base10.toBytes(uint64(v div Hour.value)))
|
||||
res.add('h')
|
||||
v = v mod Hour.value
|
||||
if v == 0: return res
|
||||
if v >= Minute.value:
|
||||
result &= $(v div Minute.value) & "m"
|
||||
res.add(Base10.toBytes(uint64(v div Minute.value)))
|
||||
res.add('m')
|
||||
v = v mod Minute.value
|
||||
if v == 0: return res
|
||||
if v >= Second.value:
|
||||
result &= $(v div Second.value) & "s"
|
||||
res.add(Base10.toBytes(uint64(v div Second.value)))
|
||||
res.add('s')
|
||||
v = v mod Second.value
|
||||
if v == 0: return res
|
||||
if v >= Millisecond.value:
|
||||
result &= $(v div Millisecond.value) & "ms"
|
||||
res.add(Base10.toBytes(uint64(v div Millisecond.value)))
|
||||
res.add('m')
|
||||
res.add('s')
|
||||
v = v mod Millisecond.value
|
||||
if v == 0: return res
|
||||
if v >= Microsecond.value:
|
||||
result &= $(v div Microsecond.value) & "us"
|
||||
res.add(Base10.toBytes(uint64(v div Microsecond.value)))
|
||||
res.add('u')
|
||||
res.add('s')
|
||||
v = v mod Microsecond.value
|
||||
result &= $(v div Nanosecond.value) & "ns"
|
||||
if v == 0: return res
|
||||
res.add(Base10.toBytes(uint64(v div Nanosecond.value)))
|
||||
res.add('n')
|
||||
res.add('s')
|
||||
res
|
||||
|
||||
func `$`*(a: Moment): string {.inline.} =
|
||||
## Returns string representation of Moment ``a`` as nanoseconds value.
|
||||
result = $(a.value)
|
||||
result.add("ns")
|
||||
var res = ""
|
||||
res.add(Base10.toBytes(uint64(a.value)))
|
||||
res.add('n')
|
||||
res.add('s')
|
||||
res
|
||||
|
||||
func isZero*(a: Duration): bool {.inline.} =
|
||||
## Returns ``true`` if Duration ``a`` is ``0``.
|
||||
result = (a.value == 0)
|
||||
a.value == 0
|
||||
|
||||
func isInfinite*(a: Duration): bool {.inline.} =
|
||||
## Returns ``true`` if Duration ``a`` is infinite.
|
||||
result = (a.value == InfiniteDuration.value)
|
||||
a.value == InfiniteDuration.value
|
||||
|
||||
proc now*(t: typedesc[Moment]): Moment {.inline.} =
|
||||
## Returns current moment in time as Moment.
|
||||
result.value = int64(fastEpochTimeNano())
|
||||
Moment(value: int64(fastEpochTimeNano()))
|
||||
|
||||
func init*(t: typedesc[Moment], value: int64, precision: Duration): Moment =
|
||||
## Initialize Moment with absolute time value ``value`` with precision
|
||||
## ``precision``.
|
||||
result.value = value * precision.value
|
||||
Moment(value: value * precision.value)
|
||||
|
||||
func epochSeconds*(moment: Moment): int64 =
|
||||
moment.value div Second.value
|
||||
|
@ -461,7 +484,7 @@ func epochNanoSeconds*(moment: Moment): int64 =
|
|||
|
||||
proc fromNow*(t: typedesc[Moment], a: Duration): Moment {.inline.} =
|
||||
## Returns moment in time which is equal to current moment + Duration.
|
||||
result = Moment.now() + a
|
||||
Moment.now() + a
|
||||
|
||||
when defined(posix):
|
||||
from posix import Time, Suseconds, Timeval, Timespec
|
||||
|
@ -469,10 +492,14 @@ when defined(posix):
|
|||
func toTimeval*(a: Duration): Timeval =
|
||||
## Convert Duration ``a`` to ``Timeval`` object.
|
||||
let m = a.value mod Second.value
|
||||
result.tv_sec = Time(a.value div Second.value)
|
||||
result.tv_usec = Suseconds(m div Microsecond.value)
|
||||
Timeval(
|
||||
tv_sec: Time(a.value div Second.value),
|
||||
tv_usec: Suseconds(m div Microsecond.value)
|
||||
)
|
||||
|
||||
func toTimespec*(a: Duration): Timespec =
|
||||
## Convert Duration ``a`` to ``Timespec`` object.
|
||||
result.tv_sec = Time(a.value div Second.value)
|
||||
result.tv_nsec = int(a.value mod Second.value)
|
||||
Timespec(
|
||||
tv_sec: Time(a.value div Second.value),
|
||||
tv_nsec: int(a.value mod Second.value)
|
||||
)
|
||||
|
|
|
@ -296,7 +296,7 @@ proc getAddrInfo(address: string, port: Port, domain: Domain,
|
|||
hints.ai_family = toInt(domain)
|
||||
hints.ai_socktype = toInt(sockType)
|
||||
hints.ai_protocol = toInt(protocol)
|
||||
var gaiRes = getaddrinfo(address, Base10.toString(uint16(port)),
|
||||
var gaiRes = getaddrinfo(address, cstring(Base10.toString(uint16(port))),
|
||||
addr(hints), res)
|
||||
if gaiRes != 0'i32:
|
||||
when defined(windows) or defined(nimdoc):
|
||||
|
|
|
@ -316,7 +316,7 @@ proc `$`*(mask: IpMask, include0x = false): string =
|
|||
var m = host.mask4
|
||||
while n > 0:
|
||||
n -= 4
|
||||
var c = cast[int]((m shr n) and 0x0F)
|
||||
var c = int((m shr n) and 0x0F)
|
||||
if c < 10:
|
||||
result.add(chr(ord('0') + c))
|
||||
else:
|
||||
|
@ -328,7 +328,7 @@ proc `$`*(mask: IpMask, include0x = false): string =
|
|||
var m = host.mask6[i]
|
||||
while n > 0:
|
||||
n -= 4
|
||||
var c = cast[int]((m shr n) and 0x0F)
|
||||
var c = int((m shr n) and 0x0F)
|
||||
if c < 10:
|
||||
result.add(chr(ord('0') + c))
|
||||
else:
|
||||
|
@ -639,7 +639,7 @@ proc isLoopback*(address: TransportAddress): bool =
|
|||
elif address.family == AddressFamily.IPv6:
|
||||
var test = 0
|
||||
for i in 0..<(len(address.address_v6) - 1):
|
||||
test = test or cast[int](address.address_v6[i])
|
||||
test = test or int(address.address_v6[i])
|
||||
result = (test == 0) and (address.address_v6[15] == 1'u8)
|
||||
|
||||
proc isAnyLocal*(address: TransportAddress): bool =
|
||||
|
|
|
@ -247,7 +247,7 @@ type
|
|||
ifType*: InterfaceType
|
||||
name*: string
|
||||
desc*: string
|
||||
mtu*: int
|
||||
mtu*: int64
|
||||
flags*: uint64
|
||||
state*: InterfaceState
|
||||
mac*: array[MaxAdapterAddressLength, byte]
|
||||
|
@ -310,7 +310,7 @@ proc `$`*(iface: NetworkInterface): string =
|
|||
res.add($iface.ifType)
|
||||
res.add(" ")
|
||||
if iface.maclen > 0:
|
||||
for i in 0..<iface.maclen:
|
||||
for i in 0 ..< iface.maclen:
|
||||
res.add(toHex(iface.mac[i]))
|
||||
if i < iface.maclen - 1:
|
||||
res.add(":")
|
||||
|
@ -468,18 +468,18 @@ when defined(linux):
|
|||
nlmsg_pid: uint32
|
||||
|
||||
IfInfoMessage = object
|
||||
ifi_family: cuchar
|
||||
ifi_pad: cuchar
|
||||
ifi_family: byte
|
||||
ifi_pad: byte
|
||||
ifi_type: cushort
|
||||
ifi_index: cint
|
||||
ifi_flags: cuint
|
||||
ifi_change: cuint
|
||||
|
||||
IfAddrMessage = object
|
||||
ifa_family: cuchar
|
||||
ifa_prefixlen: cuchar
|
||||
ifa_flags: cuchar
|
||||
ifa_scope: cuchar
|
||||
ifa_family: byte
|
||||
ifa_prefixlen: byte
|
||||
ifa_flags: byte
|
||||
ifa_scope: byte
|
||||
ifa_index: uint32
|
||||
|
||||
RtMessage = object
|
||||
|
@ -647,7 +647,7 @@ when defined(linux):
|
|||
req.hdr.nlmsg_pid = cast[uint32](pid)
|
||||
req.msg.rtgen_family = byte(AF_PACKET)
|
||||
iov.iov_base = cast[pointer](addr req)
|
||||
iov.iov_len = cast[TIovLen](req.hdr.nlmsg_len)
|
||||
iov.iov_len = TIovLen(req.hdr.nlmsg_len)
|
||||
rmsg.msg_iov = addr iov
|
||||
rmsg.msg_iovlen = 1
|
||||
rmsg.msg_name = cast[pointer](addr address)
|
||||
|
@ -695,7 +695,7 @@ when defined(linux):
|
|||
req.msg.rtm_dst_len = 16 * 8
|
||||
|
||||
iov.iov_base = cast[pointer](addr buffer[0])
|
||||
iov.iov_len = cast[TIovLen](req.hdr.nlmsg_len)
|
||||
iov.iov_len = TIovLen(req.hdr.nlmsg_len)
|
||||
rmsg.msg_iov = addr iov
|
||||
rmsg.msg_iovlen = 1
|
||||
rmsg.msg_name = cast[pointer](addr address)
|
||||
|
@ -735,7 +735,7 @@ when defined(linux):
|
|||
var res = NetworkInterface(
|
||||
ifType: toInterfaceType(iface.ifi_type),
|
||||
ifIndex: iface.ifi_index,
|
||||
flags: cast[uint64](iface.ifi_flags)
|
||||
flags: uint64(iface.ifi_flags)
|
||||
)
|
||||
|
||||
while RTA_OK(attr, length):
|
||||
|
@ -749,10 +749,10 @@ when defined(linux):
|
|||
res.maclen = plen
|
||||
elif attr.rta_type == IFLA_MTU:
|
||||
var p = cast[ptr uint32](RTA_DATA(attr))
|
||||
res.mtu = cast[int](p[])
|
||||
res.mtu = int64(p[])
|
||||
elif attr.rta_type == IFLA_OPERSTATE:
|
||||
var p = cast[ptr byte](RTA_DATA(attr))
|
||||
res.state = toInterfaceState(cast[cint](p[]), iface.ifi_flags)
|
||||
res.state = toInterfaceState(cint(p[]), iface.ifi_flags)
|
||||
attr = RTA_NEXT(attr, length)
|
||||
res
|
||||
|
||||
|
@ -778,8 +778,8 @@ when defined(linux):
|
|||
|
||||
attr = IFA_RTA(cast[ptr byte](iaddr))
|
||||
|
||||
let family = cast[int](iaddr.ifa_family)
|
||||
var res = NetworkInterface(ifIndex: cast[int](iaddr.ifa_index))
|
||||
let family = int(iaddr.ifa_family)
|
||||
var res = NetworkInterface(ifIndex: int(iaddr.ifa_index))
|
||||
|
||||
var address, local: TransportAddress
|
||||
|
||||
|
@ -793,7 +793,7 @@ when defined(linux):
|
|||
if local.family != AddressFamily.None:
|
||||
address = local
|
||||
|
||||
let prefixLength = cast[int](iaddr.ifa_prefixlen)
|
||||
let prefixLength = int(iaddr.ifa_prefixlen)
|
||||
let ifaddr = InterfaceAddress.init(address, prefixLength)
|
||||
res.addresses.add(ifaddr)
|
||||
res
|
||||
|
@ -1048,7 +1048,7 @@ elif defined(macosx) or defined(bsd):
|
|||
#include <ifaddrs.h>""".}
|
||||
|
||||
proc toInterfaceType(f: byte): InterfaceType =
|
||||
var ft = cast[int](f)
|
||||
var ft = int(f)
|
||||
if (ft >= 1 and ft <= 196) or (ft == 237) or (ft == 243) or (ft == 244):
|
||||
cast[InterfaceType](ft)
|
||||
else:
|
||||
|
@ -1070,8 +1070,8 @@ elif defined(macosx) or defined(bsd):
|
|||
var iface: NetworkInterface
|
||||
var ifaddress: InterfaceAddress
|
||||
|
||||
iface.name = $ifap.ifa_name
|
||||
iface.flags = cast[uint64](ifap.ifa_flags)
|
||||
iface.name = string($cstring(ifap.ifa_name))
|
||||
iface.flags = uint64(ifap.ifa_flags)
|
||||
var i = 0
|
||||
while i < len(res):
|
||||
if res[i].name == iface.name:
|
||||
|
@ -1081,19 +1081,19 @@ elif defined(macosx) or defined(bsd):
|
|||
res.add(iface)
|
||||
|
||||
if not isNil(ifap.ifa_addr):
|
||||
let family = cast[int](ifap.ifa_addr.sa_family)
|
||||
let family = int(ifap.ifa_addr.sa_family)
|
||||
if family == AF_LINK:
|
||||
var data = cast[ptr IfData](ifap.ifa_data)
|
||||
var link = cast[ptr Sockaddr_dl](ifap.ifa_addr)
|
||||
res[i].ifIndex = cast[int](link.sdl_index)
|
||||
let nlen = cast[int](link.sdl_nlen)
|
||||
res[i].ifIndex = int(link.sdl_index)
|
||||
let nlen = int(link.sdl_nlen)
|
||||
if nlen < len(link.sdl_data):
|
||||
let minsize = min(cast[int](link.sdl_alen), len(res[i].mac))
|
||||
copyMem(addr res[i].mac[0], addr link.sdl_data[nlen], minsize)
|
||||
res[i].maclen = cast[int](link.sdl_alen)
|
||||
res[i].maclen = int(link.sdl_alen)
|
||||
res[i].ifType = toInterfaceType(data.ifi_type)
|
||||
res[i].state = toInterfaceState(ifap.ifa_flags)
|
||||
res[i].mtu = cast[int](data.ifi_mtu)
|
||||
res[i].mtu = int(data.ifi_mtu)
|
||||
elif family == posix.AF_INET:
|
||||
fromSAddr(cast[ptr Sockaddr_storage](ifap.ifa_addr),
|
||||
SockLen(sizeof(Sockaddr_in)), ifaddress.host)
|
||||
|
@ -1102,7 +1102,7 @@ elif defined(macosx) or defined(bsd):
|
|||
SockLen(sizeof(Sockaddr_in6)), ifaddress.host)
|
||||
if not isNil(ifap.ifa_netmask):
|
||||
var na: TransportAddress
|
||||
var family = cast[cint](ifap.ifa_netmask.sa_family)
|
||||
var family = cint(ifap.ifa_netmask.sa_family)
|
||||
if family == posix.AF_INET:
|
||||
fromSAddr(cast[ptr Sockaddr_storage](ifap.ifa_netmask),
|
||||
SockLen(sizeof(Sockaddr_in)), na)
|
||||
|
@ -1443,13 +1443,13 @@ elif defined(windows):
|
|||
fromSAddr(cast[ptr Sockaddr_storage](prefix.address.lpSockaddr),
|
||||
SockLen(prefix.address.iSockaddrLength), pa)
|
||||
if netfamily == prefamily:
|
||||
if ipMatchPrefix(res.host, pa, cast[int](prefix.prefixLength)):
|
||||
prefixLength = max(prefixLength, cast[int](prefix.prefixLength))
|
||||
if ipMatchPrefix(res.host, pa, int(prefix.prefixLength)):
|
||||
prefixLength = max(prefixLength, int(prefix.prefixLength))
|
||||
prefix = prefix.next
|
||||
if prefixLength >= 0:
|
||||
res.net = IpNet.init(res.host, prefixLength)
|
||||
else:
|
||||
let prefixLength = cast[int](ifunic.onLinkPrefixLength)
|
||||
let prefixLength = int(ifunic.onLinkPrefixLength)
|
||||
if prefixLength >= 0:
|
||||
res.net = IpNet.init(res.host, prefixLength)
|
||||
res
|
||||
|
@ -1483,14 +1483,14 @@ elif defined(windows):
|
|||
var slider = cast[ptr IpAdapterAddressesXp](addr buffer[0])
|
||||
while not isNil(slider):
|
||||
var iface = NetworkInterface(
|
||||
ifIndex: cast[int](slider.ifIndex),
|
||||
ifIndex: int(slider.ifIndex),
|
||||
ifType: toInterfaceType(slider.ifType),
|
||||
state: toInterfaceState(slider.operStatus),
|
||||
name: $slider.adapterName,
|
||||
desc: $slider.description,
|
||||
mtu: cast[int](slider.mtu),
|
||||
maclen: cast[int](slider.physicalAddressLength),
|
||||
flags: cast[uint64](slider.flags)
|
||||
mtu: int(slider.mtu),
|
||||
maclen: int(slider.physicalAddressLength),
|
||||
flags: uint64(slider.flags)
|
||||
)
|
||||
copyMem(addr iface.mac[0], addr slider.physicalAddress[0],
|
||||
len(iface.mac))
|
||||
|
|
|
@ -199,8 +199,8 @@ template shiftVectorBuffer(v: var StreamVector, o: untyped) =
|
|||
(v).buflen -= int(o)
|
||||
|
||||
template shiftVectorFile(v: var StreamVector, o: untyped) =
|
||||
(v).buf = cast[pointer](cast[uint]((v).buf) - cast[uint](o))
|
||||
(v).offset += cast[uint]((o))
|
||||
(v).buf = cast[pointer](cast[uint]((v).buf) - uint(o))
|
||||
(v).offset += uint(o)
|
||||
|
||||
proc setupStreamTransportTracker(): StreamTransportTracker {.
|
||||
gcsafe, raises: [Defect].}
|
||||
|
|
|
@ -105,7 +105,7 @@ suite "Macro transformations test suite":
|
|||
macroAsync2(testMacro2, seq, Opt, Result, OpenObject, cstring)
|
||||
check waitFor(testMacro2()).len == 0
|
||||
|
||||
suite "async transformation issues":
|
||||
suite "Closure iterator's exception transformation issues":
|
||||
test "Nested defer/finally not called on return":
|
||||
# issue #288
|
||||
# fixed by https://github.com/nim-lang/Nim/pull/19933
|
||||
|
@ -113,7 +113,7 @@ suite "async transformation issues":
|
|||
proc a {.async.} =
|
||||
try:
|
||||
try:
|
||||
await sleepAsync(0)
|
||||
await sleepAsync(0.milliseconds)
|
||||
return
|
||||
finally:
|
||||
answer = 32
|
||||
|
|
|
@ -67,6 +67,29 @@ suite "Asynchronous timers & steps test suite":
|
|||
test $TimersCount & " timers with 1000ms timeout":
|
||||
var res = waitFor(test(1000.milliseconds))
|
||||
check (res >= 1000.milliseconds) and (res <= 5000.milliseconds)
|
||||
test "Timer stringification test":
|
||||
check:
|
||||
$weeks(1) == "1w"
|
||||
$days(1) == "1d"
|
||||
$hours(1) == "1h"
|
||||
$minutes(1) == "1m"
|
||||
$seconds(1) == "1s"
|
||||
$milliseconds(1) == "1ms"
|
||||
$microseconds(1) == "1us"
|
||||
$nanoseconds(1) == "1ns"
|
||||
$(weeks(1) + days(1)) == "1w1d"
|
||||
$(days(1) + hours(1)) == "1d1h"
|
||||
$(hours(1) + minutes(1)) == "1h1m"
|
||||
$(minutes(1) + seconds(1)) == "1m1s"
|
||||
$(seconds(1) + milliseconds(1)) == "1s1ms"
|
||||
$(milliseconds(1) + microseconds(1)) == "1ms1us"
|
||||
$nanoseconds(1_000_000_000) == "1s"
|
||||
$nanoseconds(1_900_000_000) == "1s900ms"
|
||||
$nanoseconds(1_000_900_000) == "1s900us"
|
||||
$nanoseconds(1_000_000_900) == "1s900ns"
|
||||
$nanoseconds(1_800_700_000) == "1s800ms700us"
|
||||
$nanoseconds(1_800_000_600) == "1s800ms600ns"
|
||||
|
||||
test "Asynchronous steps test":
|
||||
var futn1 = stepsAsync(-1)
|
||||
var fut0 = stepsAsync(0)
|
||||
|
|
Loading…
Reference in New Issue