Skip to content

Commit 21efda2

Browse files
feat: Add literals module with numeric literal support and range checks
Signed-off-by: FrozenlemonTee <1115306170@qq.com>
1 parent 778f9c0 commit 21efda2

14 files changed

Lines changed: 125 additions & 247 deletions

File tree

docs/api/en/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import mcpplibs.primitives;
1313
This module exports:
1414

1515
- `mcpplibs.primitives.underlying`
16+
- `mcpplibs.primitives.literals`
1617
- `mcpplibs.primitives.policy`
1718
- `mcpplibs.primitives.primitive`
1819
- `mcpplibs.primitives.operations`
@@ -126,6 +127,9 @@ using value_t = mcpplibs::primitives::types::I32<
126127
Example:
127128

128129
```cpp
130+
import mcpplibs.primitives;
131+
import mcpplibs.primitives.literals;
132+
129133
using namespace mcpplibs::primitives;
130134
using namespace mcpplibs::primitives::literals;
131135

docs/api/zh/README.md

Lines changed: 58 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
# primitives API 文档
22

3-
> 适用模块`import mcpplibs.primitives;`
3+
> 模块入口`import mcpplibs.primitives;`
44
55
## 模块入口
66

7-
顶层模块
7+
顶层导入
88

99
```cpp
1010
import mcpplibs.primitives;
1111
```
1212

13-
该模块导出以下子模块
13+
该模块会导出以下子模块
1414

1515
- `mcpplibs.primitives.underlying`
16+
- `mcpplibs.primitives.literals`
1617
- `mcpplibs.primitives.policy`
1718
- `mcpplibs.primitives.primitive`
1819
- `mcpplibs.primitives.operations`
@@ -21,20 +22,20 @@ import mcpplibs.primitives;
2122

2223
## 命名空间总览
2324

24-
- `mcpplibs::primitives`: 核心类型、概念与 `primitive`
25-
- `mcpplibs::primitives::underlying`: underlying traits 与类别
26-
- `mcpplibs::primitives::policy`: policy 标签、默认值与协议。
27-
- `mcpplibs::primitives::operations`: 分发函数 API。
28-
- `mcpplibs::primitives::conversion`: 数值风险检查与转换辅助接口。
29-
- `mcpplibs::primitives::algorithms`: limits 与 hash 辅助接口。
30-
- `mcpplibs::primitives::operators`: 运算符重载入口。
31-
- `mcpplibs::primitives::literals`: 带范围校验的 underlying 字面量后缀。
32-
- `mcpplibs::primitives::meta`: primitive 元信息 traits。
33-
- `mcpplibs::primitives::types`: 常用 underlying primitive 别名。
25+
- `mcpplibs::primitives`核心类型、概念与 `primitive`
26+
- `mcpplibs::primitives::underlying`underlying traits 与分类信息
27+
- `mcpplibs::primitives::policy`policy 标签、默认值与协议。
28+
- `mcpplibs::primitives::operations`:函数式分发 API。
29+
- `mcpplibs::primitives::conversion`数值风险检查与转换辅助接口。
30+
- `mcpplibs::primitives::algorithms`limits 与 hash 辅助接口。
31+
- `mcpplibs::primitives::operators`运算符重载入口。
32+
- `mcpplibs::primitives::literals`:带校验的 underlying 字面量后缀。
33+
- `mcpplibs::primitives::meta`primitive 元信息 traits。
34+
- `mcpplibs::primitives::types`常用 underlying 对应的 primitive 别名。
3435

3536
## 核心概念与元信息
3637

37-
### underlying 相关概念
38+
### underlying 概念
3839

3940
- `underlying_type<T>`
4041
- `boolean_underlying_type<T>`
@@ -45,7 +46,7 @@ import mcpplibs.primitives;
4546
- `has_common_rep<LhsRep, RhsRep>`
4647
- `common_rep_t<LhsRep, RhsRep>`
4748

48-
### policy 相关概念
49+
### policy 概念
4950

5051
- `policy::policy_type<P>`
5152
- `policy::value_policy<P>`
@@ -56,7 +57,7 @@ import mcpplibs.primitives;
5657

5758
### primitive 元信息
5859

59-
- `meta::traits<primitive<...>>`
60+
- `meta::traits<primitive<...>>`
6061
暴露 `value_type / policies / value_policy / type_policy / error_policy / concurrency_policy`
6162
- `meta::make_primitive_t<T, PoliciesTuple>`
6263

@@ -72,12 +73,12 @@ class primitive;
7273
- `value_type = T`
7374
- `policies = std::tuple<Policies...>`
7475

75-
### 主要构造与赋值
76+
### 构造与赋值
7677

7778
- `explicit primitive(T)`:同 underlying 构造。
78-
- `explicit primitive(U)`:跨 underlying 构造是否允许由 type 策略决定)
79-
- 支持同策略组下的拷贝/移动构造与赋值。
80-
- 支持同策略组、不同 underlying 的 primitive 互构造/赋值(受 type 策略约束)
79+
- `explicit primitive(U)`:跨 underlying 构造是否允许由 type policy 决定
80+
- 支持同一 policy 集合下的拷贝/移动构造与赋值。
81+
- 当 type policy 允许时,支持跨 underlying primitive 的构造与赋值
8182

8283
### 值访问与并发访问 API
8384

@@ -89,23 +90,23 @@ class primitive;
8990

9091
说明:
9192

92-
- `store/compare_exchange` 支持同 underlying。
93-
- type 策略允许时`store/compare_exchange` 也支持跨 underlying 参数。
94-
- 并发访问能力由 `policy::concurrency::handler<..., void, ...>` 提供。
93+
- `store/compare_exchange` 始终支持同 underlying 类型
94+
- 只有在 type policy 允许时`store/compare_exchange` 才支持跨 underlying 参数。
95+
- 访问 API 由 `policy::concurrency::handler<..., void, ...>` 提供。
9596

96-
### type 策略对跨 underlying 行为的影响
97+
### type policy 对跨 underlying 行为的影响
9798

98-
- `policy::type::strict`仅同类型允许,跨 underlying 构造/存储/CAS 不可用
99-
- `policy::type::compatible`要求同 underlying category 且可协商 `common_rep`
100-
- `policy::type::transparent`只要求可协商 `common_rep`
99+
- `policy::type::strict`只允许完全相同的类型
100+
- `policy::type::compatible`要求 underlying category 相同且存在有效的 `common_rep`
101+
- `policy::type::transparent`只要求存在有效的 `common_rep`
101102

102-
### 预定义别名`types`
103+
### 便捷别名`types`
103104

104105
- 整型:`U8/U16/U32/U64``Size``Diff``I8/I16/I32/I64`
105106
- 浮点:`F32/F64/F80`
106107
- 布尔/字符:`Bool/UChar/Char8/Char16/Char32/WChar`
107108

108-
用法示例
109+
示例
109110

110111
```cpp
111112
using value_t = mcpplibs::primitives::types::I32<
@@ -115,17 +116,20 @@ using value_t = mcpplibs::primitives::types::I32<
115116

