跳转到内容

Core::IController API

文档稀疏
符号
58
已记录
37
类型
2
继承关系
1
源码分支
main

21 / 58 个公开 API 符号没有说明。

继承关系总览

继承图尚未加载。

全部继承关系

共 2 个类型

类型目录
类

core::control::ControllerNode

查看源码

控制链的生命周期节点基类。 Disabled 未使能,也不持有任何控制关系; Protected 已使能并处于保护态,不接受直接控制命令; Standalone 已使能、无控制者的直接控制态; Controlled 控制权已被 parent_ 指向的控制器取得。 节点状态与不变式: parent_ 非空当且仅当本节点为 Controlled;除正在推进的生命周期事务之外,失能的节点不持有 子节点(使能时父节点先取得子节点的控制权,最后才提交自身)。 enable() 先按“自身优先”的顺序锁住自身候选子树,不向上锁定祖先;已经使能的节点也必须 先锁定子树,才能幂等返回 true。使能失败时回滚本轮建立的状态与控制关系。 disable() 先锁住自身及沿 parent_ 向上的控制链,稳定根节点和控制关系,再补齐各层候选 子树,取得所在整棵候选树的锁。未建立活动控制边的候选引用也参与锁定。 任一节点锁获取失败,立即释放本轮已取得的全部锁并返回 false;失能预锁失败不执行钩子、 状态写入或控制关系修改,也不会取消或接管其他生命周期事务。 reverse=false 在完整树已锁定后失能当前节点及其控制链,释放各层直接子节点的控制权; 被释放的子节点及其后代保持使能。 reverse=true 要求当前节点无控制者,在完整候选树已锁定后自顶向下关闭活动子树。 未建立活动控制边的候选引用只参与锁定,不改变状态。 并发模型(单核,任务与 ISR 之间可相互抢占): 每个节点持有一把非阻塞 AtomicFlagLock,所有生命周期操作都必须取得节点锁。 所有状态与控制关系写入都在对应节点锁内完成;提交或回滚结束后才释放本轮节点锁。 预锁失败按递归栈逐层释放成功锁定的子树,不触碰失败节点或其他上下文持有的锁。失能在栈上 保存根节点,传播结束后沿不变的 children_ 解锁,不在节点中保存锁链。返回 true 表示整树 锁定且传播已完成,false 表示节点锁冲突或 reverse=true 的调用节点仍受控。同轮沿不同 候选路径重复访问同一节点也视为冲突;这种拓扑冲突不能靠重试消除。 使能是可回滚事务:失败的使能撤销本轮建立的状态与控制关系。enable() 返回 false 表示本轮 失败或存在竞争(例如候选子树正被其他操作锁定),调用者可以稍后重试。

继承关系

构造与析构

4

ControllerNode

函数公开
        core::control::ControllerNode::ControllerNode (ControllerNode &&)=delete
      

上游未提供说明。

IController/IController.hpp:57

ControllerNode

函数公开
        core::control::ControllerNode::ControllerNode (const ControllerNode &)=delete
      

上游未提供说明。

IController/IController.hpp:55

成员函数

25

currentController

函数公开const
        ControllerNode * core::control::ControllerNode::currentController () const noexcept
      

返回当前控制者的线程安全瞬时快照。 state() 与生命周期事务并发调用时,结果可能表示事务前或提交后的控制关系,不保证与另一次独立调用构成一致快照,也不延长返回对象的生命周期。

IController/IController.hpp:116

disable

函数公开纯虚函数
        virtual bool core::control::ControllerNode::disable (bool reverse=false) noexcept=0
      

失能当前节点。 两种方向都先 try-lock 当前节点所在的整棵候选树:沿 parent_ 锁住祖先链,再补齐各层 候选子树。reverse=false 失能当前节点及其控制链,并释放各层直接子节点的控制权, 被释放的子节点及其后代保持使能。reverse=true 要求当前节点无控制者,只关闭活动子树。 未建立活动边的候选引用参与锁定,但不改变状态。 任一节点已被占用时返回 false,释放本轮取得的全部锁,不执行任何失能钩子、状态写入或 控制关系修改;调用者可以稍后重试。受控节点调用 reverse=true 也返回 false。 true 表示整树已锁定且请求的失能传播已经完成。

IController/IController.hpp:89

disableTreeLocked

函数私有纯虚函数
        virtual void core::control::ControllerNode::disableTreeLocked () noexcept=0
      

