vx-toolkit 1.16.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. vx_toolkit/__init__.py +10 -0
  2. vx_toolkit/_bin/headers/collections/vec.c +8 -0
  3. vx_toolkit/_bin/headers/collections/vec.vxh +2 -0
  4. vx_toolkit/_bin/headers/cpp/greet.cpp +11 -0
  5. vx_toolkit/_bin/headers/cpp/greet.hpp +6 -0
  6. vx_toolkit/_bin/headers/cpp/greet.vxh +4 -0
  7. vx_toolkit/_bin/headers/fmath.c +3 -0
  8. vx_toolkit/_bin/headers/fmath.vxh +5 -0
  9. vx_toolkit/_bin/headers/math.c +6 -0
  10. vx_toolkit/_bin/headers/math.vxh +4 -0
  11. vx_toolkit/_bin/headers/sys.c +9 -0
  12. vx_toolkit/_bin/headers/sys.vxh +3 -0
  13. vx_toolkit/_bin/headers/text.c +17 -0
  14. vx_toolkit/_bin/headers/text.vxh +6 -0
  15. vx_toolkit/_bin/libvxrt.a +0 -0
  16. vx_toolkit/_bin/libvxtidy.dylib +0 -0
  17. vx_toolkit/_bin/std/README.md +90 -0
  18. vx_toolkit/_bin/std/bytes.vx +65 -0
  19. vx_toolkit/_bin/std/char.vx +83 -0
  20. vx_toolkit/_bin/std/collections/hashmap.vx +31 -0
  21. vx_toolkit/_bin/std/collections/linked_list.vx +166 -0
  22. vx_toolkit/_bin/std/collections/mod.vx +8 -0
  23. vx_toolkit/_bin/std/collections/set.vx +102 -0
  24. vx_toolkit/_bin/std/collections/vec.vx +40 -0
  25. vx_toolkit/_bin/std/conv.vx +57 -0
  26. vx_toolkit/_bin/std/error.vx +165 -0
  27. vx_toolkit/_bin/std/io/dir.vx +50 -0
  28. vx_toolkit/_bin/std/io/file.vx +154 -0
  29. vx_toolkit/_bin/std/io/mod.vx +5 -0
  30. vx_toolkit/_bin/std/io/path.vx +105 -0
  31. vx_toolkit/_bin/std/io/stream.vx +82 -0
  32. vx_toolkit/_bin/std/io.vx +6 -0
  33. vx_toolkit/_bin/std/iter.vx +67 -0
  34. vx_toolkit/_bin/std/macros.vx +117 -0
  35. vx_toolkit/_bin/std/math/math.vx +341 -0
  36. vx_toolkit/_bin/std/math/mod.vx +6 -0
  37. vx_toolkit/_bin/std/math/random.vx +104 -0
  38. vx_toolkit/_bin/std/mem/allocator.vx +9 -0
  39. vx_toolkit/_bin/std/mem/arena.vx +41 -0
  40. vx_toolkit/_bin/std/mem/general.vx +35 -0
  41. vx_toolkit/_bin/std/mem/mod.vx +11 -0
  42. vx_toolkit/_bin/std/mem/page.vx +23 -0
  43. vx_toolkit/_bin/std/mod.vx +5 -0
  44. vx_toolkit/_bin/std/option.vx +68 -0
  45. vx_toolkit/_bin/std/prelude.vx +13 -0
  46. vx_toolkit/_bin/std/reflect/mod.vx +129 -0
  47. vx_toolkit/_bin/std/string/codec.vx +146 -0
  48. vx_toolkit/_bin/std/string/core.vx +28 -0
  49. vx_toolkit/_bin/std/string/iter.vx +49 -0
  50. vx_toolkit/_bin/std/string/mod.vx +7 -0
  51. vx_toolkit/_bin/std/string/pattern.vx +84 -0
  52. vx_toolkit/_bin/std/string/util.vx +369 -0
  53. vx_toolkit/_bin/std/sys/coroutine.vx +46 -0
  54. vx_toolkit/_bin/std/sys/datetime.vx +160 -0
  55. vx_toolkit/_bin/std/sys/duration.vx +53 -0
  56. vx_toolkit/_bin/std/sys/env.vx +43 -0
  57. vx_toolkit/_bin/std/sys/mod.vx +10 -0
  58. vx_toolkit/_bin/std/sys/sync.vx +132 -0
  59. vx_toolkit/_bin/std/sys/time.vx +28 -0
  60. vx_toolkit/_bin/std/sys.vx +6 -0
  61. vx_toolkit/_bin/std/tests/run_all.vx +627 -0
  62. vx_toolkit/_bin/std/tests/smoke.vx +4 -0
  63. vx_toolkit/_bin/std/tests/test_collections.vx +42 -0
  64. vx_toolkit/_bin/std/tests/test_string_io.vx +202 -0
  65. vx_toolkit/_bin/vfmt +0 -0
  66. vx_toolkit/_bin/vlnk +0 -0
  67. vx_toolkit/_bin/vmake +0 -0
  68. vx_toolkit/_bin/vmake-lsp +0 -0
  69. vx_toolkit/_bin/vx +0 -0
  70. vx_toolkit/_bin/vxc +0 -0
  71. vx_toolkit/_bin/vxls +0 -0
  72. vx_toolkit/_dispatch.py +121 -0
  73. vx_toolkit-1.16.2.dist-info/METADATA +13 -0
  74. vx_toolkit-1.16.2.dist-info/RECORD +77 -0
  75. vx_toolkit-1.16.2.dist-info/WHEEL +4 -0
  76. vx_toolkit-1.16.2.dist-info/entry_points.txt +8 -0
  77. vx_toolkit-1.16.2.dist-info/licenses/LICENSE +198 -0
