add std/private/win_getsysteminfo; refactor the usage of GetSystemInfo (#19310)

* add std/private/win_getsysteminfo

* import at the top level

* wrappers follow nep1 too

* follow review comment
This commit is contained in:
flywind
2022-01-04 18:49:54 +08:00
committed by GitHub
parent 0bcd7062c6
commit 1869826668
3 changed files with 23 additions and 35 deletions

View File

@@ -18,6 +18,9 @@ include "system/inclrtl"
when defined(posix) and not (defined(macosx) or defined(bsd)):
import posix
when defined(windows):
import std/private/win_getsysteminfo
when defined(freebsd) or defined(macosx):
{.emit: "#include <sys/types.h>".}
@@ -54,25 +57,10 @@ proc countProcessors*(): int {.rtl, extern: "ncpi$1".} =
## Returns the number of the processors/cores the machine has.
## Returns 0 if it cannot be detected.
when defined(windows):
type
SYSTEM_INFO {.final, pure.} = object
u1: int32
dwPageSize: int32
lpMinimumApplicationAddress: pointer
lpMaximumApplicationAddress: pointer
dwActiveProcessorMask: ptr int32
dwNumberOfProcessors: int32
dwProcessorType: int32
dwAllocationGranularity: int32
wProcessorLevel: int16
wProcessorRevision: int16
proc GetSystemInfo(lpSystemInfo: var SYSTEM_INFO) {.stdcall, dynlib: "kernel32", importc: "GetSystemInfo".}
var
si: SYSTEM_INFO
GetSystemInfo(si)
result = si.dwNumberOfProcessors
si: SystemInfo
getSystemInfo(addr si)
result = int(si.dwNumberOfProcessors)
elif defined(macosx) or defined(bsd):
var
mib: array[0..3, cint]

View File

@@ -42,25 +42,10 @@ type
when defined(windows):
import winlean
type
SYSTEM_INFO {.final, pure.} = object
u1: uint32
dwPageSize: uint32
lpMinimumApplicationAddress: pointer
lpMaximumApplicationAddress: pointer
dwActiveProcessorMask: ptr uint32
dwNumberOfProcessors: uint32
dwProcessorType: uint32
dwAllocationGranularity: uint32
wProcessorLevel: uint16
wProcessorRevision: uint16
proc getSystemInfo(lpSystemInfo: ptr SYSTEM_INFO) {.stdcall,
dynlib: "kernel32", importc: "GetSystemInfo".}
import std/private/win_getsysteminfo
proc getAllocationGranularity: uint =
var sysInfo: SYSTEM_INFO
var sysInfo: SystemInfo
getSystemInfo(addr sysInfo)
return uint(sysInfo.dwAllocationGranularity)

View File

@@ -0,0 +1,15 @@
type
SystemInfo* = object
u1: uint32
dwPageSize: uint32
lpMinimumApplicationAddress: pointer
lpMaximumApplicationAddress: pointer
dwActiveProcessorMask: ptr uint32
dwNumberOfProcessors*: uint32
dwProcessorType: uint32
dwAllocationGranularity*: uint32
wProcessorLevel: uint16
wProcessorRevision: uint16
proc getSystemInfo*(lpSystemInfo: ptr SystemInfo) {.stdcall,
dynlib: "kernel32", importc: "GetSystemInfo".}