mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-12 06:18:51 +00:00
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:
@@ -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]
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
15
lib/std/private/win_getsysteminfo.nim
Normal file
15
lib/std/private/win_getsysteminfo.nim
Normal 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".}
|
||||
Reference in New Issue
Block a user