# Aspect **Repository Path**: anybus2022/aspect ## Basic Information - **Project Name**: Aspect - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-03-24 - **Last Updated**: 2025-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ABC 文件解析与数据表构建系统 ## 1. 概述 本系统基于 ArkTS 元数据实现 ABC 二进制文件解析,构建模块化层级数据结构,提供跨文件的快速检索能力。通过静态 API 接口动态加载、全局数据池统一管理、路径唯一性校验等机制,实现高效内存管理与多维度查询。 ## 2. 核心功能 ### 2.1 文件解析 - 支持 ABC 文件路径加载与二进制解析 - 自动构建四层节点结构:模块(Module)->命名空间(Namespace)->类(Class)->函数(Function) ### 2.2 数据管理 - 全局数据池(AbcData)统一存储节点 - 模块映射表:unordered_map - 多值哈希表:unordered_multimap 管理命名空间/类/函数 - 路径唯一标识系统(AbcNodePath) - 路径生成规则:模块::命名空间 1::命名空间 2::类::函数 ### 2.3 查询服务 - 支持通过完整路径或名称进行模糊匹配 - 提供多级检索接口: ```CPP findModules() // 模块精确查询 findNamespaces() // 命名空间查询 findClasses() // 类层级检索 findFunction() // 函数匹配 ``` ## 3. 系统架构 ```mermaid graph TD A[AbcContext] -->|文件加载| B[AbcFileLoader] B -->|API调用| C[AbcConfig] B -->|节点构建| D[AbcNode体系] D --> E[AbcNodeModule] D --> F[AbcNodeNamespace] D --> G[AbcNodeClass] D --> H[AbcFunctionNode] B -->|数据注册| I[AbcData] ``` ## 4. 核心模块说明 ### 4.1 配置中心(AbcConfig) 功能:存储 abckit 相关配置 关键配置: ```CPP ABCKIT_CURRENT_VERSION // 版本控制:确保API兼容性 AbckitApi *g_impl; AbckitInspectApi *g_implI; AbckitArktsInspectApi *g_implArkI; AbckitModifyApi *g_implM; AbckitGraphApi *g_implG; AbckitIsaApiDynamic *g_dynG; ``` ### 4.2 文件加载器(AbcFileLoader) 解析流程: - 通过 openAbc()打开二进制文件 - 创建根节点 ROOT Module - 递归遍历模块/命名空间/类层级 - 注册节点到 AbcData 回调机制: ```cpp onModule() // 模块发现回调 onNamespace() // 命名空间构建回调 onClass() // 类节点创建回调 onFunction() // 函数注册回调 ``` ### 4.3 节点体系(AbcNode) 基类结构: ```cpp struct AbcNodePath { string module; // 所属模块 vector namespaces; // 命名空间层级 string className; // 所属类名 string functionName; // 函数名称 }; ``` ```cpp class AbcBaseNode { AbcNodeType type; // 节点类型枚举 AbcNodePath path; // 完整路径描述 vector methods; // 子方法集合 }; ``` 派生类型: | 节点类型 | 关联数据结构 | 存储容器 | | ---------------- | --------------------- | ------------- | | AbcNodeModule | AbckitCoreModule\* | abcModules | | AbcNodeNamespace | AbckitCoreNamespace\* | abcNamespaces | | AbcNodeClass | AbckitCoreClass\* | abcClasses | | AbcFunctionNode | AbckitCoreFunction\* | abcFunctions | ### 4.4 上下文管理(AbcContext) 单例模式: ```cpp static AbcContext& get(); ``` 核心能力: 文件生命周期管理(loadAbcFile()) 跨模块数据查询(find\*()系列接口) 根节点维护(rootNodes 数组) ### 4.5 数据仓库(AbcData) 全局存储: ```cpp static unordered_map abcModules; static unordered_multimap abcNamespaces; static unordered_multimap abcClasses; static unordered_multimap abcFunctions; ``` ## 5. 关键处理流程 ### 5.1 文件加载流程 ```mermaid sequenceDiagram participant Main participant AbcContext participant AbcFileLoader participant AbcData Main->>AbcContext: loadAbcFile(path) AbcContext->>AbcFileLoader: 创建解析器实例 AbcFileLoader->>AbcConfig: 调用g_impl->openAbc() AbcFileLoader->>AbcBaseNode: 创建ROOT模块 loop 层级遍历 AbcFileLoader->>AbcFileLoader: 递归执行onModule/onNamespace回调 AbcFileLoader->>AbcData: 注册节点到对应容器 end AbcFileLoader->>AbcContext: 返回根节点 AbcContext->>Main: 完成加载 ``` ### 5.2 函数注册流程 1. 解析函数时创建 AbcFunctionNode 2. 生成路径标识: path = parent.path + "::" + functionName 3. 插入到全局函数映射表: abcFunctions.emplace(name, node) 4. 建立父子关系: parent->addMethod(node) ## 6. 示例用法 ```cpp // 加载ABC文件 AbcContext::get().loadAbcFile("/path/to/modules.abc"); // 查询模块节点 auto module = AbcContext::get().findModules("CoreUtils"); // 获取函数路径 auto func = AbcContext::get().findFunction("calculateDistance")[0]; cout << func->path.toString(); // 输出:ROOT::Math::Geometry::calculateDistance ``` ## 7. 扩展能力 注解支持:AbcFunctionNode 可携带 AbckitCoreAnnotation 元数据 动态更新:通过 AbckitModifyApi 实现运行时结构修改 跨文件查询:AbcData 全局存储支持多文件联合检索