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.
- vx_toolkit/__init__.py +10 -0
- vx_toolkit/_bin/headers/collections/vec.c +8 -0
- vx_toolkit/_bin/headers/collections/vec.vxh +2 -0
- vx_toolkit/_bin/headers/cpp/greet.cpp +11 -0
- vx_toolkit/_bin/headers/cpp/greet.hpp +6 -0
- vx_toolkit/_bin/headers/cpp/greet.vxh +4 -0
- vx_toolkit/_bin/headers/fmath.c +3 -0
- vx_toolkit/_bin/headers/fmath.vxh +5 -0
- vx_toolkit/_bin/headers/math.c +6 -0
- vx_toolkit/_bin/headers/math.vxh +4 -0
- vx_toolkit/_bin/headers/sys.c +9 -0
- vx_toolkit/_bin/headers/sys.vxh +3 -0
- vx_toolkit/_bin/headers/text.c +17 -0
- vx_toolkit/_bin/headers/text.vxh +6 -0
- vx_toolkit/_bin/libvxrt.a +0 -0
- vx_toolkit/_bin/libvxtidy.dylib +0 -0
- vx_toolkit/_bin/std/README.md +90 -0
- vx_toolkit/_bin/std/bytes.vx +65 -0
- vx_toolkit/_bin/std/char.vx +83 -0
- vx_toolkit/_bin/std/collections/hashmap.vx +31 -0
- vx_toolkit/_bin/std/collections/linked_list.vx +166 -0
- vx_toolkit/_bin/std/collections/mod.vx +8 -0
- vx_toolkit/_bin/std/collections/set.vx +102 -0
- vx_toolkit/_bin/std/collections/vec.vx +40 -0
- vx_toolkit/_bin/std/conv.vx +57 -0
- vx_toolkit/_bin/std/error.vx +165 -0
- vx_toolkit/_bin/std/io/dir.vx +50 -0
- vx_toolkit/_bin/std/io/file.vx +154 -0
- vx_toolkit/_bin/std/io/mod.vx +5 -0
- vx_toolkit/_bin/std/io/path.vx +105 -0
- vx_toolkit/_bin/std/io/stream.vx +82 -0
- vx_toolkit/_bin/std/io.vx +6 -0
- vx_toolkit/_bin/std/iter.vx +67 -0
- vx_toolkit/_bin/std/macros.vx +117 -0
- vx_toolkit/_bin/std/math/math.vx +341 -0
- vx_toolkit/_bin/std/math/mod.vx +6 -0
- vx_toolkit/_bin/std/math/random.vx +104 -0
- vx_toolkit/_bin/std/mem/allocator.vx +9 -0
- vx_toolkit/_bin/std/mem/arena.vx +41 -0
- vx_toolkit/_bin/std/mem/general.vx +35 -0
- vx_toolkit/_bin/std/mem/mod.vx +11 -0
- vx_toolkit/_bin/std/mem/page.vx +23 -0
- vx_toolkit/_bin/std/mod.vx +5 -0
- vx_toolkit/_bin/std/option.vx +68 -0
- vx_toolkit/_bin/std/prelude.vx +13 -0
- vx_toolkit/_bin/std/reflect/mod.vx +129 -0
- vx_toolkit/_bin/std/string/codec.vx +146 -0
- vx_toolkit/_bin/std/string/core.vx +28 -0
- vx_toolkit/_bin/std/string/iter.vx +49 -0
- vx_toolkit/_bin/std/string/mod.vx +7 -0
- vx_toolkit/_bin/std/string/pattern.vx +84 -0
- vx_toolkit/_bin/std/string/util.vx +369 -0
- vx_toolkit/_bin/std/sys/coroutine.vx +46 -0
- vx_toolkit/_bin/std/sys/datetime.vx +160 -0
- vx_toolkit/_bin/std/sys/duration.vx +53 -0
- vx_toolkit/_bin/std/sys/env.vx +43 -0
- vx_toolkit/_bin/std/sys/mod.vx +10 -0
- vx_toolkit/_bin/std/sys/sync.vx +132 -0
- vx_toolkit/_bin/std/sys/time.vx +28 -0
- vx_toolkit/_bin/std/sys.vx +6 -0
- vx_toolkit/_bin/std/tests/run_all.vx +627 -0
- vx_toolkit/_bin/std/tests/smoke.vx +4 -0
- vx_toolkit/_bin/std/tests/test_collections.vx +42 -0
- vx_toolkit/_bin/std/tests/test_string_io.vx +202 -0
- vx_toolkit/_bin/vfmt +0 -0
- vx_toolkit/_bin/vlnk +0 -0
- vx_toolkit/_bin/vmake +0 -0
- vx_toolkit/_bin/vmake-lsp +0 -0
- vx_toolkit/_bin/vx +0 -0
- vx_toolkit/_bin/vxc +0 -0
- vx_toolkit/_bin/vxls +0 -0
- vx_toolkit/_dispatch.py +121 -0
- vx_toolkit-1.16.2.dist-info/METADATA +13 -0
- vx_toolkit-1.16.2.dist-info/RECORD +77 -0
- vx_toolkit-1.16.2.dist-info/WHEEL +4 -0
- vx_toolkit-1.16.2.dist-info/entry_points.txt +8 -0
- vx_toolkit-1.16.2.dist-info/licenses/LICENSE +198 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# std::sys::sync —— 同步原语
|
|
3
|
+
# 第一版:Mutex、Semaphore、Channel、Once
|
|
4
|
+
# ============================================================
|
|
5
|
+
|
|
6
|
+
import std.error
|
|
7
|
+
import std.collections.vec
|
|
8
|
+
|
|
9
|
+
# ---- Mutex 类:互斥锁 ----
|
|
10
|
+
class Mutex:
|
|
11
|
+
locked: bool
|
|
12
|
+
value: var # 锁保护的值
|
|
13
|
+
|
|
14
|
+
func new(val: var) -> var:
|
|
15
|
+
var m = new Mutex()
|
|
16
|
+
m.locked = false
|
|
17
|
+
m.value = val
|
|
18
|
+
return m
|
|
19
|
+
|
|
20
|
+
# 获取锁(阻塞简化版:忙等待)
|
|
21
|
+
func lock() -> var:
|
|
22
|
+
while self.locked:
|
|
23
|
+
pass
|
|
24
|
+
self.locked = true
|
|
25
|
+
return self
|
|
26
|
+
|
|
27
|
+
# 释放锁
|
|
28
|
+
func unlock():
|
|
29
|
+
self.locked = false
|
|
30
|
+
|
|
31
|
+
# 尝试获取锁
|
|
32
|
+
func try_lock() -> var:
|
|
33
|
+
if self.locked:
|
|
34
|
+
return nil
|
|
35
|
+
self.locked = true
|
|
36
|
+
return self
|
|
37
|
+
|
|
38
|
+
# 获取内部值
|
|
39
|
+
func get() -> var:
|
|
40
|
+
return self.value
|
|
41
|
+
|
|
42
|
+
# 设置内部值
|
|
43
|
+
func set(val: var):
|
|
44
|
+
self.value = val
|
|
45
|
+
|
|
46
|
+
# ---- Semaphore 类:信号量 ----
|
|
47
|
+
class Semaphore:
|
|
48
|
+
permits: int
|
|
49
|
+
|
|
50
|
+
func new(count: int) -> var:
|
|
51
|
+
var s = new Semaphore()
|
|
52
|
+
s.permits = count
|
|
53
|
+
return s
|
|
54
|
+
|
|
55
|
+
# 获取信号量(可能阻塞)
|
|
56
|
+
func acquire():
|
|
57
|
+
# 忙等待:没有许可时等待
|
|
58
|
+
while self.permits <= 0:
|
|
59
|
+
pass
|
|
60
|
+
self.permits = self.permits - 1
|
|
61
|
+
|
|
62
|
+
# 非阻塞尝试
|
|
63
|
+
func try_acquire() -> bool:
|
|
64
|
+
if self.permits > 0:
|
|
65
|
+
self.permits = self.permits - 1
|
|
66
|
+
return true
|
|
67
|
+
return false
|
|
68
|
+
|
|
69
|
+
# 释放信号量
|
|
70
|
+
func release():
|
|
71
|
+
self.permits = self.permits + 1
|
|
72
|
+
|
|
73
|
+
# 当前可用许可数
|
|
74
|
+
func available() -> int:
|
|
75
|
+
return self.permits
|
|
76
|
+
|
|
77
|
+
# ---- Channel 类:无界通道 ----
|
|
78
|
+
# 基于 Mutex 保护的 Vec
|
|
79
|
+
class Channel:
|
|
80
|
+
buffer: var # Vec 实例
|
|
81
|
+
closed: bool
|
|
82
|
+
lock: var # Mutex 实例
|
|
83
|
+
|
|
84
|
+
func new() -> var:
|
|
85
|
+
var ch = new Channel()
|
|
86
|
+
ch.buffer = new Vec()
|
|
87
|
+
ch.closed = false
|
|
88
|
+
ch.lock = new Mutex(ch.buffer)
|
|
89
|
+
return ch
|
|
90
|
+
|
|
91
|
+
# 发送消息
|
|
92
|
+
func send(val: var):
|
|
93
|
+
if self.closed:
|
|
94
|
+
return
|
|
95
|
+
self.lock.lock()
|
|
96
|
+
var buf = self.lock.get()
|
|
97
|
+
buf.push(val)
|
|
98
|
+
self.lock.unlock()
|
|
99
|
+
|
|
100
|
+
# 接收消息(阻塞简化版)
|
|
101
|
+
func recv() -> var:
|
|
102
|
+
while true:
|
|
103
|
+
if self.closed:
|
|
104
|
+
var buf = self.lock.get()
|
|
105
|
+
if buf.size() == 0:
|
|
106
|
+
return nil
|
|
107
|
+
self.lock.lock()
|
|
108
|
+
var buf = self.lock.get()
|
|
109
|
+
if buf.size() > 0:
|
|
110
|
+
var val = buf.remove(0)
|
|
111
|
+
self.lock.unlock()
|
|
112
|
+
return val
|
|
113
|
+
self.lock.unlock()
|
|
114
|
+
|
|
115
|
+
# 非阻塞尝试接收
|
|
116
|
+
func try_recv() -> var:
|
|
117
|
+
self.lock.lock()
|
|
118
|
+
var buf = self.lock.get()
|
|
119
|
+
if buf.size() > 0:
|
|
120
|
+
var val = buf.remove(0)
|
|
121
|
+
self.lock.unlock()
|
|
122
|
+
return val
|
|
123
|
+
self.lock.unlock()
|
|
124
|
+
return nil
|
|
125
|
+
|
|
126
|
+
# 关闭通道
|
|
127
|
+
func close():
|
|
128
|
+
self.closed = true
|
|
129
|
+
|
|
130
|
+
# 检查是否关闭
|
|
131
|
+
func is_closed() -> bool:
|
|
132
|
+
return self.closed
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# std::sys::time —— 时间日期处理
|
|
3
|
+
# ============================================================
|
|
4
|
+
|
|
5
|
+
import std.error
|
|
6
|
+
|
|
7
|
+
# ---- Instant 类:单调时钟(不受系统时间调整影响)----
|
|
8
|
+
class Instant:
|
|
9
|
+
secs: int
|
|
10
|
+
nanos: int
|
|
11
|
+
|
|
12
|
+
# 创建当前时刻
|
|
13
|
+
func now() -> var:
|
|
14
|
+
var inst = new Instant()
|
|
15
|
+
# TODO: 需要 VM 内建 monotonic_clock 指令
|
|
16
|
+
inst.secs = 0
|
|
17
|
+
inst.nanos = 0
|
|
18
|
+
return inst
|
|
19
|
+
|
|
20
|
+
# 计算与另一时刻的时间差
|
|
21
|
+
func duration_since(earlier: var) -> var:
|
|
22
|
+
var dur = new Duration()
|
|
23
|
+
dur.secs = self.secs - earlier.secs
|
|
24
|
+
dur.nanos = self.nanos - earlier.nanos
|
|
25
|
+
if dur.nanos < 0:
|
|
26
|
+
dur.nanos = dur.nanos + 1000000000
|
|
27
|
+
dur.secs = dur.secs - 1
|
|
28
|
+
return dur
|