在所在整棵候选树已锁定时执行活动子树失能。

IController/IController.hpp:221

disableUpstreamLocked

函数私有纯虚函数
        virtual void core::control::ControllerNode::disableUpstreamLocked () noexcept=0
      

在所在整棵候选树已锁定时执行向上失能。

IController/IController.hpp:218

enable

函数公开纯虚函数
        virtual bool core::control::ControllerNode::enable () noexcept=0
      

使能当前节点及其候选子树。 先取得自身及全部候选后代的节点锁;若已使能则幂等返回 true,不重建控制关系。 返回 false 表示本轮失败(自身或后代使能失败、控制权冲突、候选节点处于 Standalone) 或存在竞争,本轮的改动已被回滚。

IController/IController.hpp:75

enableAndAcquireController

函数私有纯虚函数
        virtual bool core::control::ControllerNode::enableAndAcquireController (ControllerNode *controller) noexcept=0
      

enable() 使能本节点并让 controller 取得其控制权,由与父节点驱动。 已经使能、但不是 Standalone 也没有其他控制者的节点只被借用一次,不重建其子树;本轮内新 使能的节点先推进候选子节点,再执行自身使能、保护与状态提交。

IController/IController.hpp:194

lastEnableState

函数私有纯虚函数const
        virtual bool core::control::ControllerNode::lastEnableState () const noexcept=0
      

本轮开始前节点是否已使能;仅供本轮回滚判断。

IController/IController.hpp:205

lockDisableUpstream

函数私有纯虚函数
        virtual bool core::control::ControllerNode::lockDisableUpstream (ControllerNode *lockedChild, ControllerNode *&root) noexcept=0
      

本节点已锁定:锁住祖先及各层剩余子树,返回根节点;失败只保留本节点的锁。

IController/IController.hpp:212

lockTree

函数私有纯虚函数
        virtual bool core::control::ControllerNode::lockTree () noexcept=0
      

锁住自身候选子树;失败时释放本轮已经取得的节点锁。

IController/IController.hpp:207

operator=

函数公开
        ControllerNode & core::control::ControllerNode::operator= (ControllerNode &&)=delete
      

上游未提供说明。

IController/IController.hpp:58

operator=

函数公开
        ControllerNode & core::control::ControllerNode::operator= (const ControllerNode &)=delete
      

上游未提供说明。

IController/IController.hpp:56

protect

函数公开纯虚函数
        virtual bool core::control::ControllerNode::protect () noexcept=0
      

仅 Standalone -> Protected;先提交自身保护行为,再改变状态。提交前发生竞争时不改变状态, 返回 false。

IController/IController.hpp:102

releaseControllerWithoutCheckState

函数私有纯虚函数
        virtual void core::control::ControllerNode::releaseControllerWithoutCheckState (ControllerNode *controller) noexcept=0
      

释放 controller 通过 parent_ 对本节点持有的控制边。

IController/IController.hpp:224

rollbackLastEnablement

函数私有纯虚函数
        virtual void core::control::ControllerNode::rollbackLastEnablement () noexcept=0
      

回滚本轮使能对本节点状态与控制权的改动。 本轮新使能的节点关闭自身并向下回滚;本轮借用的既有使能节点只释放本轮获得的控制权, 回到 Protected 并保留其原有子树。回滚可重复执行。

IController/IController.hpp:202

selfDisable

函数受保护虚函数
        virtual void core::control::ControllerNode::selfDisable ()
      

关闭本节点自身的资源,遵守上述共同重写约定。 正常失能及成功使能后的事务回滚都会调用;节点本就 Disabled 时也可能调用。 必须可重复执行且无资源累积,不能因逻辑状态显示未使能而省略必要的安全动作。 调用时本节点的 parent_ 已清除,state() 仍可能保留失能前的值;子节点由框架另行处理。 本钩子没有失败返回通道:返回前必须完成或可靠提交安全停机及自身资源清理,不能仅投递 可能丢失的请求便假定失能成功。使用异步 I/O 时,还必须取消或覆盖旧的使能/控制请求, 避免这些请求在失能后重新生效;不得等待完成中断或其他任务来解除当前持锁状态。

IController/IController.hpp:168

selfEnable

函数受保护虚函数
        virtual bool core::control::ControllerNode::selfEnable ()
      

