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