l0n0lc 0.8.4__py3-none-any.whl → 1.0.0__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 (47) hide show
  1. l0n0lc/Py/350/275/254Cpp/350/275/254/350/257/221/345/231/250.py +579 -0
  2. l0n0lc/__init__.py +75 -6
  3. l0n0lc/aot/347/274/226/350/257/221.py +679 -0
  4. l0n0lc/ast/350/256/277/351/227/256/350/200/205.py +599 -0
  5. l0n0lc/cpp/347/261/273/345/236/213.py +330 -0
  6. l0n0lc/cpp/347/274/226/350/257/221/345/231/250.py +317 -0
  7. l0n0lc/simd/344/274/230/345/214/226.py +260 -0
  8. l0n0lc/std_map.py +153 -0
  9. l0n0lc/std_set.py +185 -0
  10. l0n0lc/std_vector.py +96 -0
  11. l0n0lc//344/273/243/347/240/201/344/274/230/345/214/226.py +302 -0
  12. l0n0lc//344/273/243/347/240/201/347/224/237/346/210/220.py +546 -0
  13. l0n0lc//344/276/235/350/265/226/346/263/250/345/205/245.py +155 -0
  14. l0n0lc//345/215/263/346/227/266/347/274/226/350/257/221.py +192 -0
  15. l0n0lc//345/217/230/351/207/217/347/256/241/347/220/206/345/231/250.py +123 -0
  16. l0n0lc//345/237/272/347/241/200/346/230/240/345/260/204.py +103 -0
  17. l0n0lc//345/237/272/347/241/200/346/267/267/345/205/245.py +147 -0
  18. l0n0lc//345/256/271/345/231/250/346/236/204/345/273/272/345/231/250.py +214 -0
  19. l0n0lc//345/267/245/345/205/267.py +285 -0
  20. l0n0lc//345/271/266/350/241/214/347/274/226/350/257/221/345/231/250.py +412 -0
  21. l0n0lc//345/274/202/345/270/270.py +474 -0
  22. l0n0lc//346/225/260/347/273/204/345/257/271/350/261/241/346/261/240.py +248 -0
  23. l0n0lc//346/226/207/344/273/266/347/256/241/347/220/206/345/231/250.py +286 -0
  24. l0n0lc//346/227/245/345/277/227/345/267/245/345/205/267.py +152 -0
  25. l0n0lc//347/261/273/345/236/213/346/216/250/346/226/255/345/267/245/345/205/267.py +352 -0
  26. l0n0lc//347/261/273/345/236/213/350/275/254/346/215/242.py +210 -0
  27. l0n0lc//347/261/273/346/224/257/346/214/201.py +372 -0
  28. l0n0lc//347/274/226/350/257/221/344/270/212/344/270/213/346/226/207.py +132 -0
  29. l0n0lc//347/274/226/350/257/221/347/256/241/347/220/206/345/231/250.py +171 -0
  30. l0n0lc//350/241/250/350/276/276/345/274/217/345/244/204/347/220/206.py +462 -0
  31. l0n0lc//350/275/254/350/257/221/345/231/250/345/267/245/345/205/267.py +49 -0
  32. l0n0lc//350/277/220/350/241/214/346/227/266/345/212/240/350/275/275.py +217 -0
  33. l0n0lc//351/200/232/347/224/250/345/267/245/345/205/267.py +149 -0
  34. l0n0lc-1.0.0.dist-info/METADATA +363 -0
  35. l0n0lc-1.0.0.dist-info/RECORD +39 -0
  36. {l0n0lc-0.8.4.dist-info → l0n0lc-1.0.0.dist-info}/WHEEL +1 -1
  37. l0n0lc-1.0.0.dist-info/entry_points.txt +2 -0
  38. {l0n0lc-0.8.4.dist-info → l0n0lc-1.0.0.dist-info}/licenses/LICENSE +0 -0
  39. l0n0lc/StdList.py +0 -24
  40. l0n0lc/StdMap.py +0 -21
  41. l0n0lc/c/345/237/272/347/241/200/345/244/204/347/220/206.py +0 -207
  42. l0n0lc/jit.py +0 -604
  43. l0n0lc//347/274/226/350/257/221.py +0 -58
  44. l0n0lc//351/200/232/347/224/250.py +0 -134
  45. l0n0lc-0.8.4.dist-info/METADATA +0 -241
  46. l0n0lc-0.8.4.dist-info/RECORD +0 -12
  47. {l0n0lc-0.8.4.dist-info → l0n0lc-1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,155 @@
1
+ """
2
+ 依赖注入模块 - 实现依赖注入模式,降低模块间的耦合度
3
+ """
4
+
5
+ from typing import Dict, Any, Type, TypeVar, Callable, Optional, Union, cast
6
+ from abc import ABC, abstractmethod
7
+
8
+ T = TypeVar('T')
9
+
10
+
11
+ class 服务容器:
12
+ """简单的依赖注入容器"""
13
+
14
+ def __init__(self):
15
+ self._服务: Dict[str, Any] = {}
16
+ self._工厂: Dict[str, Union[Callable[[], Any], Type[Any], Any]] = {}
17
+ self._单例: Dict[str, bool] = {}
18
+
19
+ def 注册单例(self, 接口: Type[T], 实现: Type[T]) -> None:
20
+ """注册单例服务"""
21
+ 接口名 = 接口.__name__
22
+ self._工厂[接口名] = 实现
23
+ self._单例[接口名] = True
24
+
25
+ def 注册工厂(self, 接口: Type[T], 工厂: Callable[[], T]) -> None:
26
+ """注册工厂方法"""
27
+ 接口名 = 接口.__name__
28
+ self._工厂[接口名] = 工厂
29
+ self._单例[接口名] = False
30
+
31
+ def 注册实例(self, 接口: Type[T], 实例: T) -> None:
32
+ """注册实例"""
33
+ 接口名 = 接口.__name__
34
+ self._服务[接口名] = 实例
35
+ self._单例[接口名] = True
36
+
37
+ def 解析(self, 接口: Type[T]) -> T:
38
+ """解析服务"""
39
+ 接口名 = 接口.__name__
40
+
41
+ # 如果已有实例且为单例,直接返回
42
+ if 接口名 in self._服务 and self._单例.get(接口名, False):
43
+ return cast(T, self._服务[接口名])
44
+
45
+ # 创建新实例
46
+ if 接口名 in self._工厂:
47
+ if callable(self._工厂[接口名]):
48
+ 实例 = self._工厂[接口名]()
49
+ else:
50
+ 实例 = self._工厂[接口名]
51
+
52
+ if self._单例.get(接口名, False):
53
+ self._服务[接口名] = 实例
54
+
55
+ return cast(T, 实例)
56
+
57
+ raise ValueError(f"未注册的服务: {接口名}")
58
+
59
+ def 清理(self) -> None:
60
+ """清理容器"""
61
+ self._服务.clear()
62
+ self._工厂.clear()
63
+ self._单例.clear()
64
+
65
+
66
+ # 全局服务容器
67
+ 全局容器 = 服务容器()
68
+
69
+
70
+ class 转译器组件接口(ABC):
71
+ """转译器组件的抽象基类"""
72
+
73
+ @abstractmethod
74
+ def 初始化(self, 转译器) -> None:
75
+ """初始化组件"""
76
+ pass
77
+
78
+ @abstractmethod
79
+ def 清理(self) -> None:
80
+ """清理组件资源"""
81
+ pass
82
+
83
+
84
+ class 代码生成接口(ABC):
85
+ """代码生成接口"""
86
+
87
+ @abstractmethod
88
+ def 生成代码(self) -> str:
89
+ """生成代码"""
90
+ pass
91
+
92
+ @abstractmethod
93
+ def 保存代码(self, 文件路径: str) -> None:
94
+ """保存代码到文件"""
95
+ pass
96
+
97
+
98
+ class 类型推断接口(ABC):
99
+ """类型推断接口"""
100
+
101
+ @abstractmethod
102
+ def 推断类型(self, 节点) -> str:
103
+ """推断类型"""
104
+ pass
105
+
106
+ @abstractmethod
107
+ def 验证类型(self, 类型1: str, 类型2: str) -> bool:
108
+ """验证类型兼容性"""
109
+ pass
110
+
111
+
112
+ class 编译管理接口(ABC):
113
+ """编译管理接口"""
114
+
115
+ @abstractmethod
116
+ def 编译(self, 源文件: str, 输出文件: str) -> bool:
117
+ """编译文件"""
118
+ pass
119
+
120
+ @abstractmethod
121
+ def 清理临时文件(self) -> None:
122
+ """清理临时文件"""
123
+ pass
124
+
125
+
126
+ class 依赖解析接口(ABC):
127
+ """依赖解析接口"""
128
+
129
+ @abstractmethod
130
+ def 解析依赖(self, 函数) -> list:
131
+ """解析函数依赖"""
132
+ pass
133
+
134
+ @abstractmethod
135
+ def 排序依赖(self, 依赖列表: list) -> list:
136
+ """对依赖进行拓扑排序"""
137
+ pass
138
+
139
+
140
+ def 注册服务(接口: Type[T], 实现: Type[T], 单例: bool = True) -> None:
141
+ """便捷的服务注册函数"""
142
+ if 单例:
143
+ 全局容器.注册单例(接口, 实现)
144
+ else:
145
+ 全局容器.注册工厂(接口, 实现)
146
+
147
+
148
+ def 解析服务(接口: Type[T]) -> T:
149
+ """便捷的服务解析函数"""
150
+ return 全局容器.解析(接口)
151
+
152
+
153
+ def 清理容器() -> None:
154
+ """清理全局容器"""
155
+ 全局容器.清理()
@@ -0,0 +1,192 @@
1
+
2
+ import os
3
+ import inspect
4
+ from typing import Callable, Optional
5
+ from .Py转Cpp转译器 import Py转Cpp转译器
6
+ from .cpp编译器 import Cpp编译器
7
+ from .工具 import 全局上下文
8
+ from .日志工具 import 日志
9
+
10
+
11
+ def _从环境变量获取LTO设置() -> bool:
12
+ """
13
+ 从环境变量获取 LTO 设置
14
+
15
+ 环境变量 L0N0LC_ENABLE_LTO:
16
+ - "1", "true", "True", "TRUE" -> 启用 LTO
17
+ - "0", "false", "False", "FALSE" 或未设置 -> 禁用 LTO
18
+
19
+ Returns:
20
+ 是否启用 LTO
21
+ """
22
+ 环境变量值 = os.environ.get('L0N0LC_ENABLE_LTO', '').strip()
23
+ if 环境变量值:
24
+ return 环境变量值.lower() in ('1', 'true')
25
+ return False
26
+
27
+
28
+ def _从环境变量获取向量化设置() -> bool:
29
+ """
30
+ 从环境变量获取向量化设置
31
+
32
+ 环境变量 L0N0LC_ENABLE_VECTORIZE:
33
+ - "1", "true", "True", "TRUE" -> 启用向量化
34
+ - "0", "false", "False", "FALSE" 或未设置 -> 禁用向量化
35
+
36
+ Returns:
37
+ 是否启用向量化
38
+ """
39
+ 环境变量值 = os.environ.get('L0N0LC_ENABLE_VECTORIZE', '').strip()
40
+ if 环境变量值:
41
+ return 环境变量值.lower() in ('1', 'true')
42
+ return False
43
+
44
+
45
+ def 即时编译(
46
+ 转译器类=None,
47
+ 编译器类=None,
48
+ 总是重编: bool = False,
49
+ 可执行文件名: Optional[str] = None,
50
+ 优化级别: str = 'O2',
51
+ 启用并行编译: bool = True,
52
+ 最大进程数: Optional[int] = None,
53
+ 启用LTO: Optional[bool] = None,
54
+ 启用向量化: Optional[bool] = None,
55
+ SIMD指令集: Optional[str] = None,
56
+ 启用代码优化: bool = True
57
+ ):
58
+ """
59
+ JIT (即时编译) 装饰器。
60
+
61
+ 能够将受支持的 Python 函数转换为 C++ 代码,编译为动态库并加载执行。
62
+ 大大提高计算密集型任务的性能。
63
+
64
+ 注意:编译延迟到函数首次调用时才执行(可执行文件除外)。
65
+
66
+ Args:
67
+ 转译器类: 自定义转译器类 (可选)
68
+ 编译器类: 自定义编译器类 (可选)
69
+ 总是重编: 是否每次运行都强制重新编译 (默认为 False,利用缓存)
70
+ 可执行文件名: 如果指定,将编译为独立的可执行文件而不是动态库
71
+ 优化级别: 编译优化级别,默认为 'O2'
72
+ - O0: 无优化,编译最快,运行最慢
73
+ - O1: 基础优化
74
+ - O2: 标准优化(默认)
75
+ - O3: 最大优化,编译较慢,运行最快
76
+ - Os: 优化代码大小
77
+ - Ofast: 激进优化(可能破坏标准合规)
78
+ - Og: 调试优化
79
+ - Oz: 最小代码大小
80
+ 启用并行编译: 是否启用并行编译依赖函数(默认为 True)
81
+ 最大进程数: 并行编译的最大进程数(None 表示自动检测 CPU 核心数)
82
+ 启用LTO: 是否启用链接时优化(LTO),默认为 None(自动检测环境变量)
83
+ - None: 检查环境变量 L0N0LC_ENABLE_LTO
84
+ - True: 强制启用 LTO
85
+ - False: 强制禁用 LTO
86
+ LTO 可以提升运行时性能 10-30%,但会增加编译时间
87
+ 启用向量化: 是否启用 SIMD 向量化优化,默认为 None(自动检测环境变量)
88
+ - None: 检查环境变量 L0N0LC_ENABLE_VECTORIZE
89
+ - True: 强制启用向量化
90
+ - False: 强制禁用向量化
91
+ 向量化可以提升数组操作性能 2-8x,适用于计算密集型循环
92
+ SIMD指令集: 指定 SIMD 指令集,None 表示自动检测
93
+ 可选值: SSE2, SSE4_2, AVX, AVX2, AVX512F, NEON
94
+ 启用代码优化: 是否启用代码优化(默认为 True)
95
+ - 常量折叠:编译时计算常量表达式
96
+ - 死代码消除:移除永远不会执行的代码
97
+ - 循环优化:使用范围循环替代索引循环
98
+ 可以提升运行时性能 20-50%,代码体积减少 10-30%
99
+
100
+ Examples:
101
+ >>> @jit()
102
+ >>> def func(x: int) -> int:
103
+ >>> return x * 2
104
+
105
+ >>> @jit(优化级别='O3')
106
+ >>> def performance_critical(x: int) -> int:
107
+ >>> return x ** 2
108
+
109
+ >>> @jit(优化级别='O0')
110
+ >>> def fast_compile(x: int) -> int:
111
+ >>> return x + 1
112
+
113
+ >>> @jit(启用并行编译=False) # 禁用并行编译
114
+ >>> def serial_compile(x: int) -> int:
115
+ >>> return x + 1
116
+
117
+ >>> @jit(最大进程数=2) # 限制最多使用 2 个进程
118
+ >>> def limited_parallel(x: int) -> int:
119
+ >>> return x * 2
120
+
121
+ >>> @jit(启用LTO=True) # 启用链接时优化
122
+ >>> def lto_func(x: int) -> int:
123
+ >>> return x * x
124
+
125
+ >>> @jit(启用向量化=True) # 启用 SIMD 向量化
126
+ >>> def vectorized_func(arr: List[int]) -> int:
127
+ >>> total = 0
128
+ >>> for x in arr:
129
+ >>> total += x
130
+ >>> return total
131
+ """
132
+ def 装饰器(fn: Callable):
133
+ # 输入验证
134
+ if not callable(fn):
135
+ raise TypeError(
136
+ f"@jit 装饰器只能用于函数或类,得到: {type(fn).__name__}\n"
137
+ f"请确保 @jit 装饰器应用在函数定义上,例如:\n"
138
+ f" @jit()\n"
139
+ f" def my_function():\n"
140
+ f" pass"
141
+ )
142
+
143
+ # 检查是否为异步函数
144
+ if inspect.iscoroutinefunction(fn):
145
+ raise NotImplementedError("暂不支持异步函数 (async/await),请使用同步函数")
146
+
147
+ _编译器类 = 编译器类 or Cpp编译器
148
+ _转译器类 = 转译器类 or Py转Cpp转译器
149
+
150
+ # 确定 LTO 设置(优先使用参数,其次使用环境变量)
151
+ 实际LTO设置: bool
152
+ if 启用LTO is None:
153
+ 实际LTO设置 = _从环境变量获取LTO设置()
154
+ else:
155
+ 实际LTO设置 = 启用LTO
156
+
157
+ # 确定向量化设置(优先使用参数,其次使用环境变量)
158
+ 实际向量化设置: bool
159
+ if 启用向量化 is None:
160
+ 实际向量化设置 = _从环境变量获取向量化设置()
161
+ else:
162
+ 实际向量化设置 = 启用向量化
163
+
164
+ # 创建编译器实例,传入所有优化参数
165
+ 编译器实例 = _编译器类(
166
+ 优化级别=优化级别,
167
+ 启用LTO=实际LTO设置,
168
+ 启用向量化=实际向量化设置,
169
+ SIMD指令集=SIMD指令集
170
+ )
171
+
172
+ # 创建转译器实例,传递参数(包括并行编译参数和代码优化参数)
173
+ 转译器实例 = _转译器类(fn, 编译器实例, 可执行文件名, 总是重编, 启用并行编译, 最大进程数, 启用代码优化)
174
+
175
+ # 可执行文件需要立即编译
176
+ if 可执行文件名 is not None:
177
+ 库文件名 = 转译器实例.获取库文件名()
178
+ 库路径 = f'{全局上下文.工作目录}/{库文件名}'
179
+
180
+ if 总是重编 or not os.path.exists(库路径):
181
+ 日志.缓存信息("编译", fn.__name__ if hasattr(fn, '__name__') else "unknown")
182
+ 转译器实例.编译()
183
+
184
+ # 将转译器对象添加到目标函数的全局变量中,以便其他JIT函数可以调用它
185
+ if hasattr(fn, '__name__'):
186
+ 转译器实例.全局变量[fn.__name__] = 转译器实例
187
+
188
+ return 转译器实例
189
+ return 装饰器
190
+
191
+
192
+ jit = 即时编译
@@ -0,0 +1,123 @@
1
+ """
2
+ 变量管理器模块
3
+
4
+ 负责管理变量作用域、变量查找和变量注册。
5
+ 从 Py转Cpp转译器 中分离出来,实现单一职责原则。
6
+ """
7
+
8
+ from typing import Optional, Any, Dict, List
9
+ from .cpp类型 import C变量
10
+
11
+
12
+ class 变量管理器:
13
+ """
14
+ 变量管理器
15
+
16
+ 负责:
17
+ - 管理变量作用域栈
18
+ - 查找变量
19
+ - 注册变量
20
+ """
21
+
22
+ def __init__(self):
23
+ """初始化变量管理器"""
24
+ # 变量作用域栈,每个元素是一个字典 {变量名: C变量}
25
+ self.作用域变量: List[Dict[str, C变量]] = [{}]
26
+ self.当前作用域层级 = 0
27
+
28
+ def 进入作用域(self):
29
+ """
30
+ 进入新的作用域(如 if/for 块内部)
31
+
32
+ 创建一个新的空字典用于存储当前作用域的变量。
33
+ """
34
+ self.作用域变量.append({})
35
+ self.当前作用域层级 += 1
36
+
37
+ def 退出作用域(self):
38
+ """
39
+ 退出当前作用域
40
+
41
+ 弹出当前作用域的变量字典,返回到上一层作用域。
42
+ """
43
+ if self.当前作用域层级 > 0:
44
+ self.作用域变量.pop()
45
+ self.当前作用域层级 -= 1
46
+
47
+ def 获取C变量(self, name: str) -> Optional[C变量]:
48
+ """
49
+ 从当前及上层作用域查找 C 变量
50
+
51
+ Args:
52
+ name: 变量名
53
+
54
+ Returns:
55
+ 找到的 C 变量,如果未找到返回 None
56
+ """
57
+ # 从当前作用域向上查找
58
+ for i in range(self.当前作用域层级, -1, -1):
59
+ v = self.作用域变量[i].get(name)
60
+ if v is not None:
61
+ return v
62
+ return None
63
+
64
+ def 添加C变量(self, variable: C变量):
65
+ """
66
+ 在当前作用域注册 C 变量
67
+
68
+ Args:
69
+ variable: 要注册的 C 变量
70
+ """
71
+ self.作用域变量[self.当前作用域层级][variable.名称] = variable
72
+
73
+ def 变量是否存在(self, name: str) -> bool:
74
+ """
75
+ 检查变量是否存在于任何作用域
76
+
77
+ Args:
78
+ name: 变量名
79
+
80
+ Returns:
81
+ 变量是否存在
82
+ """
83
+ return self.获取C变量(name) is not None
84
+
85
+ def 获取当前作用域变量数(self) -> int:
86
+ """
87
+ 获取当前作用域的变量数量
88
+
89
+ Returns:
90
+ 当前作用域的变量数量
91
+ """
92
+ return len(self.作用域变量[self.当前作用域层级])
93
+
94
+ def 获取所有作用域变量数(self) -> int:
95
+ """
96
+ 获取所有作用域的变量总数
97
+
98
+ Returns:
99
+ 所有作用域的变量总数
100
+ """
101
+ total = 0
102
+ for scope in self.作用域变量:
103
+ total += len(scope)
104
+ return total
105
+
106
+ def 清空所有作用域(self):
107
+ """清空所有作用域,重置为初始状态"""
108
+ self.作用域变量 = [{}]
109
+ self.当前作用域层级 = 0
110
+
111
+ def 获取状态摘要(self) -> Dict[str, Any]:
112
+ """
113
+ 获取变量管理器的状态摘要
114
+
115
+ Returns:
116
+ 包含当前状态的字典
117
+ """
118
+ return {
119
+ "当前作用域层级": self.当前作用域层级,
120
+ "作用域总数": len(self.作用域变量),
121
+ "当前作用域变量数": self.获取当前作用域变量数(),
122
+ "总变量数": self.获取所有作用域变量数(),
123
+ }
@@ -0,0 +1,103 @@
1
+ from .工具 import 映射类型
2
+ import ctypes
3
+ from typing import SupportsIndex
4
+ from .cpp类型 import *
5
+
6
+ class _数值类型基类(SupportsIndex):
7
+ """数值类型基类,提供通用的运算符支持"""
8
+
9
+ def __init__(self, value):
10
+ pass
11
+
12
+ def __index__(self) -> int:
13
+ return 0
14
+
15
+ # 基本运算
16
+ def __add__(self, other): return self
17
+ def __sub__(self, other): return self
18
+ def __mul__(self, other): return self
19
+ def __truediv__(self, other): return self
20
+ def __floordiv__(self, other): return self
21
+ def __mod__(self, other): return self
22
+ def __pow__(self, other): return self
23
+ def __neg__(self): return self
24
+ def __abs__(self): return self
25
+
26
+ # 比较运算
27
+ def __eq__(self, other): return self
28
+ def __ne__(self, other): return self
29
+ def __lt__(self, other): return self
30
+ def __le__(self, other): return self
31
+ def __gt__(self, other): return self
32
+ def __ge__(self, other): return self
33
+
34
+ # 反向运算符(支持左操作数为普通数值的情况)
35
+ def __radd__(self, other): return self
36
+ def __rsub__(self, other): return self
37
+ def __rmul__(self, other): return self
38
+ def __rtruediv__(self, other): return self
39
+ def __rfloordiv__(self, other): return self
40
+ def __rmod__(self, other): return self
41
+ def __rpow__(self, other): return self
42
+
43
+ # 类型转换
44
+ def __int__(self): return int(0)
45
+ def __float__(self): return float(0)
46
+
47
+
48
+ # 设置全局变量
49
+ int映射目标 = Cpp类型.INT64_T
50
+ float映射目标 = Cpp类型.FLOAT64
51
+
52
+ # 基础类型映射
53
+ 映射类型(Cpp类型.StdString, ['<string>'])(str)
54
+ 映射类型(Cpp类型.StdString, ['<string>'])(CString常量)
55
+ 映射类型(Cpp类型.字符串, ctypes类型=ctypes.c_char_p)(bytes)
56
+ 映射类型(Cpp类型.字符串, ctypes类型=ctypes.c_char_p)(CBytes常量)
57
+ 映射类型(Cpp类型.INT64_T, ctypes类型=ctypes.c_int64)(int)
58
+ 映射类型(Cpp类型.INT64_T, ctypes类型=ctypes.c_int64)(CInt常量)
59
+ 映射类型(Cpp类型.FLOAT64, ctypes类型=ctypes.c_double)(float)
60
+ 映射类型(Cpp类型.FLOAT64, ctypes类型=ctypes.c_double)(CFloat常量)
61
+ 映射类型(Cpp类型.布尔, ctypes类型=ctypes.c_bool)(bool)
62
+ 映射类型(Cpp类型.布尔, ctypes类型=ctypes.c_bool)(C布尔)
63
+
64
+ # 数值类型映射
65
+ @映射类型(Cpp类型.INT8_T, ctypes类型=ctypes.c_int8)
66
+ class int8(_数值类型基类):
67
+ pass
68
+
69
+ @映射类型(Cpp类型.INT16_T, ctypes类型=ctypes.c_int16)
70
+ class int16(_数值类型基类):
71
+ pass
72
+
73
+ @映射类型(Cpp类型.INT32_T, ctypes类型=ctypes.c_int32)
74
+ class int32(_数值类型基类):
75
+ pass
76
+
77
+ @映射类型(Cpp类型.INT64_T, ctypes类型=ctypes.c_int64)
78
+ class int64(_数值类型基类):
79
+ pass
80
+
81
+ @映射类型(Cpp类型.UINT8_T, ctypes类型=ctypes.c_uint8)
82
+ class uint8(_数值类型基类):
83
+ pass
84
+
85
+ @映射类型(Cpp类型.UINT16_T, ctypes类型=ctypes.c_uint16)
86
+ class uint16(_数值类型基类):
87
+ pass
88
+
89
+ @映射类型(Cpp类型.UINT32_T, ctypes类型=ctypes.c_uint32)
90
+ class uint32(_数值类型基类):
91
+ pass
92
+
93
+ @映射类型(Cpp类型.UINT64_T, ctypes类型=ctypes.c_uint64)
94
+ class uint64(_数值类型基类):
95
+ pass
96
+
97
+ @映射类型(Cpp类型.FLOAT32, ctypes类型=ctypes.c_float)
98
+ class float32(_数值类型基类):
99
+ pass
100
+
101
+ @映射类型(Cpp类型.FLOAT64, ctypes类型=ctypes.c_double)
102
+ class float64(_数值类型基类):
103
+ pass