using System; namespace MultiWheelC.TrajectoryPlanning.EMPlanner; /// 一次滚动规划周期的不可变完成记录,区分规划结果与是否获准发布。 public sealed class PlanningCycleResult { /// 创建周期完成记录。 /// 协调器分配的正数单调周期版本。 /// 本周期绑定的地图、路径、状态、上一轨迹和方向段身份。 /// 纯规划服务返回的结果,可能为 Superseded、取消或失败。 /// 仅当完整成功轨迹仍为当前身份时为 。 /// 附加的周期或观察器诊断文本。 public PlanningCycleResult(long version, PlanningCycleIdentity identity, EmPlanningResult result, bool published, string diagnostic) { if (version <= 0) throw new ArgumentOutOfRangeException(nameof(version)); Version = version; Identity = identity ?? throw new ArgumentNullException(nameof(identity)); Result = result ?? throw new ArgumentNullException(nameof(result)); Published = published; Diagnostic = diagnostic ?? string.Empty; } /// 本周期的单调递增版本号。 public long Version { get; } /// 决定该结果是否仍可发布的完整不可变身份。 public PlanningCycleIdentity Identity { get; } /// 纯 EM 规划结果;失败结果不携带可执行轨迹。 public EmPlanningResult Result { get; } /// 该结果是否已原子替换协调器的已发布轨迹。 public bool Published { get; } /// 周期处理或可选观察器产生的诊断文本。 public string Diagnostic { get; } internal PlanningCycleResult WithDiagnostic(string diagnostic) { return new PlanningCycleResult(Version, Identity, Result, Published, diagnostic); } }