使能本节点自身的资源,遵守上述共同重写约定。 selfProtect() 调用前,候选子节点已完成本轮使能及控制权取得;本节点的逻辑状态仍为 Disabled。 返回 true 后,框架才调用并提交本节点状态。已使能节点的幂等使能、 或借用既有已使能子树,不会再次调用本钩子。 selfDisable() 成功副作用必须能由安全撤销:后续祖先使能失败仍会回滚本节点。 必须支持失能后的再次使能及失败后的重试,不泄漏资源,不启动不可回滚的业务动作。 selfProtect() true 本节点的使能前置条件已满足,必要动作已完成或可靠提交,能够立即执行/selfDisable();不能依赖返回后才完成关键准备。 selfEnable() selfDisable() false 已自行撤销本次局部使能的全部副作用,回到安全的未使能状态。框架只回滚 子节点,不会为这次返回 false 的补调用。

IController/IController.hpp:155

selfProtect

函数受保护虚函数
        virtual void core::control::ControllerNode::selfProtect ()
      

建立本节点的安全保护输出,保持使能,遵守上述共同重写约定。 protect() state() 使能成功后、显式、控制权释放及借用节点的使能回滚都会调用。 调用时可能仍为 Disabled(刚完成 selfEnable)、Standalone 或 Controlled; parent_ 也可能尚未清除。不能要求已经进入 Protected 或已经没有控制者才执行保护。 必须可重复执行,以本节点定义的保持/制动等安全策略覆盖危险的旧输出,不失能本节点, 不破坏既有子树或自行释放控制权。本钩子没有失败返回通道,保护动作必须在返回前完成 或可靠提交,不能静默丢弃;框架随后才提交相应的状态/控制关系变更。

IController/IController.hpp:181

standalone

函数公开纯虚函数
        virtual bool core::control::ControllerNode::standalone () noexcept=0
      

无控制者的 Protected -> Standalone;已 Standalone 时幂等。 只改变逻辑权限,不使能硬件、不提交业务命令。与在途的使能轮或其他节点变更竞争时返回 false,调用者可以稍后重试。

IController/IController.hpp:96

unlockDisableUpstream

函数私有纯虚函数
        virtual void core::control::ControllerNode::unlockDisableUpstream (ControllerNode *lockedChild) noexcept=0
      

预锁回退:释放本节点、祖先及各层子树,但跳过尚由调用者持有的向下路径。

IController/IController.hpp:215

unlockTree

函数私有纯虚函数
        virtual void core::control::ControllerNode::unlockTree () noexcept=0
      

沿不变的候选引用释放完整子树的锁,不依赖可能已被失能清除的 parent_。

IController/IController.hpp:209

成员变量

3

嵌套类型

1

State

枚举公开

上游未提供说明。

Controlled
上游未提供说明。
Disabled
上游未提供说明。
Protected
上游未提供说明。
Standalone
上游未提供说明。
IController/IController.hpp:60
类

core::control::IController

查看源码

上游未提供类型说明。

继承关系

构造与析构

2

IController

函数公开
        core::control::IController< N >::IController ()
      

构造叶控制器。 只有 IController<0> 允许使用该构造函数;非叶控制器必须通过子节点数组构造。 子节点由外部拥有,IController 不负责其生命周期。

IController/IController.hpp:250

IController

函数公开
        core::control::IController< N >::IController (const std::array< ControllerNode *, N > &children)
      

构造带有 N 个候选子节点的控制器。 enable() 数组只描述可能的控制链,不会在构造时建立 parent_。实际控制边在成功 传播并取得控制权后建立。调用者必须保证引用非空、无自身引用、无直接重复项,并保证 整个候选图无环。同轮重复访问同一候选节点会使预锁失败,不会重复取得或释放其锁。

IController/IController.hpp:262

成员函数

16

acquireControllerWithoutCheckingState

函数私有
        bool core::control::IController< N >::acquireControllerWithoutCheckingState (ControllerNode *controller) noexcept
      

上游未提供说明。

IController/IController.hpp:355

disable

函数公开虚函数
        bool core::control::IController< N >::disable (const bool reverse=false) noexcept final
      

失能当前节点。 两种方向都先 try-lock 当前节点所在的整棵候选树:沿 parent_ 锁住祖先链,再补齐各层 候选子树。reverse=false 失能当前节点及其控制链,并释放各层直接子节点的控制权, 被释放的子节点及其后代保持使能。reverse=true 要求当前节点无控制者,只关闭活动子树。 未建立活动边的候选引用参与锁定,但不改变状态。 任一节点已被占用时返回 false,释放本轮取得的全部锁,不执行任何失能钩子、状态写入或 控制关系修改;调用者可以稍后重试。受控节点调用 reverse=true 也返回 false。 true 表示整树已锁定且请求的失能传播已经完成。

