C++ 头文件与模块边界(示意)
规格 ID:TC005 — 稳定标识(页面改名/迁移不变),全站对照见设计规格索引。
本节含「本仓 include 对齐」(嵌套子树 + 扁平便利伞头)。桩/未齐标 stub 边界,不假装已实现。
相关:overview · glossary · image-model · memory-management · API
示意组织,非已发布 ABI。 头文件路径、类型名与命名空间可在实现期微调,但须全文统一为
vyntek::toolgroup/vyntek::imaging与<vyntek/toolgroup/...>/<vyntek/imaging/...>。总体边界见设计概述;编排语义见 toolgroup.mdx;像素句柄见 image-model.mdx / memory-management.mdx。
本文钉住 公开头 vs 内部头、include 树、以及 ToolGroup 与成像句柄的对应关系。宿主与工具作者只应依赖公开头;detail/ / internal/ 不对宿主暴露。
语言与绑定边界
| 层 | 语言 | 暴露面 |
|---|---|---|
| Tool / ToolGroup 编排核心 | C++ | <vyntek/toolgroup/...> |
| 成像句柄 / 内存 / 工厂 | C++ | <vyntek/imaging/...> |
| ImageDisplay 控件 | C# | 现有控件包;经绑定层消费 C++ 句柄,不反向进 C++ include |
| 其它 UI / 编辑器 | C# 或其它 | 仅绑定同一 C++ 核心;不另写执行引擎 |
| 托管绑定(MVP) | PInvoke | MVP = PInvoke(薄、可控);C++/CLI 非默认;细则见 csharp-binding.mdx(T11) |
依赖方向(禁止反向):
UI / Runner / 产线宿主
│
▼
vyntek::toolgroup(公开头) ──依赖──► vyntek::imaging(公开句柄头)
│
▼
detail/internal(不对宿主暴露)C++ 核心 不 #include 任何 UI / Avalonia / Skia / ImageDisplay 头。显示经句柄交给绑定层,再由 C# ImageDisplay 消费。
命名空间
| 命名空间 | 职责 |
|---|---|
vyntek::toolgroup | Tool、ToolGroup、Terminal、TypeDesc、Value/PropertyBag、Link、RunSession、Registry、Diagnostic、序列化 |
vyntek::imaging | ImageInfo、像素格式、句柄(PixelImageHandle 等)、Buffer、Reader/Writer、工厂 |
vyntek::toolgroup::detail / vyntek::imaging::detail | 实现细节;不进公开安装树 |
对外稳定标识用 ToolId(字符串或强类型 id);
Include 树(公开)
<vyntek/toolgroup/toolgroup.hpp> // ToolGroup 根:Create / Load / AddTool / Link / Validate
<vyntek/toolgroup/tool.hpp> // Tool 基类 / 观察指针 / ToolId / LastRun 查询
<vyntek/toolgroup/terminal.hpp> // Inputs/Outputs 终端、TypeDesc
<vyntek/toolgroup/link.hpp> // Link 端点、LinkId、建链结果
<vyntek/toolgroup/run_session.hpp> // RunSession、RunResult、RunContext、取消
<vyntek/toolgroup/registry.hpp> // ToolRegistry、工厂、register_builtin_tools
<vyntek/toolgroup/serialize.hpp> // .avtg Load/Save、schema_version、Diagnostic
<vyntek/toolgroup/diagnostic.hpp> // Diagnostic / DiagnosticCode / Severity(亦可由 serialize/toolgroup 转发)
<vyntek/imaging/image_info.hpp> // ImageInfo、PixelFormat、ColorEncoding
<vyntek/imaging/handle.hpp> // 公开句柄:Share / OpenRead / OpenWrite / Access
<vyntek/imaging/access.hpp> // ReadOnlyView / WritableView(临时访问)
<vyntek/imaging/buffer.hpp> // ImageBuffer、Rent / ImportNative / ReturnCompleted
<vyntek/imaging/factory.hpp> // PixelImage 工厂:Create / Copy / RentGray8…
<vyntek/imaging/version.hpp> // ImageContentVersion示意聚合头(可选,实现期可拆):
// <vyntek/toolgroup/toolgroup.hpp> 可转发包含 tool / terminal / link / run_session
#include <vyntek/toolgroup/tool.hpp>
#include <vyntek/toolgroup/terminal.hpp>
#include <vyntek/toolgroup/link.hpp>
#include <vyntek/toolgroup/run_session.hpp>
// 成像:只依赖公开句柄,不拉 buffer 内部实现
#include <vyntek/imaging/handle.hpp>Mermaid:模块边界
flowchart TB
subgraph public_tf ["vyntek::toolgroup 公开"]
TF[toolgroup.hpp]
Tool[tool.hpp]
Term[terminal.hpp]
Link[link.hpp]
Run[run_session.hpp]
Reg[registry.hpp]
Ser[serialize.hpp]
Diag[diagnostic.hpp]
end
subgraph public_im ["vyntek::imaging 公开"]
HI[handle.hpp]
II[image_info.hpp]
Acc[access.hpp]
Buf[buffer.hpp]
Fac[factory.hpp]
Ver[version.hpp]
end
subgraph internal ["detail / internal(不对宿主)"]
TFImpl[toolgroup 执行器/校验实现]
ImImpl[协调实体/池/归还泵]
end
subgraph csharp ["C# / UI(绑定层)"]
ID[ImageDisplay 控件]
Bind[PInvoke 绑定 MVP;见 csharp-binding]
end
TF --> Tool
TF --> Term
TF --> Link
TF --> Run
TF --> Reg
Ser --> TF
Diag --> TF
TF -.->|属性中的图像句柄| HI
Tool -.-> HI
HI --> II
HI --> Acc
HI --> Ver
Fac --> HI
Fac --> Buf
TFImpl --> public_tf
ImImpl --> public_im
Bind -->|句柄/视图桥| HI
Bind --> TF
ID --> Bind公开头职责一览
| 公开头 | 对应概念 | 宿主典型用法 |
|---|---|---|
toolgroup.hpp | 容器 ToolGroup | Create / Load / AddTool / Link / Validate |
tool.hpp | 原子 Tool;对外 ToolId | AddTool 返回观察指针;LastRunStatus / GetProperty |
terminal.hpp | Inputs / Outputs;TypeDesc | AddInput / AddOutput;类型用 TypeDesc |
link.hpp | 链接赋值(≠ 调度) | Link / Unlink;类型与列表序校验 |
run_session.hpp | 一次会话上的 Run | SetInput / Run / GetOutput / RequestCancel |
registry.hpp | 类型 id → 工厂 | 反序列化与工具箱共用 |
serialize.hpp | .avtg | Load/Save;未知 type id 严格失败;嵌套 schema 见 toolgroup §6.6 |
diagnostic.hpp(或转发) | Diagnostic / DiagnosticCode / Severity | Validate/Run/Load 结构化列表;见 toolgroup §7.4.6 |
handle.hpp 等 | 成像句柄 | 工具属性中的图像;ReadOnly 发布后内容稳定 |
ToolGroup 如何消费成像
- ToolGroup 只依赖
vyntek::imaging的公开句柄头(handle.hpp/image_info.hpp/version.hpp等)。 - 链接赋值传递的是句柄值(稳定 ReadOnly),不是调度边。
- ToolGroup 不依赖
detail/协调实体实现,不反向被 imaging 依赖。 - 临时
OpenRead/OpenWrite由工具在自身Run内完成;执行器不代开像素锁。
内部头(不对宿主)
建议安装布局:
include/vyntek/toolgroup/... # 公开
include/vyntek/imaging/... # 公开
src/toolgroup/detail/... # 或 include/vyntek/toolgroup/detail/ 但不进 SDK 安装包
src/imaging/detail/...内部头示例职责(名称示意):执行列表调度、链接图校验实现、.avtg 解析器细节、Buffer 协调实体、归还泵、池计量。宿主工程若 include 这些路径,视为破坏封装,升级不保证。
与 ImageDisplay(C#)的边界
| 规则 | 说明 |
|---|---|
| C++ 不 include UI | 无 Avalonia / Skia / ImageDisplay 头进入 vyntek::toolgroup / vyntek::imaging |
| 显示经句柄 | headless / 工具发布 PixelImageHandle(ReadOnly);绑定层把句柄交给 C# |
| C# 仅封装 | image-display.mdx 保持 C# API;底层像素来自 C++ 成像句柄 |
| 观察 ≠ 执行 | LastRun / 预览订阅不得当作下次 Run 的隐式输入源 |
托管跨边界细则(opaque handle、Release/Dispose、PInvoke 默认)见独立短文 csharp-binding.mdx,本文不展开以免 include 树文档过胖。
示意:最小 include 用法
// 示意、非已发布 ABI
#include <vyntek/toolgroup/toolgroup.hpp>
#include <vyntek/toolgroup/registry.hpp>
#include <vyntek/toolgroup/run_session.hpp>
#include <vyntek/toolgroup/serialize.hpp>
#include <vyntek/imaging/handle.hpp>
namespace tg = vyntek::toolgroup;
namespace im = vyntek::imaging;
// ToolGroup 持有/传递 im::PixelImageHandle;不 include UI。打包与库名(T14 · 薄)
| 倾向 | 说明 |
|---|---|
| 库名 | libvyntek_toolgroup(编排核心);libvyntek_imaging(像素/句柄) |
| 头安装树 | 跟本节公开 include:<vyntek/toolgroup/...> / <vyntek/imaging/...>;detail/ 不进 SDK 安装包 |
| ABI | MVP 无稳定 ABI / 符号版本承诺;升级可改布局与签名 |
| 绑定 | 托管侧仍经 csharp-binding.mdx(PInvoke)消费导出符号;库名与头树对齐即可 |
实现期可用 CMake add_library(vyntek_toolgroup …) / vyntek_imaging 产出上述逻辑库名;文档侧只钉名与安装前缀,不展开工程脚手架。
伪仓库树(R5 · sketch)
不可编译 · 无稳定 ABI。 最小可看见树见 sketch:公开头路径占位 +
fake_acq链 / Load.avtg/ headless 碎片(2–3 个.cpp)+ ImageDisplay 仅 C# 文件名示意。
| 关系 | 说明 |
|---|---|
| 与本文 | include 名 / 命名空间须与上文公开树一致;sketch 头仅为路径占位 |
| 与 examples-scenarios.mdx | 碎片对照 S03 / S04 / S07 骨架,不替代场景文 |
| 与 test-contracts.mdx | 示意实现对照,非验收勾选正文(仍认 TC-* / §10.1) |
本仓 include 对齐(按实)
对照 Windows 实树
D:\Works\Vyntek\include(读仓当日:扁平伞头由#error改回便利转发)。缺口只开问题单。优先嵌套路径
<vyntek/toolgroup/…>/<vyntek/imaging/…>;扁平<vyntek/{toolgroup,imaging,memory,session}.hpp>与伞头vyntek.h仅为便利聚合(NON-STABLE)。
两层布局(当前树)
include/
vyntek.h # 伞头:四模块便利头 + capi + version()
vyntek/
toolgroup.hpp # 便利 → toolgroup/{toolgroup,run_session,registry,diagnostic}.hpp
imaging.hpp # 便利 → imaging 公开子树(含 acquisition_session)
memory.hpp # 便利 → imaging/buffer + 扁平 vyntek::BufferView 占位
session.hpp # 便利 → toolgroup/run_session + 扁平 vyntek::Session 占位
capi/vyntek_exports.h # C 导出(PInvoke 面)
toolgroup/{toolgroup,tool,terminal,link,run_session,registry,serialize,diagnostic,output_inspector}.hpp
imaging/{image_info,handle,access,buffer,factory,version,status,acquisition_session,memory_pool,memory_owner,fake_camera_adapter}.hpp路径 / 命名空间 / 库
| 规格目标 | 本仓已有(按实 · 1c03617) | stub 边界 |
|---|---|---|
<vyntek/toolgroup/…> · vyntek::toolgroup | 已有嵌套子树(含 output_inspector.hpp) | 头均标 NON-STABLE(AGENTS.md 强制,≠ 未实现);Run/Load/serialize 已实现(见下方「公开头职责 vs 实现成熟度」表);观察面外形在、未验收 |
<vyntek/imaging/…> · vyntek::imaging | 已有嵌套子树(含 memory_pool / fake_camera_adapter) | 仍标 STUB;TC-MEM / TC-ACQ 未验收 |
伞头 vyntek.h | 已有:#include 四便利头 + capi/vyntek_exports.h;VYNTEK_VERSION_* / version() | 便利伞头;无稳定 ABI(VYNTEK_ABI_UNSTABLE) |
扁平 <vyntek/toolgroup.hpp> / imaging.hpp | 便利转发到嵌套公开头(CM1;不再 #error) | 可用,但文档/新代码仍 优先嵌套路径 |
扁平 <vyntek/memory.hpp> | 转发 imaging/buffer.hpp + 保留 vyntek::BufferView 两字段占位 | stub:非协调实体;权威存储 API 在 imaging |
扁平 <vyntek/session.hpp> | 转发 toolgroup/run_session.hpp + 保留 vyntek::Session 空类占位 | stub:真跑用 vyntek::toolgroup::RunSession;≠ AcquisitionSession |
libvyntek_toolgroup + libvyntek_imaging(T14) | CMake vyntek_toolgroup / vyntek_imaging + 可选 INTERFACE vyntek | 双库已分;SHARED/Rhett PInvoke 联调仍属实现侧 |
C 导出 vyntek_toolgroup_* / vyntek_imaging_* | capi/vyntek_exports.h + src/*/capi_*.cpp | 示意/薄导出;NON-STABLE |
AcquisitionSession | imaging/acquisition_session.hpp | 停流骨架 + Latest 预览槽;≠ RunSession;TC 未验收 |
detail/ 不对宿主 | src/imaging/detail/buffer_entity.* | 符合方向;公开头勿拉 detail |
公开头职责 vs 实现成熟度(摘要)
| 公开头 | 规格职责 | 本仓状态(一句话) |
|---|---|---|
toolgroup/toolgroup.hpp | Create/Load/AddTool/Link/Validate | 已实现;TC-REG/LNK 断言覆盖(真实算法仍 stub) |
toolgroup/run_session.hpp | SetInput/Run/GetOutput/Cancel | 已实现;列表序执行 + Busy/Cancel/Abort;TC-RUN/CTL 覆盖 |
toolgroup/serialize.hpp | .avtg Load/Save | 已实现;TC-SER-01…07 覆盖 |
toolgroup/diagnostic.hpp | DiagnosticCode 闭集 | 类型在;与 v1.9 码表对齐以实现/测试为准 |
imaging/handle.hpp | PixelImageHandle Share/Open* | 有实现进展;仍 NON-STABLE |
imaging/buffer.hpp | Rent/ImportNative/ReturnCompleted | 有实体与生命周期枚举;完整归还泵属 Reed |
toolgroup/output_inspector.hpp | T10 观察 / KeepLatest | 外形在;GetOutput ≠ 该保留集;未验收 |
imaging/factory.hpp | Create/Copy/Rent* | 有路径;池类型在 memory_pool.hpp(虚基类,默认 CanRent 乐观) |
imaging/acquisition_session.hpp | 采集会话 | 停流 + 有界入口 + Latest 预览槽 + 资源快照;NON-STABLE |
vyntek/memory.hpp · BufferView | (api/memory 历史扁平) | 占位 only;勿当 ImageBuffer |
vyntek/session.hpp · Session | (api/session 历史扁平) | 占位 only;勿当 RunSession |
capi/vyntek_exports.h | PInvoke 面 | 符号声明在;语义完整度随 Bruno/Rhett |
与过时摘要的纠偏
- 勿再写「扁平头一律
#error/ 仅嵌套可用」——自1c03617(Bruno CM1)起扁平头为便利转发(memory/session 另带历史占位类型)。 - 勿再写「命名空间仍扁平
vyntek::、单库」——嵌套命名空间与 T14 双库外形已落地;语义/验收仍大量 STUB。 - 权威细表以本页为准;api 摘录见 api/index。
文档状态:设计草案。与 toolgroup v1.9、overview、csharp-binding.mdx(T11)对齐。T14:库名 libvyntek_toolgroup / libvyntek_imaging;头树同上;MVP 无稳定 ABI。R5 伪树见 sketch。术语终检见 glossary.mdx。MVP=PInvoke;C++/CLI 非默认;ImageDisplay 仅 C#;TypeDesc/Diagnostic 与 toolgroup 同名。