pub(crate) struct IntersectionSimState {
    state: BTreeMap<IntersectionID, State>,
    use_freeform_policy_everywhere: bool,
    dont_block_the_box: bool,
    break_turn_conflict_cycles: bool,
    handle_uber_turns: bool,
    disable_turn_conflicts: bool,
    blocked_by: BTreeSet<(CarID, CarID)>,
    events: Vec<Event>,
    total_repeat_requests: usize,
    not_allowed_requests: usize,
    blocked_by_someone_requests: usize,
}
Expand description

Manages conflicts at intersections. When an agent has reached the end of a lane, they call maybe_start_turn to make a Request. Based on the intersection type (stop sign, traffic signal, or a “freeform policy”), the Request gets queued or immediately accepted. When agents finish turns or when some time passes (for traffic signals), the intersection also gets a chance to react, maybe granting one of the pending requests.

Most of the complexity comes from attempting to workaround https://a-b-street.github.io/docs/tech/trafficsim/gridlock.html.

Fields

state: BTreeMap<IntersectionID, State>use_freeform_policy_everywhere: booldont_block_the_box: boolbreak_turn_conflict_cycles: boolhandle_uber_turns: booldisable_turn_conflicts: boolblocked_by: BTreeSet<(CarID, CarID)>events: Vec<Event>total_repeat_requests: usizenot_allowed_requests: usizeblocked_by_someone_requests: usize

Implementations

For deleting cars

Vanished at border, stopped biking, etc – a vehicle disappeared, and didn’t have one last turn.

This is only triggered for traffic signals.

For cars: The head car calls this when they’re at the end of the lane WaitingToAdvance. If this returns true, then the head car MUST actually start this turn. For peds: Likewise – only called when the ped is at the start of the turn. They must actually do the turn if this returns true.

If this returns false, the agent should NOT retry. IntersectionSimState will schedule a retry event at some point.

Returns intersections with travelers waiting for at least threshold since now, ordered so the longest delayed intersection is first.

See if any agent is currently performing a turn that conflicts with an uber-turn. Doesn’t check for room on the queues.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Deserialize this value from the given Serde deserializer. Read more

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait. Read more

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read more

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s. Read more

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s. Read more

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.