package main import ( "time" "sdr-wideband-suite/internal/pipeline" ) type arbitrator struct { refinementHold *pipeline.RefinementHold queues *decisionQueues } func newArbitrator() *arbitrator { return &arbitrator{ refinementHold: &pipeline.RefinementHold{Active: map[int64]time.Time{}}, queues: newDecisionQueues(), } } func (a *arbitrator) AdmitRefinement(plan pipeline.RefinementPlan, policy pipeline.Policy, now time.Time) pipeline.RefinementAdmissionResult { if a == nil { return pipeline.AdmitRefinementPlan(plan, policy, now, nil) } if a.refinementHold == nil { a.refinementHold = &pipeline.RefinementHold{Active: map[int64]time.Time{}} } return pipeline.AdmitRefinementPlan(plan, policy, now, a.refinementHold) } func (a *arbitrator) ApplyDecisions(decisions []pipeline.SignalDecision, budget pipeline.BudgetModel, now time.Time, policy pipeline.Policy) decisionQueueStats { if a == nil || a.queues == nil { return decisionQueueStats{} } return a.queues.Apply(decisions, budget, now, policy) }