@@ -0,0 +1,67 @@
1
+ # ============================================================
2
+ # std::iter —— 数组/Vec 通用迭代工具
3
+ # 补充 Vec 未提供的 find / any / all / reduce
4
+ # ============================================================
5
+
6
+ import std.error
7
+ import std.collections.vec
8
+
9
+ class Iter:
10
+ # 查找第一个满足 pred 的元素,返回 Result
11
+ func find(arr: var, pred: var) -> var:
12
+ var i = 0
13
+ var n = len(arr)
14
+ while i < n:
15
+ if pred(arr[i]):
16
+ return Result.ok(arr[i])
17
+ i = i + 1
18
+ return Result.err(error.value_error("Iter.find: no matching element"))
19
+
20
+ # 是否存在满足 pred 的元素
21
+ func any(arr: var, pred: var) -> bool:
22
+ var i = 0
23
+ var n = len(arr)
24
+ while i < n:
25
+ if pred(arr[i]):
26
+ return true
27
+ i = i + 1
28
+ return false
29
+
30
+ # 是否所有元素都满足 pred
31
+ func all(arr: var, pred: var) -> bool:
32
+ var i = 0
33
+ var n = len(arr)
34
+ while i < n:
35
+ if pred(arr[i]) == false:
36
+ return false
37
+ i = i + 1
38
+ return true
39
+
40
+ # 从左到右归约
41
+ func reduce(arr: var, init: var, f: var) -> var:
42
+ var acc = init
43
+ var i = 0
44
+ var n = len(arr)
45
+ while i < n:
46
+ acc = f(acc, arr[i])
47
+ i = i + 1
48
+ return acc
49
+
50
+ # 将数组复制到新 Vec
51
+ func collect(arr: var) -> var:
52
+ var v = new Vec()
53
+ var i = 0
54
+ var n = len(arr)
55
+ while i < n:
56
+ v.push(arr[i])
57
+ i = i + 1
58
+ return v
59
+
60
+ # 反转数组得到新数组
61
+ func reversed(arr: var) -> var:
62
+ var result = []
63
+ var i = len(arr) - 1
64
+ while i >= 0:
65
+ result = result + [arr[i]]
66
+ i = i - 1
67
+ return result
@@ -0,0 +1,117 @@
1
+ # ============================================================
2
+ # std::macros —— 编译时宏工具库
3
+ # 提供常用的代码生成模板,在编译阶段展开,零运行时开销
4
+ # ============================================================
5
+ # 使用方式:
6
+ # import std # 通过 prelude 自动导入
7
+ # import std.macros # 按需显式导入
8
+ # ============================================================
9
+
10
+ # ============================================================
11
+ # 一、调试与日志宏
12
+ # ============================================================
13
+
14
+ # 断言:条件不成立时输出错误信息
15
+ # 用法:#assert(x > 0, "x 必须为正数")
16
+ macro assert(condition, message) {
17
+ if !condition {
18
+ out("Assertion failed: " + message)
19
+ }
20
+ }
21
+
22
+ # 调试打印:输出变量名与值
23
+ # 用法:#debug_print("x", x)
24
+ macro debug_print(name, value) {
25
+ out("DEBUG: " + name + " = " + value)
26
+ }
27
+
28
+ # 日志级别宏
29
+ # 用法:#log_info("服务已启动")
30
+ macro log_info(message) {
31
+ out("[INFO] " + message)
32
+ }
33
+
34
+ macro log_warn(message) {
35
+ out("[WARN] " + message)
36
+ }
37
+
38
+ macro log_error(message) {
39
+ out("[ERROR] " + message)
40
+ }
41
+
42
+ macro log_debug(message) {
43
+ out("[DEBUG] " + message)
44
+ }
45
+
46
+ # ============================================================
47
+ # 二、控制流宏
48
+ # ============================================================
49
+
50
+ # 条件为真时执行
51
+ # 用法:#when(flag, out("flag 为 true"))
52
+ macro when(condition, action) {
53
+ if condition {
54
+ action
55
+ }
56
+ }
57
+
58
+ # 条件为假时执行
59
+ # 用法:#unless(flag, out("flag 为 false"))
60
+ macro unless(condition, action) {
61
+ if !condition {
62
+ action
63
+ }
64
+ }
65
+
66
+ # 重复执行 n 次
67
+ # 用法:#repeat(3, out("Hello"))
68
+ macro repeat(n, body) {
69
+ var __vx_macro_i = 0
70
+ while __vx_macro_i < n {
71
+ body
72
+ __vx_macro_i = __vx_macro_i + 1
73
+ }
74
+ }
75
+
76
+ # repeat 的别名
77
+ macro times(n, body) {
78
+ var __vx_macro_i = 0
79
+ while __vx_macro_i < n {
80
+ body
81
+ __vx_macro_i = __vx_macro_i + 1
82
+ }
83
+ }
84
+
85
+ # ============================================================
86
+ # 三、变量操作宏
87
+ # ============================================================
88
+
89
+ # 交换两个可赋值变量的值
90
+ # 用法:#swap(a, b)
91
+ # 注意:a、b 必须是可修改的左值(如变量、字段)
92
+ macro swap(a, b) {
93
+ var __vx_macro_temp = a
94
+ a = b
95
+ b = __vx_macro_temp
96
+ }
97
+
98
+ # ============================================================
99
+ # 四、Result 辅助宏
100
+ # ============================================================
101
+
102
+ # 确保 Result 成功,否则输出错误信息
103
+ # 用法:#ensure_ok(result, "读取配置失败")
104
+ macro ensure_ok(result, message) {
105
+ if !result.is_ok {
106
+ out("Error: " + message)
107
+ }
108
+ }
109
+
110
+ # 如果 Result 失败则直接返回该 Result
111
+ # 用法:#try_return(read_file(path))
112
+ # 注意:仅在返回 Result 的函数中使用
113
+ macro try_return(result) {
114
+ if !result.is_ok {
115
+ return result
116
+ }
117
+ }
@@ -0,0 +1,341 @@
1
+ # ============================================================
2
+ # std::math —— 基础数学运算模块
3
+ # ============================================================
4
+
5
+ import std.collections.vec
6
+
7
+ # ---- 数学常量 ----
8
+ # 注:VX 当前无 const 关键字,使用函数返回常量值
9
+
10
+ func math_pi() -> float:
11
+ return 3.141592653589793
12
+
13
+ func math_e() -> float:
14
+ return 2.718281828459045
15
+
16
+ func math_tau() -> float:
17
+ return 6.283185307179586
18
+
19
+ func deg_to_rad() -> float:
20
+ return 0.017453292519943295
21
+
22
+ func rad_to_deg() -> float:
23
+ return 57.29577951308232
24
+
25
+ # ========== 基础函数 ==========
26
+
27
+ func abs(x: float) -> float:
28
+ if x < 0.0:
29
+ return -x
30
+ return x
31
+
32
+ func abs_int(x: int) -> int:
33
+ if x < 0:
34
+ return -x
35
+ return x
36
+
37
+ func min(a: var, b: var) -> var:
38
+ if a < b:
39
+ return a
40
+ return b
41
+
42
+ func max(a: var, b: var) -> var:
43
+ if a > b:
44
+ return a
45
+ return b
46
+
47
+ func clamp(val: var, lo: var, hi: var) -> var:
48
+ if val < lo:
49
+ return lo
50
+ if val > hi:
51
+ return hi
52
+ return val
53
+
54
+ func floor(x: float) -> int:
55
+ var i = x
56
+ if i > x:
57
+ i = i - 1
58
+ return i
59
+
60
+ func ceil(x: float) -> int:
61
+ var i = x
62
+ if i < x:
63
+ i = i + 1
64
+ return i
65
+
66
+ func round(x: float) -> int:
67
+ return floor(x + 0.5)
68
+
69
+ func trunc(x: float) -> int:
70
+ if x >= 0.0:
71
+ return floor(x)
72
+ return ceil(x)
73
+
74
+ func fract(x: float) -> float:
75
+ return x - floor(x)
76
+
77
+ func sign(x: float) -> int:
78
+ if x > 0.0:
79
+ return 1
80
+ if x < 0.0:
81
+ return -1
82
+ return 0
83
+
84
+ # ========== 幂/对数 ==========
85
+
86
+ # 整数幂运算
87
+ func pow_int(base: int, exp: int) -> int:
88
+ if exp < 0:
89
+ return 0
90
+ var result = 1
91
+ var i = 0
92
+ while i < exp:
93
+ result = result * base
94
+ i = i + 1
95
+ return result
96
+
97
+ # 浮点幂运算(整数指数递归快速幂)
98
+ func pow(base: float, exp: int) -> float:
99
+ if exp == 0:
100
+ return 1.0
101
+ if exp < 0:
102
+ return 1.0 / pow(base, -exp)
103
+ var half = pow(base, exp / 2)
104
+ if exp % 2 == 0:
105
+ return half * half
106
+ return half * half * base
107
+
108
+ # 平方根(牛顿迭代法)
109
+ func sqrt(x: float) -> float:
110
+ if x < 0.0:
111
+ return 0.0
112
+ if x == 0.0:
113
+ return 0.0
114
+ var guess = x
115
+ var i = 0
116
+ while i < 20:
117
+ guess = (guess + x / guess) / 2.0
118
+ i = i + 1
119
+ return guess
120
+
121
+ # 立方根
122
+ func cbrt(x: float) -> float:
123
+ if x == 0.0:
124
+ return 0.0
125
+ var neg = false
126
+ if x < 0.0:
127
+ neg = true
128
+ x = -x
129
+ var guess = x
130
+ var i = 0
131
+ while i < 30:
132
+ guess = (2.0 * guess + x / (guess * guess)) / 3.0
133
+ i = i + 1
134
+ if neg:
135
+ return -guess
136
+ return guess
137
+
138
+ # e^x(泰勒级数)
139
+ func exp(x: float) -> float:
140
+ var result = 1.0
141
+ var term = 1.0
142
+ var n = 1
143
+ while n < 20:
144
+ term = term * x / n
145
+ result = result + term
146
+ n = n + 1
147
+ return result
148
+
149
+ # 自然对数 ln(x)(牛顿法)
150
+ func ln(x: float) -> float:
151
+ if x <= 0.0:
152
+ return 0.0
153
+ if x == 1.0:
154
+ return 0.0
155
+ var guess = x - 1.0
156
+ var i = 0
157
+ while i < 20:
158
+ var exp_guess = exp(guess)
159
+ guess = guess + (x - exp_guess) / exp_guess
160
+ i = i + 1
161
+ return guess
162
+
163
+ # 任意底对数
164
+ func log(base: float, x: float) -> float:
165
+ return ln(x) / ln(base)
166
+
167
+ func log2(x: float) -> float:
168
+ return ln(x) / 0.6931471805599453
169
+
170
+ func log10(x: float) -> float:
171
+ return ln(x) / 2.302585092994046
172
+
173
+ # ========== 三角函数(泰勒级数近似) ==========
174
+
175
+ # 角度参数规约到 [-pi, pi]
176
+ func _normalize_angle(x: float) -> float:
177
+ var pi = math_pi()
178
+ var two_pi = 2.0 * pi
179
+ while x > pi:
180
+ x = x - two_pi
181
+ while x < -pi:
182
+ x = x + two_pi
183
+ return x
184
+
185
+ # 正弦(泰勒级数)
186
+ func sin(x: float) -> float:
187
+ x = _normalize_angle(x)
188
+ var result = x
189
+ var term = x
190
+ var n = 1
191
+ while n < 10:
192
+ term = term * (-x * x) / ((2 * n) * (2 * n + 1))
193
+ result = result + term
194
+ n = n + 1
195
+ return result
196
+
197
+ # 余弦
198
+ func cos(x: float) -> float:
199
+ var pi = math_pi()
200
+ return sin(x + pi / 2.0)
201
+
202
+ # 正切
203
+ func tan(x: float) -> float:
204
+ var c = cos(x)
205
+ if c == 0.0:
206
+ return 0.0
207
+ return sin(x) / c
208
+
209
+ # 反正弦(牛顿法 + 区间判断)
210
+ func asin(x: float) -> float:
211
+ if x < -1.0:
212
+ return -math_pi() / 2.0
213
+ if x > 1.0:
214
+ return math_pi() / 2.0
215
+ if x == 0.0:
216
+ return 0.0
217
+ # 牛顿法求解 sin(y) - x = 0
218
+ var guess = x
219
+ var i = 0
220
+ while i < 10:
221
+ var s = sin(guess)
222
+ var c = cos(guess)
223
+ if c == 0.0:
224
+ return guess
225
+ guess = guess - (s - x) / c
226
+ i = i + 1
227
+ return guess
228
+
229
+ # 反余弦
230
+ func acos(x: float) -> float:
231
+ return math_pi() / 2.0 - asin(x)
232
+
233
+ # 反正切
234
+ func atan(x: float) -> float:
235
+ if x == 0.0:
236
+ return 0.0
237
+ # 用 asin 实现:atan(x) = asin(x / sqrt(1 + x²))
238
+ return asin(x / sqrt(1.0 + x * x))
239
+
240
+ # atan2(y, x)
241
+ func atan2(y: float, x: float) -> float:
242
+ if x > 0.0:
243
+ return atan(y / x)
244
+ if x < 0.0:
245
+ if y >= 0.0:
246
+ return atan(y / x) + math_pi()
247
+ return atan(y / x) - math_pi()
248
+ # x == 0
249
+ if y > 0.0:
250
+ return math_pi() / 2.0
251
+ if y < 0.0:
252
+ return -math_pi() / 2.0
253
+ return 0.0
254
+
255
+ # 双曲正弦
256
+ func sinh(x: float) -> float:
257
+ var ex = exp(x)
258
+ return (ex - 1.0 / ex) / 2.0
259
+
260
+ # 双曲余弦
261
+ func cosh(x: float) -> float:
262
+ var ex = exp(x)
263
+ return (ex + 1.0 / ex) / 2.0
264
+
265
+ # 双曲正切
266
+ func tanh(x: float) -> float:
267
+ if x == 0.0:
268
+ return 0.0
269
+ var sh = sinh(x)
270
+ var ch = cosh(x)
271
+ if ch == 0.0:
272
+ return 0.0
273
+ return sh / ch
274
+
275
+ # ========== 数值检查 ==========
276
+
277
+ func is_nan(x: float) -> bool:
278
+ # NaN 不等于自身
279
+ if x == x:
280
+ return false
281
+ return true
282
+
283
+ func is_finite(x: float) -> bool:
284
+ if is_nan(x):
285
+ return false
286
+ if x == 1.0:
287
+ if x / 1000000000000000000000000000.0 == 0.0:
288
+ return true
289
+ return true
290
+
291
+ # ========== 通用数学工具 ==========
292
+
293
+ func hypot(x: float, y: float) -> float:
294
+ return sqrt(x * x + y * y)
295
+
296
+ func lerp(a: float, b: float, t: float) -> float:
297
+ return a + (b - a) * t
298
+
299
+ func gcd(a: int, b: int) -> int:
300
+ a = abs_int(a)
301
+ b = abs_int(b)
302
+ while b != 0:
303
+ var t = b
304
+ b = a % b
305
+ a = t
306
+ return a
307
+
308
+ func lcm(a: int, b: int) -> int:
309
+ if a == 0:
310
+ if b == 0:
311
+ return 0
312
+ return abs_int(b)
313
+ return abs_int(a * b) / gcd(a, b)
314
+
315
+ func is_prime(n: int) -> bool:
316
+ if n < 2:
317
+ return false
318
+ if n <= 3:
319
+ return true
320
+ if n % 2 == 0:
321
+ return false
322
+ if n % 3 == 0:
323
+ return false
324
+ var i = 5
325
+ while i * i <= n:
326
+ if n % i == 0:
327
+ return false
328
+ if n % (i + 2) == 0:
329
+ return false
330
+ i = i + 6
331
+ return true
332
+
333
+ func factorial(n: int) -> int:
334
+ if n < 0:
335
+ return 0
336
+ var result = 1
337
+ var i = 2
338
+ while i <= n:
339
+ result = result * i
340
+ i = i + 1
341
+ return result
@@ -0,0 +1,6 @@
1
+ # ============================================================
2
+ # std::math —— 模块入口
3
+ # ============================================================
4
+
5
+ import std.math.math
6
+ import std.math.random
@@ -0,0 +1,104 @@
1
+ # ============================================================
2
+ # std::math::random —— 随机数生成
3
+ # 使用 xoshiro256** 算法(简化版线性同余生成器)
4
+ # ============================================================
5
+
6
+ import std.math
7
+
8
+ # ---- Random 类:伪随机数生成器 ----
9
+ class Random:
10
+ seed: int # 当前种子值
11
+ a: int # 乘数 6364136223846793005
12
+ c: int # 增量 1442695040888963407
13
+ m: int # 模数 2^31 - 1
14
+
15
+ # 初始化(使用时钟种子)
16
+ func new() -> var:
17
+ var r = new Random()
18
+ # 默认种子(可通过 time 模块改进)
19
+ r.seed = 123456789
20
+ r.a = 636413622384679
21
+ r.c = 1442695040
22
+ r.m = 2147483647
23
+ return r
24
+
25
+ # 指定种子初始化(可复现随机序列)
26
+ func with_seed(seed: int) -> var:
27
+ var r = new Random()
28
+ r.seed = seed
29
+ r.a = 636413622384679
30
+ r.c = 1442695040
31
+ r.m = 2147483647
32
+ return r
33
+
34
+ # 生成下一个随机整数(LCG 算法)
35
+ func _next_int() -> int:
36
+ self.seed = (self.a * self.seed + self.c) % self.m
37
+ return self.seed
38
+
39
+ # 生成 [0, 1) 的浮点数
40
+ func next() -> float:
41
+ var r = self._next_int()
42
+ var m = self.m
43
+ return r / m
44
+
45
+ # 生成 [lo, hi] 的整数
46
+ func next_int(lo: int, hi: int) -> int:
47
+ if lo >= hi:
48
+ return lo
49
+ var range = hi - lo + 1
50
+ var r = self._next_int()
51
+ return lo + (r % range)
52
+
53
+ # 生成 [lo, hi) 的浮点数
54
+ func next_float(lo: float, hi: float) -> float:
55
+ if lo >= hi:
56
+ return lo
57
+ return lo + self.next() * (hi - lo)
58
+
59
+ # 正态分布(Box-Muller 变换)
60
+ func gaussian(mean: float, stddev: float) -> float:
61
+ var u1 = self.next()
62
+ if u1 == 0.0:
63
+ u1 = 0.000001
64
+ var u2 = self.next()
65
+ var z = sqrt(-2.0 * ln(u1)) * cos(2.0 * math_pi() * u2)
66
+ return mean + z * stddev
67
+
68
+ # 从列表中随机选择
69
+ func choice(items: var) -> var:
70
+ var n = len(items)
71
+ if n == 0:
72
+ return nil
73
+ var idx = self.next_int(0, n - 1)
74
+ return items[idx]
75
+
76
+ # 洗牌(Fisher-Yates)
77
+ func shuffle(items: var) -> var:
78
+ var n = len(items)
79
+ var result = []
80
+ var i = 0
81
+ while i < n:
82
+ result = result + [items[i]]
83
+ i = i + 1
84
+ i = n - 1
85
+ while i > 0:
86
+ var j = self.next_int(0, i)
87
+ var tmp = result[i]
88
+ result[i] = result[j]
89
+ result[j] = tmp
90
+ i = i - 1
91
+ return result
92
+
93
+ # 不放回抽样
94
+ func sample(items: var, k: int) -> var:
95
+ var n = len(items)
96
+ if k > n:
97
+ k = n
98
+ var shuffled = self.shuffle(items)
99
+ var result = []
100
+ var i = 0
101
+ while i < k:
102
+ result = result + [shuffled[i]]
103
+ i = i + 1
104
+ return result
@@ -0,0 +1,9 @@
1
+ # ============================================================
2
+ # std::mem.allocator —— 分配器接口
3
+ # Zig 风格:显式分配/释放,无 hidden GC
4
+ # ============================================================
5
+
6
+ extern func malloc(size: int) -> int
7
+ extern func c_free(ptr: int)
8
+ extern func calloc(count: int, size: int) -> int
9
+ extern func c_realloc(ptr: int, size: int) -> int
@@ -0,0 +1,41 @@
1
+ # ============================================================
2
+ # std::mem.arena —— 竞技场分配器(ArenaAllocator)
3
+ # Zig 风格:一次性分配、批量释放
4
+ # ============================================================
5
+
6
+ var arena_used: int = 0
7
+ var arena_capacity: int = 0
8
+ var arena_block_size: int = 65536
9
+ var arena_blocks: var = []
10
+
11
+ func arena_reset():
12
+ arena_used = 0
13
+ arena_capacity = 0
14
+ arena_blocks = []
15
+
16
+ func arena_alloc(size: int) -> int:
17
+ if arena_used + size > arena_capacity:
18
+ var new_cap = arena_block_size
19
+ if size > new_cap:
20
+ new_cap = size
21
+ var block_ptr = malloc(new_cap)
22
+ arena_blocks = arena_blocks + [block_ptr]
23
+ arena_capacity = new_cap
24
+ arena_used = 0
25
+ var last_block = arena_blocks[len(arena_blocks) - 1]
26
+ var ptr = last_block + arena_used
27
+ arena_used = arena_used + size
28
+ return ptr
29
+
30
+ func arena_dealloc(ptr: int):
31
+ # 竞技场不支持单块释放
32
+
33
+ func arena_free_all():
34
+ var i = 0
35
+ while i < len(arena_blocks):
36
+ c_free(arena_blocks[i])
37
+ i = i + 1
38
+ arena_reset()
39
+
40
+ func arena_allocated() -> int:
41
+ return arena_used