#bve #serialization

bve-native

使用现代架构重新制作 OpenBVE,使用 Unity 和 Rust。C API。

2 个版本

0.0.1 2020 年 3 月 9 日
0.0.0-占位符2019 年 9 月 13 日

#346 in #simulation

MPL-2.0 许可证

225KB
6K SLoC

bve-native

bve-rs 的 C 接口。


lib.rs:

BVE-Reborn 高性能库的 C/C++ API。

此库不是直接从 Rust 使用,如果从 Rust 使用,实际上可以很容易地创建 UB。C/C++ 头文件将由 bve-native/include 中的 bve-build 生成。

文档会自动复制到 C 头文件中,但缺少模块文档。因此建议在编写 C/C++ 时使用此库的 Rust 文档。已尽量使从 Rust 文档中了解要编写的 C/C++ 代码尽可能容易。

虽然 Rust 文档中将代码分为模块,但所有函数和类型都被导出到 C++ 的全局作用域,并且没有名称混淆。

模块与 bve 包中的模块一一对应。

使用警告

在调用 INIT 之前不要调用任何其他函数.

必须 在调用任何其他函数之前通过调用 bve_init 进行初始化。库不需要反初始化。如果不这样做,可能会在 C -> Rust 边界处传播恐慌,导致未定义行为。

API 基础

API 尽量保持一致性和可预测性。

在 C 模式下,所有结构都以 BVE_ 为前缀,以帮助消除冲突。C++ 代码都在 bve 命名空间中。类型名称尽可能简短,同时与底层的 Rust 代码保持清晰的联系。

自由函数的 Rust 路径在名称中大致编码。例如 bve::parse::mesh::mesh_from_strbve_parse_mesh_from_string。删除重复的名称,并将惯用法改为从接口语言可理解。

充当成员函数的自由函数形式为 BVE_Struct_Name_member_function_name。它们通过指针接收第一个参数。

所有指针都假设不接收所有权,除非另有说明。文档中将注明不明显的生命周期。

依赖关系

~19MB
~399K SLoC