116117
### 工厂函数与 literals
117118

118-
- `with(value)`:从 underlying 值按默认策略构造 `primitive`
119-
- `with<Policies...>(value)`构造时显式指定策略集合
120-
- `with(policies_tuple, value)`复用已有策略元组
119+
- `with(value)`:从 underlying 值按默认 policy 构造 `primitive`
120+
- `with<Policies...>(value)`构造时显式指定 policy 集合。
121+
- `with(policies_tuple, value)`复用已有的 policy tuple。
121122
- `mcpplibs::primitives::literals` 提供带校验的后缀,例如
122123
`_u8/_u16/_u32/_u64/_size/_diff``_i8/_i16/_i32/_i64`
123-
`_f32/_f32e/_f64/_f64e/_f80/_f80e`以及
124-
`_uchar/_char8/_char16/_char32/_wchar`
124+
`_f32/_f32e/_f64/_f64e/_f80/_f80e`以及字符后缀
125+
`_uchar/_char8/_char16/_char32/_wchar`
125126

126127
示例:
127128

128129
```cpp
130+
import mcpplibs.primitives;
131+
import mcpplibs.primitives.literals;
132+
129133
using namespace mcpplibs::primitives;
130134
using namespace mcpplibs::primitives::literals;
131135

@@ -180,25 +184,25 @@ auto value = with<policy::value::checked, policy::error::expected>(42_i32);
180184
181185
### 混合操作支持
182186
183-
对多数二元操作,支持以下三种形式
187+
大多数二元操作支持
184188
185189
- `primitive op primitive`
186190
- `primitive op underlying`
187191
- `underlying op primitive`
188192
189-
## `operators` 运算符重载
193+
## `operators` 重载
190194
191-
若需要 `+ - * / % ...` 运算符语法,请引入:
195+
如果要使用 `+ - * / % ...` 语法,请引入:
192196
193197
```cpp
194198
using namespace mcpplibs::primitives::operators;
195199
```
196200

197-
重载结果同样是 `std::expected<...>`,不是裸值。
201+
运算符结果依然是 `std::expected<...>`,不是裸值。
198202

199203
## `conversion` API
200204

201-
`conversion` 命名空间提供 underlying、primitive 以及混合路径之间的统一转换接口
205+
`conversion` 命名空间提供 underlying、primitive 以及混合源/目标之间的统一转换接口
202206

203207
### 常用结果类型与风险模型
204208

@@ -218,15 +222,14 @@ using namespace mcpplibs::primitives::operators;
218222

219223
说明:
220224

221-
- `checked_cast``exact_cast` 返回 `cast_result<T>`
222-
- `saturating_cast` 会对数值溢出/下溢执行钳制
223-
- `truncating_cast` 适合浮点到整数的截断场景
224-
- 提供 underlying -> underlying、primitive -> primitive、
225-
primitive -> underlying、underlying -> primitive 四类重载
225+
- `checked_cast``exact_cast` 返回 `cast_result<T>`
226+
- `saturating_cast` 会在溢出/下溢时执行钳制。
227+
- `truncating_cast` 适合浮点到整数的截断场景。
228+
- 提供 underlying -> underlying、primitive -> primitive、primitive -> underlying、underlying -> primitive 四类重载。
226229

227230
## `algorithms` API
228231

229-
`algorithms` 命名空间提供 limits 元信息与 hash 辅助接口,适用于内置类型和受支持的自定义 underlying。
232+
`algorithms` 命名空间提供 limits 元信息和 hash 辅助接口,适用于内建类型和受支持的自定义 underlying。
230233

231234
### Limits
232235

@@ -248,21 +251,21 @@ using namespace mcpplibs::primitives::operators;
248251

249252
## policy API
250253

251-
### 内置策略标签
254+
### 内建 policy 标签
252255

253256
- 值策略:`policy::value::{checked, unchecked, saturating}`
254257
- 类型策略:`policy::type::{strict, compatible, transparent}`
255258
- 错误策略:`policy::error::{throwing, expected, terminate}`
256259
- 并发策略:`policy::concurrency::{none, fenced, fenced_relaxed, fenced_acq_rel, fenced_seq_cst}`
257260

258-
### 默认策略
261+
### 默认值
259262

260263
- `policy::defaults::value = policy::value::checked`
261264
- `policy::defaults::type = policy::type::strict`
262265
- `policy::defaults::error = policy::error::throwing`
263266
- `policy::defaults::concurrency = policy::concurrency::none`
264267

265-
### 错误码
268+
### 错误种类
266269

267270
`policy::error::kind`
268271

@@ -278,7 +281,7 @@ using namespace mcpplibs::primitives::operators;
278281

279282
### 1) 注册 `underlying::traits<T>`
280283

281-
需要提供
284+
必须提供
282285

283286
- `value_type`
284287
- `rep_type`
@@ -288,15 +291,15 @@ using namespace mcpplibs::primitives::operators;
288291
- `from_rep(rep)`
289292
- `is_valid_rep(rep)`
290293

291-
### 2) 自定义 common rep 协商
294+
### 2) 自定义 common-rep 协商
292295

293-
可特化 `underlying::common_rep_traits<LhsRep, RhsRep>`以覆盖默认 `std::common_type_t` 规则
296+
可以特化 `underlying::common_rep_traits<LhsRep, RhsRep>`覆盖默认的 `std::common_type_t` 行为
294297

295-
## 返回模型与错误处理模型
298+
## 返回值与错误模型
296299

297-
- 绝大多数 operations/operators API 返回 `std::expected<...>`
298-
- 当错误策略为 `policy::error::expected` 时,错误通过 `unexpected(policy::error::kind)` 返回。
299-
- 当错误策略为 `policy::error::throwing` 时,运行期错误会抛出异常(签名仍保持 `std::expected`
300+
- 大多数 operations/operators API 返回 `std::expected<...>`
301+
- 使用 `policy::error::expected` 时,失败通过 `unexpected(policy::error::kind)` 返回。
302+
- 使用 `policy::error::throwing` 时,运行期失败会抛出异常,而 API 签名仍保持 `std::expected`
300303

301304
## 最小示例
302305

src/algorithms/limits.cppm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ module;
66

77
export module mcpplibs.primitives.algorithms.limits;
88

9-
import mcpplibs.primitives.underlying;
9+
import mcpplibs.primitives.underlying.traits;
1010

1111
namespace mcpplibs::primitives::algorithms::details {
1212

0 commit comments

Comments
 (0)