@@ -90,15 +90,14 @@ func fromU32s(res: var string; wordarray: openArray[uint32]) =
90
90
res = newStringMayUninit wordarray.len * bytePerWord
91
91
res.fromU32sImpl wordarray
92
92
93
- func getrandbits_impl[Seq: seq [U8] | string ] (self; k: int ; res: var Seq) =
93
+ func getrandbits_impl(self; k: int ): seq [ uint32 ] =
94
94
# # `_random_Random_getrandbits_impl` but returns seq
95
95
if k <= 32 :
96
- res.fromU32s [genrand_uint32(self) shr (32 - k)]
97
- return
96
+ return @ [genrand_uint32(self) shr (32 - k)]
98
97
99
98
let words = (k - 1 ) div 32 + 1
100
99
101
- var wordarray = newSeqMayUninit[uint32 ](words * 4 )
100
+ result = newSeqMayUninit[uint32 ](words * 4 )
102
101
103
102
var k = k
104
103
template rng: untyped =
@@ -109,16 +108,14 @@ func getrandbits_impl[Seq: seq[U8]|string](self; k: int; res: var Seq) =
109
108
var r = genrand_uint32(self)
110
109
if k < 32 :
111
110
r = r shr (32 - k)
112
- wordarray [i] = r
111
+ result [i] = r
113
112
k.dec 32
114
113
115
- res.fromU32s wordarray
116
-
117
114
genGbls:
118
115
method randbytes* (self; n: int ): string {.base.} =
119
116
# # `return self.getrandbits(n * 8).to_bytes(n, 'little')`
120
117
# # here we use `_random_Random_getrandbits_impl`
121
- self.getrandbits_impl n* 8 , result
118
+ result .fromU32s self.getrandbits_impl n* 8
122
119
123
120
method getrandbits* (self; k: int ): int {.base.} =
124
121
# # `_random_Random_getrandbits_impl`
@@ -134,7 +131,7 @@ genGbls:
134
131
assert k < MaxBit
135
132
136
133
var res: seq [uint8 ]
137
- self.getrandbits_impl k, res
134
+ res.fromU32s self.getrandbits_impl k
138
135
res.setLen MaxSize
139
136
result = cast [ptr R](res[ 0].addr ) []
140
137
when PyLittleEndian:
0 commit comments