pub trait DynamicListMetadata<S>: Send + Sync {
Show 16 methods
// Required methods
fn entity_class(&self) -> EntityClassId;
fn variable(&self) -> VariableId;
fn capabilities(&self) -> DynamicListMetadataCapabilities;
fn element_owner(&self, solution: &S, element: usize) -> Option<usize>;
fn construction_order_key(
&self,
solution: &S,
element: usize,
) -> Option<i64>;
fn precedence_duration(&self, solution: &S, element: usize) -> Option<usize>;
fn extend_precedence_successors(
&self,
solution: &S,
element: usize,
successors: &mut Vec<usize>,
) -> bool;
fn cross_position_distance(
&self,
solution: &S,
from_entity: usize,
from_position: usize,
to_entity: usize,
to_position: usize,
) -> Option<f64>;
fn intra_position_distance(
&self,
solution: &S,
entity: usize,
from_position: usize,
to_position: usize,
) -> Option<f64>;
fn route_depot(&self, solution: &S, entity: usize) -> Option<usize>;
fn route_distance(
&self,
solution: &S,
entity: usize,
from: usize,
to: usize,
) -> Option<i64>;
fn route_feasible(
&self,
solution: &S,
entity: usize,
route: &[usize],
) -> Option<bool>;
fn savings_depot(&self, solution: &S, entity: usize) -> Option<usize>;
fn savings_metric_class(&self, solution: &S, entity: usize) -> Option<usize>;
fn savings_distance(
&self,
solution: &S,
entity: usize,
from: usize,
to: usize,
) -> Option<i64>;
fn savings_feasible(
&self,
solution: &S,
entity: usize,
route: &[usize],
) -> Option<bool>;
}Expand description
Slot-bound immutable metadata used by canonical dynamic-list phases.
This deliberately contains no discovery API, current-phase lookup, or
global/TLS state. Binding crates compile schema fields and callbacks once
into one implementation for a specific (entity_class, variable) pair,
then attach it to the corresponding DynamicListVariableSlot. Runtime
callers validate Self::capabilities before invoking a selected family;
an implementation must not synthesize depot, metric, distance, feasibility,
precedence, or ownership defaults.
Required Methods§
fn entity_class(&self) -> EntityClassId
fn variable(&self) -> VariableId
fn capabilities(&self) -> DynamicListMetadataCapabilities
Sourcefn element_owner(&self, solution: &S, element: usize) -> Option<usize>
fn element_owner(&self, solution: &S, element: usize) -> Option<usize>
Fixed owner for one element when owner restriction is declared.
None means that element is unrestricted; callers must consult
capabilities().element_owner to distinguish an unavailable owner
source from an unrestricted element.
Sourcefn construction_order_key(&self, solution: &S, element: usize) -> Option<i64>
fn construction_order_key(&self, solution: &S, element: usize) -> Option<i64>
Deterministic construction ordering key for one element.
Sourcefn precedence_duration(&self, solution: &S, element: usize) -> Option<usize>
fn precedence_duration(&self, solution: &S, element: usize) -> Option<usize>
Duration used by full precedence-aware construction and scheduling. It may be absent when this slot deliberately supplies successor-only metadata for ListRuin.
Sourcefn extend_precedence_successors(
&self,
solution: &S,
element: usize,
successors: &mut Vec<usize>,
) -> bool
fn extend_precedence_successors( &self, solution: &S, element: usize, successors: &mut Vec<usize>, ) -> bool
Extends successors with fixed successors in declared order. Returns
false only when successor metadata is unavailable for this slot.
The concrete output buffer preserves the object-safe dynamic metadata
seam without putting a dyn FnMut dispatch in a precedence candidate
loop.
Sourcefn cross_position_distance(
&self,
solution: &S,
from_entity: usize,
from_position: usize,
to_entity: usize,
to_position: usize,
) -> Option<f64>
fn cross_position_distance( &self, solution: &S, from_entity: usize, from_position: usize, to_entity: usize, to_position: usize, ) -> Option<f64>
Explicit cross-route position metric for nearby list neighborhoods.
Sourcefn intra_position_distance(
&self,
solution: &S,
entity: usize,
from_position: usize,
to_position: usize,
) -> Option<f64>
fn intra_position_distance( &self, solution: &S, entity: usize, from_position: usize, to_position: usize, ) -> Option<f64>
Explicit within-route position metric for nearby K-opt/neighborhoods.
Sourcefn route_depot(&self, solution: &S, entity: usize) -> Option<usize>
fn route_depot(&self, solution: &S, entity: usize) -> Option<usize>
Strict route-local bundle used by K-opt and other route phases.
Reading and replacing a route are deliberately not metadata
callbacks. They come from the slot’s DynamicListAccess (get and
one logical replace operation) so every route mutation follows the
same dirty-row/revision path as every other list mutation. A canonical
phase must require both that base access and this complete metadata
bundle: depot, distance, and feasibility.
fn route_distance( &self, solution: &S, entity: usize, from: usize, to: usize, ) -> Option<i64>
fn route_feasible( &self, solution: &S, entity: usize, route: &[usize], ) -> Option<bool>
Sourcefn savings_depot(&self, solution: &S, entity: usize) -> Option<usize>
fn savings_depot(&self, solution: &S, entity: usize) -> Option<usize>
Savings-specific bundle used only by Clarke-Wright construction.
fn savings_metric_class(&self, solution: &S, entity: usize) -> Option<usize>
fn savings_distance( &self, solution: &S, entity: usize, from: usize, to: usize, ) -> Option<i64>
fn savings_feasible( &self, solution: &S, entity: usize, route: &[usize], ) -> Option<bool>
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".