IController/IController.hpp:289

disableTreeLocked

函数私有虚函数
        void core::control::IController< N >::disableTreeLocked () noexcept final
      

在所在整棵候选树已锁定时执行活动子树失能。

IController/IController.hpp:522

disableUpstreamLocked

函数私有虚函数
        void core::control::IController< N >::disableUpstreamLocked () noexcept final
      

在所在整棵候选树已锁定时执行向上失能。

IController/IController.hpp:532

enable

函数公开虚函数
        bool core::control::IController< N >::enable () noexcept final
      

使能当前节点及其候选子树。 先取得自身及全部候选后代的节点锁;若已使能则幂等返回 true,不重建控制关系。 返回 false 表示本轮失败(自身或后代使能失败、控制权冲突、候选节点处于 Standalone) 或存在竞争,本轮的改动已被回滚。

IController/IController.hpp:273

enableAndAcquireController

函数私有虚函数
        bool core::control::IController< N >::enableAndAcquireController (ControllerNode *controller) noexcept final
      

enable() 使能本节点并让 controller 取得其控制权,由与父节点驱动。 已经使能、但不是 Standalone 也没有其他控制者的节点只被借用一次,不重建其子树;本轮内新 使能的节点先推进候选子节点,再执行自身使能、保护与状态提交。

IController/IController.hpp:365

lastEnableState

函数私有虚函数const
        bool core::control::IController< N >::lastEnableState () const noexcept final
      

本轮开始前节点是否已使能;仅供本轮回滚判断。

IController/IController.hpp:239

lockDisableUpstream

函数私有虚函数
        bool core::control::IController< N >::lockDisableUpstream (ControllerNode *lockedChild, ControllerNode *&root) noexcept final
      

本节点已锁定:锁住祖先及各层剩余子树,返回根节点;失败只保留本节点的锁。

IController/IController.hpp:472

lockTree

函数私有虚函数
        bool core::control::IController< N >::lockTree () noexcept final
      

锁住自身候选子树;失败时释放本轮已经取得的节点锁。

IController/IController.hpp:445

protect

函数公开虚函数
        bool core::control::IController< N >::protect () noexcept final
      

仅 Standalone -> Protected;先提交自身保护行为,再改变状态。提交前发生竞争时不改变状态, 返回 false。

IController/IController.hpp:337

releaseControllerWithoutCheckState

函数私有虚函数
        void core::control::IController< N >::releaseControllerWithoutCheckState (ControllerNode *controller) noexcept final
      

释放 controller 通过 parent_ 对本节点持有的控制边。

IController/IController.hpp:545

rollbackLastEnablement

函数私有虚函数
        void core::control::IController< N >::rollbackLastEnablement () noexcept final
      

回滚本轮使能对本节点状态与控制权的改动。 本轮新使能的节点关闭自身并向下回滚;本轮借用的既有使能节点只释放本轮获得的控制权, 回到 Protected 并保留其原有子树。回滚可重复执行。

IController/IController.hpp:416

standalone

函数公开虚函数
        bool core::control::IController< N >::standalone () noexcept final
      

无控制者的 Protected -> Standalone;已 Standalone 时幂等。 只改变逻辑权限,不使能硬件、不提交业务命令。与在途的使能轮或其他节点变更竞争时返回 false,调用者可以稍后重试。

IController/IController.hpp:319

unlockDisableUpstream

函数私有虚函数
        void core::control::IController< N >::unlockDisableUpstream (ControllerNode *lockedChild) noexcept final
      

预锁回退:释放本节点、祖先及各层子树,但跳过尚由调用者持有的向下路径。

IController/IController.hpp:509

unlockTree

函数私有虚函数
        void core::control::IController< N >::unlockTree () noexcept final
      

沿不变的候选引用释放完整子树的锁,不依赖可能已被失能清除的 parent_。

IController/IController.hpp:465

成员变量

2

last_enable_state_

变量私有
        bool core::control::IController< N >::last_enable_state_
      

本轮开始前节点是否已使能;lockTree() 每轮都会刷新,避免使用过期回滚状态。

IController/IController.hpp:556

其他公开符号

文件

1