类 SingleRunningChildBranch<T>

java.lang.Object
cn.wjybxx.btree.Task<T>
cn.wjybxx.btree.BranchTask<T>
cn.wjybxx.btree.branch.SingleRunningChildBranch<T>
所有已实现的接口:
ICancelTokenListener
直接已知子类:
ActiveSelector, Foreach, Selector, SelectorN, Sequence, Switch

public abstract class SingleRunningChildBranch<T> extends BranchTask<T>
非并行分支节点抽象(最多只有一个运行中的子节点)
作者:
wjybxx date - 2023/11/26
  • 字段详细资料

    • runningIndex

      protected transient int runningIndex
      运行中的子节点索引 -- index信息总是准确的
    • runningChild

      protected transient Task<T> runningChild
      运行中的子节点
    • inlineHelper

      protected final transient TaskInlineHelper<T> inlineHelper
      被内联运行的子节点 1.该字段定义在这里是为了减少抽象层次,该类并不提供功能。 2.子类要支持实现内联优化时,应当在Task.onChildRunning(Task, boolean)onChildCompleted(Task)维护字段引用。
  • 构造器详细资料

    • SingleRunningChildBranch

      public SingleRunningChildBranch()
    • SingleRunningChildBranch

      public SingleRunningChildBranch(List<Task<T>> children)
    • SingleRunningChildBranch

      public SingleRunningChildBranch(Task<T> first, @Nullable Task<T> second)
  • 方法详细资料

    • getRunningIndex

      public final int getRunningIndex()
      允许外部在结束后查询
    • getRunningChild

      public final Task<T> getRunningChild()
      获取运行中的子节点 -- 不可结束后查询
    • isAllChildCompleted

      public boolean isAllChildCompleted()
      是否所有子节点已进入完成状态
    • getCompletedCount

      public int getCompletedCount()
      进入完成状态的子节点数量
    • getSucceededCount

      public int getSucceededCount()
      成功的子节点数量
    • getInlineHelper

      public final TaskInlineHelper<T> getInlineHelper()
    • resetForRestart

      public void resetForRestart()
      从类复制的说明: Task
      重置任务以便重新启动(清理运行产生的所有临时数据)

      1. 和exit一样,清理的是运行时产生的临时数据,而不是所有数据;不过该方法是比exit更彻底的清理。 2. 钩子任务也应当被重置。 3. 与Task.beforeEnter()相同,重写方法时,应先执行父类逻辑,再重置自身属性。 4. 有临时数据的Task都应该重写该方法,行为树通常是需要反复执行的。

      覆盖:
      resetForRestart 在类中 Task<T>
    • beforeEnter

      protected void beforeEnter()
      模板类不重写enter方法,只有数据初始化逻辑
      覆盖:
      beforeEnter 在类中 Task<T>
    • exit

      protected void exit()
      从类复制的说明: Task
      该方法在Task进入完成状态时执行 1.该方法与Task.enter(int)对应,通常用于停止Task.enter(int)中启动的逻辑。 2.该方法也用于清理部分运行时产生的临时数据。 3.一定记得取消注册的各种监听器。
      覆盖:
      exit 在类中 Task<T>
    • stopRunningChildren

      protected void stopRunningChildren()
      从类复制的说明: Task
      停止所有运行中的子节点 1.该方法在自身的exit之前调用 2.如果有特殊的子节点(钩子任务),也需要在这里停止 3.该方法不采用visitor实现,是因为停止任务可能有特殊的时序。 4.如果子节点不是按原始序启动的,务必要重写该方法。
      覆盖:
      stopRunningChildren 在类中 Task<T>
    • onEventImpl

      protected void onEventImpl(@Nonnull Object event)
      从类复制的说明: Task
      对于控制节点,通常将事件派发给约定的子节点或钩子节点。 对于叶子节点,通常自身处理事件。 注意: 1.转发事件时应该调用子节点的Task.onEvent(Object)方法 2.在AI这样的领域中,建议将事件转化为信息存储在Task或黑板中,而不是尝试立即做出反应。
      指定者:
      onEventImpl 在类中 Task<T>
    • execute

      protected void execute()
      从类复制的说明: Task
      Task的心跳方法,在Task进入完成状态之前会反复执行。 1.运行中可通过Task.setSuccess()Task.setFailed(int)Task.setCancelled()将自己更新为完成状态。 2.如果不想和Task.enter(int)同步执行,可通过Task.setSlowStart(boolean)实现。 3.不建议直接调用该方法,而是通过模板方法Task.template_execute(boolean)运行。
      指定者:
      execute 在类中 Task<T>
    • nextChild

      protected Task<T> nextChild()
    • illegalStateMsg

      protected final String illegalStateMsg()
    • onChildRunning

      protected void onChildRunning(Task<T> child, boolean starting)
      子类如果支持内联,则重写该方法
      指定者:
      onChildRunning 在类中 Task<T>
      参数:
      starting - 是否是启动时调用,即首次调用
    • onChildCompleted

      protected void onChildCompleted(Task<T> child)
      子类的实现模板:
      
      
        protected void onChildCompleted(Task child) {
            runningChild = null;
            inlinedHolder.stopInline();
            // 尝试计算结果(记得处理取消)
            ...
            // 如果未得出结果
            if (!isExecuting()) {
                template_execute();
            }
        }
       
      ps: 推荐子类重复编码避免调用super
      指定者:
      onChildCompleted 在类中 Task<T>