From 3986c699c8c73e275ed3e8bf96a7f97652cebd0c Mon Sep 17 00:00:00 2001 From: dabreegster Date: Tue, 9 Jul 2024 20:18:19 +0000 Subject: [PATCH] deploy: d30c36a22a87824d3581e0d0d4e2faf9788d6176 --- rustdoc/abstio/abst_paths/struct.MapName.html | 6 +- rustdoc/abstio/fn.maybe_read_binary.html | 2 +- rustdoc/abstio/fn.maybe_read_json.html | 2 +- rustdoc/abstio/fn.must_read_object.html | 2 +- rustdoc/abstio/fn.read_binary.html | 2 +- rustdoc/abstio/fn.read_json.html | 2 +- rustdoc/abstio/fn.read_object.html | 2 +- rustdoc/abstio/io/fn.maybe_read_json.html | 2 +- rustdoc/abstio/io/fn.must_read_object.html | 2 +- rustdoc/abstio/io/fn.read_binary.html | 2 +- rustdoc/abstio/io/fn.read_json.html | 2 +- rustdoc/abstio/io/fn.read_object.html | 2 +- .../io_native/fn.maybe_read_binary.html | 2 +- .../io_native/struct.FileWithProgress.html | 2 +- rustdoc/abstio/struct.FileWithProgress.html | 2 +- rustdoc/abstio/struct.MapName.html | 6 +- .../augment_scenario/fn.add_lunch_trips.html | 4 +- .../augment_scenario/fn.add_return_trips.html | 2 +- .../fn.delete_cancelled_trips.html | 2 +- .../augment_scenario/fn.pick_lunch_spot.html | 2 +- rustdoc/cli/augment_scenario/fn.run.html | 2 +- rustdoc/cli/enum.Command.html | 8 +- rustdoc/cli/fn.parse_modifiers.html | 2 +- ..._buildings_on_empty_residential_roads.html | 2 +- .../import_grid2demand/fn.parse_trips.html | 2 +- rustdoc/cli/import_scenario/struct.Input.html | 4 +- rustdoc/cli/type.ModifierList.html | 6 +- .../convert_osm/elevation/fn.add_data.html | 2 +- .../convert_osm/extract/fn.extract_osm.html | 2 +- .../extract/fn.find_parking_aisles.html | 2 +- .../convert_osm/extract/fn.get_area_type.html | 2 +- .../extract/fn.get_bldg_amenities.html | 2 +- rustdoc/convert_osm/extract/fn.is_bldg.html | 2 +- .../convert_osm/extract/struct.Extract.html | 4 +- rustdoc/convert_osm/fn.clip_map.html | 2 +- rustdoc/convert_osm/fn.convert.html | 2 +- rustdoc/convert_osm/fn.filter_crosswalks.html | 2 +- .../convert_osm/parking/fn.apply_parking.html | 2 +- .../parking/fn.unknown_parking.html | 2 +- .../parking/fn.use_offstreet_parking.html | 2 +- .../parking/fn.use_parking_hints.html | 2 +- .../common/struct.HoverOnCategory.html | 2 +- .../isochrone/struct.Isochrone.html | 4 +- .../score_homes/fn.build_panel.html | 2 +- .../fn.score_houses_by_one_match.html | 4 +- .../score_homes/struct.Results.html | 4 +- .../score_homes/struct.ScoreHomes.html | 2 +- rustdoc/game/app/struct.App.html | 70 +++++++++--------- .../app/struct.FindDelayedIntersections.html | 2 +- rustdoc/game/app/struct.Flags.html | 4 +- rustdoc/game/app/struct.PerMap.html | 28 +++---- .../challenges/struct.ChallengesPicker.html | 2 +- .../game/common/fn.color_for_agent_type.html | 2 +- .../game/common/fn.color_for_trip_phase.html | 2 +- .../common/share/struct.ShareProposal.html | 2 +- .../game/debug/blocked_by/struct.Viewer.html | 10 +-- .../debug/blockfinder/struct.Blockfinder.html | 2 +- .../debug/blockfinder/struct.OneBlock.html | 2 +- rustdoc/game/debug/fn.diff_tags.html | 2 +- .../debug/objects/struct.ObjectDebugger.html | 2 +- .../path_counter/struct.PathCounter.html | 4 +- .../debug/routes/fn.calculate_demand.html | 4 +- .../routes/struct.AllRoutesExplorer.html | 6 +- .../uber_turns/struct.UberTurnPicker.html | 2 +- .../uber_turns/struct.UberTurnViewer.html | 2 +- .../struct.GenericCompareCounts.html | 6 +- .../struct.PopularDestinations.html | 8 +- .../game/devtools/kml/fn.load_objects.html | 2 +- rustdoc/game/devtools/kml/fn.make_object.html | 2 +- .../polygon/struct.PolygonEditor.html | 4 +- .../devtools/story/struct.EditingMarker.html | 2 +- .../game/devtools/struct.DevToolsMode.html | 2 +- .../stop_signs/struct.StopSignEditor.html | 2 +- .../edits/struct.ChangeDuration.html | 2 +- .../offsets/struct.ShowAbsolute.html | 2 +- .../offsets/struct.ShowRelative.html | 2 +- .../offsets/struct.TuneRelative.html | 2 +- .../struct.TrafficSignalEditor.html | 4 +- rustdoc/game/fn.finish_app_setup.html | 2 +- rustdoc/game/id/enum.ID.html | 8 +- .../game/info/building/fn.draw_occupants.html | 2 +- rustdoc/game/info/enum.Tab.html | 14 ++-- .../game/info/fn.color_for_problem_type.html | 2 +- rustdoc/game/info/fn.do_time_warp.html | 2 +- rustdoc/game/info/fn.problem_count.html | 2 +- rustdoc/game/info/fn.throughput.html | 2 +- rustdoc/game/info/person/fn.bio.html | 2 +- rustdoc/game/info/person/fn.bio_body.html | 2 +- rustdoc/game/info/person/fn.crowd.html | 2 +- rustdoc/game/info/person/fn.crowd_body.html | 2 +- .../game/info/person/fn.current_status.html | 2 +- rustdoc/game/info/person/fn.header.html | 2 +- rustdoc/game/info/person/fn.parked_car.html | 2 +- .../game/info/person/fn.parked_car_body.html | 2 +- rustdoc/game/info/person/fn.schedule.html | 2 +- .../game/info/person/fn.schedule_body.html | 2 +- rustdoc/game/info/person/fn.trips.html | 4 +- rustdoc/game/info/person/fn.trips_body.html | 4 +- rustdoc/game/info/struct.DataOptions.html | 4 +- rustdoc/game/info/struct.Details.html | 8 +- rustdoc/game/info/struct.InfoPanel.html | 6 +- rustdoc/game/info/struct.ProblemOptions.html | 4 +- rustdoc/game/info/transit/fn.bus_header.html | 2 +- rustdoc/game/info/transit/fn.bus_status.html | 2 +- .../game/info/transit/fn.bus_status_body.html | 2 +- rustdoc/game/info/trip/fn.cancelled.html | 2 +- .../game/info/trip/fn.describe_problems.html | 6 +- rustdoc/game/info/trip/fn.draw_problems.html | 4 +- rustdoc/game/info/trip/fn.finished.html | 6 +- rustdoc/game/info/trip/fn.future.html | 2 +- rustdoc/game/info/trip/fn.make_timeline.html | 4 +- .../game/info/trip/fn.make_trip_details.html | 4 +- rustdoc/game/info/trip/fn.ongoing.html | 4 +- rustdoc/game/info/trip/struct.OpenTrip.html | 2 +- .../layer/elevation/struct.SteepStreets.html | 2 +- rustdoc/game/layer/map/struct.Static.html | 2 +- .../game/layer/pandemic/struct.Options.html | 4 +- rustdoc/game/layer/parking/enum.Loc.html | 2 +- .../game/layer/population/struct.Options.html | 4 +- .../game/layer/problems/struct.Options.html | 4 +- .../problems_diff/struct.ProblemTypes.html | 4 +- .../struct.RelativeProblemMap.html | 10 +-- .../layer/problems_diff/type.Options.html | 4 +- .../game/layer/traffic/struct.Throughput.html | 6 +- .../pregame/proposals/struct.Proposals.html | 2 +- .../game/render/agents/struct.AgentCache.html | 20 ++--- .../render/agents/struct.UnzoomedAgents.html | 4 +- rustdoc/game/render/bike/struct.DrawBike.html | 12 +-- .../game/render/car/fn.zoomed_color_car.html | 2 +- rustdoc/game/render/car/struct.DrawCar.html | 12 +-- rustdoc/game/render/fn.draw_vehicle.html | 6 +- .../fn.grey_out_unhighlighted_people.html | 4 +- .../game/render/fn.unzoomed_agent_radius.html | 2 +- .../pedestrian/struct.DrawPedCrowd.html | 10 +-- .../pedestrian/struct.DrawPedestrian.html | 18 ++--- rustdoc/game/render/trait.GameRenderable.html | 4 +- .../dashboards/commuter/fn.group_bldgs.html | 2 +- .../commuter/struct.CommuterPatterns.html | 6 +- .../generic_trip_table/fn.preview_route.html | 2 +- .../dashboards/mode_shift/struct.Entry.html | 4 +- .../parking_overhead/struct.Entry.html | 4 +- .../dashboards/risks/struct.Filter.html | 4 +- .../traffic_signals/struct.Demand.html | 4 +- .../travel_times/struct.Filter.html | 4 +- .../trip_problems/fn.bucketize_isizes.html | 2 +- .../trip_problems/fn.problem_matrix.html | 2 +- .../trip_problems/struct.Matrix.html | 2 +- .../trait.TripProblemFilter.html | 8 +- .../trip_table/struct.CancelledTrip.html | 4 +- .../trip_table/struct.FinishedTrip.html | 4 +- .../trip_table/struct.UnfinishedTrip.html | 4 +- rustdoc/game/sandbox/enum.LoadStage.html | 4 +- .../gameplay/actdev/fn.find_active_trip.html | 2 +- .../sandbox/gameplay/actdev/struct.About.html | 2 +- .../gameplay/commute/fn.get_score.html | 2 +- .../commute/struct.OptimizeCommute.html | 6 +- .../sandbox/gameplay/enum.GameplayMode.html | 2 +- .../importers/fn.import_json_scenario.html | 2 +- .../freeform/struct.ChangeScenario.html | 2 +- .../struct.DepartureSummary.html | 2 +- .../gameplay/tutorial/constant.ESCORT.html | 2 +- .../minimap/struct.MinimapController.html | 10 +-- .../misc_tools/struct.RoutePreview.html | 4 +- .../game/sandbox/struct.SandboxControls.html | 4 +- rustdoc/game/sandbox/struct.SandboxMode.html | 4 +- rustdoc/game/struct.Args.html | 4 +- rustdoc/game/struct.Setup.html | 4 +- rustdoc/game/ungap/layers/struct.Layers.html | 4 +- .../ungap/predict/struct.ModeShiftData.html | 4 +- .../ungap/predict/struct.NetworkGaps.html | 4 +- rustdoc/game/ungap/trip/enum.ID.html | 4 +- .../game/ungap/trip/struct.TripPlanner.html | 8 +- rustdoc/headless/struct.LoadSim.html | 2 +- .../berlin/fn.correlate_population.html | 2 +- .../berlin/fn.distribute_residents.html | 2 +- .../importer/berlin/fn.import_extra_data.html | 2 +- rustdoc/importer/fn.oneshot.html | 2 +- .../map_config/fn.config_for_map.html | 2 +- rustdoc/importer/map_config/index.html | 2 +- .../seattle/fn.ensure_popdat_exists.html | 2 +- rustdoc/importer/seattle/fn.input.html | 2 +- .../fn.match_parcels_to_buildings.html | 2 +- .../soundcast/popdat/fn.import_data.html | 2 +- .../soundcast/popdat/fn.import_parcels.html | 2 +- .../soundcast/popdat/fn.import_trips.html | 2 +- .../soundcast/trips/fn.clip_trips.html | 2 +- .../soundcast/trips/fn.make_scenario.html | 2 +- rustdoc/importer/struct.Job.html | 2 +- rustdoc/importer/uk/fn.check_sensor_data.html | 2 +- rustdoc/importer/uk/fn.generate_scenario.html | 2 +- .../importer/uk/fn.import_collision_data.html | 2 +- rustdoc/importer/utils/fn.download_kml.html | 2 +- rustdoc/importer/utils/fn.osm_to_raw.html | 2 +- rustdoc/importer/utils/fn.raw_to_map.html | 2 +- rustdoc/kml/fn.load.html | 2 +- rustdoc/kml/struct.ExtraShapes.html | 2 +- rustdoc/ltn/app/struct.App.html | 6 +- rustdoc/ltn/app/struct.PerMap.html | 2 +- .../enum.AutoFilterHeuristic.html | 2 +- .../logic/auto_filters/fn.brute_force.html | 2 +- .../logic/auto_filters/fn.split_cells.html | 2 +- .../ltn/logic/enum.AutoFilterHeuristic.html | 2 +- .../logic/existing/fn.transform_existing.html | 2 +- rustdoc/ltn/logic/fn.transform_existing.html | 2 +- rustdoc/ltn/logic/impact/struct.Impact.html | 12 +-- .../logic/partition/struct.Partitioning.html | 2 +- .../ltn/logic/shortcuts/struct.Shortcuts.html | 8 +- rustdoc/ltn/logic/struct.Partitioning.html | 2 +- rustdoc/ltn/logic/struct.Shortcuts.html | 8 +- rustdoc/ltn/pages/about/struct.About.html | 2 +- .../struct.PerResidentImpact.html | 2 +- rustdoc/ltn/pages/struct.About.html | 2 +- .../ltn/pages/struct.PerResidentImpact.html | 2 +- .../ltn/save/share/struct.ShareProposal.html | 2 +- rustdoc/ltn/save/struct.Proposals.html | 2 +- rustdoc/ltn/struct.App.html | 6 +- rustdoc/ltn/struct.PerMap.html | 2 +- rustdoc/map_editor/app/struct.App.html | 2 +- rustdoc/map_editor/edit/struct.EditRoad.html | 2 +- rustdoc/map_editor/model/fn.dump_to_osm.html | 2 +- rustdoc/map_editor/model/struct.Model.html | 10 +-- .../map_gui/render/map/struct.DrawMap.html | 6 +- rustdoc/map_gui/render/struct.DrawMap.html | 6 +- .../map_gui/simple_app/struct.SimpleApp.html | 2 +- rustdoc/map_gui/struct.SimpleApp.html | 2 +- .../tools/colors/struct.ColorNetwork.html | 8 +- .../labels/struct.DrawSimpleRoadLabels.html | 2 +- .../map_gui/tools/struct.ColorNetwork.html | 8 +- .../tools/struct.DrawSimpleRoadLabels.html | 2 +- rustdoc/map_gui/tools/struct.TitleScreen.html | 2 +- .../built_info/constant.BUILT_TIME_UTC.html | 2 +- .../title_screen/struct.TitleScreen.html | 2 +- .../tools/trip_files/struct.RenameTrip.html | 2 +- rustdoc/map_gui/trait.AppLike.html | 4 +- rustdoc/map_model/city/struct.City.html | 2 +- rustdoc/map_model/edits/struct.MapEdits.html | 2 +- .../make/bridges/fn.find_bridges.html | 2 +- .../make/buildings/fn.classify_bldg.html | 2 +- .../make/buildings/fn.get_address.html | 2 +- .../make/buildings/fn.make_all_buildings.html | 2 +- .../make/fn.match_points_to_lanes.html | 2 +- .../fn.make_all_parking_lots.html | 2 +- .../make/transit/fn.finalize_transit.html | 2 +- .../map_model/objects/area/struct.Area.html | 4 +- .../objects/building/struct.Building.html | 4 +- .../map_model/objects/road/struct.Road.html | 4 +- .../pathfinder/struct.Pathfinder.html | 14 ++-- .../pathfinder/struct.PathfinderCache.html | 4 +- rustdoc/map_model/struct.Amenity.html | 4 +- rustdoc/map_model/struct.Area.html | 4 +- rustdoc/map_model/struct.Building.html | 4 +- rustdoc/map_model/struct.City.html | 2 +- rustdoc/map_model/struct.Map.html | 28 +++---- rustdoc/map_model/struct.MapEdits.html | 2 +- rustdoc/map_model/struct.NamePerLanguage.html | 2 +- rustdoc/map_model/struct.Pathfinder.html | 14 ++-- rustdoc/map_model/struct.PathfinderCache.html | 4 +- rustdoc/map_model/struct.Road.html | 4 +- .../viewer/struct.BusinessSearch.html | 4 +- .../mapper/fn.find_overlapping_stuff.html | 2 +- .../mapper/fn.generate_osmc.html | 2 +- .../popdat/make_person/fn.make_people.html | 2 +- rustdoc/popdat/od/fn.create_zones.html | 2 +- rustdoc/popdat/od/fn.disaggregate.html | 2 +- rustdoc/raw_map/struct.Amenity.html | 4 +- rustdoc/raw_map/struct.RawArea.html | 4 +- rustdoc/raw_map/struct.RawBuilding.html | 4 +- rustdoc/raw_map/struct.RawMap.html | 10 +-- rustdoc/raw_map/struct.RawParkingLot.html | 4 +- rustdoc/raw_map/types/struct.Amenity.html | 4 +- rustdoc/santa/after_level/struct.Results.html | 2 +- .../santa/after_level/struct.Strategize.html | 2 +- rustdoc/santa/session/struct.Session.html | 4 +- rustdoc/santa/title/struct.Credits.html | 2 +- rustdoc/santa/title/struct.TitleScreen.html | 2 +- rustdoc/sim/analytics/struct.Analytics.html | 6 +- .../sim/analytics/struct.TimeSeriesCount.html | 2 +- rustdoc/sim/events/enum.Event.html | 6 +- .../sim/fn.count_parked_cars_per_bldg.html | 2 +- rustdoc/sim/fn.fork_rng.html | 2 +- rustdoc/sim/make/load/fn.parse_modifiers.html | 2 +- rustdoc/sim/make/load/struct.SimFlags.html | 6 +- rustdoc/sim/make/load/type.ModifierList.html | 6 +- rustdoc/sim/make/spawner/enum.TripSpec.html | 6 +- rustdoc/sim/make/spawner/fn.driving_goal.html | 2 +- .../make/spawner/fn.end_sidewalk_spot.html | 2 +- .../make/spawner/fn.start_sidewalk_spot.html | 2 +- .../driving/struct.DrivingSimState.html | 4 +- .../struct.IntersectionSimState.html | 8 +- .../parking/enum.ParkingSimState.html | 4 +- .../struct.InfiniteParkingSimState.html | 6 +- .../parking/struct.NormalParkingSimState.html | 10 +-- .../mechanics/parking/trait.ParkingSim.html | 4 +- rustdoc/sim/mechanics/queue/fn.dump_cars.html | 2 +- .../queue/fn.validate_positions.html | 2 +- rustdoc/sim/mechanics/queue/struct.Queue.html | 10 +-- .../walking/fn.crowdedness_penalty.html | 2 +- .../mechanics/walking/struct.Pedestrian.html | 4 +- .../walking/struct.WalkingSimState.html | 6 +- rustdoc/sim/prebake/fn.prebake.html | 4 +- .../sim/prebake/struct.PrebakeSummary.html | 2 +- .../sim/recorder/struct.TrafficRecorder.html | 4 +- rustdoc/sim/scheduler/struct.Scheduler.html | 6 +- .../fn.count_parked_cars_per_bldg.html | 2 +- rustdoc/sim/sim/scenario/fn.get_vehicles.html | 2 +- .../sim/sim/scenario/fn.seed_parked_cars.html | 2 +- rustdoc/sim/sim/struct.Sim.html | 26 +++---- rustdoc/sim/struct.Analytics.html | 6 +- rustdoc/sim/struct.BorderSpawnOverTime.html | 8 +- rustdoc/sim/struct.CarID.html | 2 +- rustdoc/sim/struct.PedestrianID.html | 2 +- rustdoc/sim/struct.Person.html | 4 +- rustdoc/sim/struct.ScenarioGenerator.html | 16 ++-- rustdoc/sim/struct.Sim.html | 26 +++---- rustdoc/sim/struct.SimFlags.html | 6 +- rustdoc/sim/struct.SpawnOverTime.html | 8 +- rustdoc/sim/struct.TripID.html | 6 +- rustdoc/sim/struct.TripInfo.html | 10 +-- rustdoc/sim/trips/struct.Person.html | 4 +- rustdoc/sim/trips/struct.TripInfo.html | 10 +-- rustdoc/sim/trips/struct.TripManager.html | 6 +- rustdoc/src/importer/map_config.rs.html | 4 + .../out/built.rs.html | 2 +- .../synthpop/counts/struct.TrafficCounts.html | 8 +- .../generator/struct.ScenarioGenerator.html | 4 +- .../make/struct.ScenarioGenerator.html | 4 +- rustdoc/synthpop/struct.TrafficCounts.html | 8 +- rustdoc/traffic_seitan/fn.run.html | 2 +- .../abstutil/clone/trait.CloneableAny.js | 4 +- .../collections/trait.IndexableKey.js | 2 +- rustdoc/trait.impl/core/convert/trait.From.js | 2 +- .../tools/minimap/trait.MinimapControls.js | 2 +- .../trip_files/trait.TripManagementState.js | 2 +- rustdoc/trait.impl/map_gui/trait.AppLike.js | 2 +- .../trait.impl/sim/sim/trait.SimCallback.js | 2 +- rustdoc/type.impl/alloc/vec/struct.Vec.js | 4 +- .../problems_diff/struct.ProblemTypes.js | 2 +- .../map_gui/simple_app/struct.SimpleApp.js | 8 +- web/ltn/wasm_pkg/ltn_bg.wasm | Bin 13343326 -> 13343527 bytes 339 files changed, 700 insertions(+), 696 deletions(-) diff --git a/rustdoc/abstio/abst_paths/struct.MapName.html b/rustdoc/abstio/abst_paths/struct.MapName.html index 87e576e8f9..7708a540da 100644 --- a/rustdoc/abstio/abst_paths/struct.MapName.html +++ b/rustdoc/abstio/abst_paths/struct.MapName.html @@ -34,11 +34,11 @@ by ==.
source§

impl PartialOrd for MapName

source§

fn partial_cmp(&self, other: &MapName) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Serialize for MapName

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl CloneableAny for MapName

source§

impl Eq for MapName

source§

impl StructuralPartialEq for MapName

Auto Trait Implementations§

§

impl Freeze for MapName

§

impl RefUnwindSafe for MapName

§

impl Send for MapName

§

impl Sync for MapName

§

impl Unpin for MapName

§

impl UnwindSafe for MapName

Blanket Implementations§

source§

impl<T> Any for T
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl CloneableAny for MapName

source§

impl Eq for MapName

source§

impl StructuralPartialEq for MapName

Auto Trait Implementations§

§

impl Freeze for MapName

§

impl RefUnwindSafe for MapName

§

impl Send for MapName

§

impl Sync for MapName

§

impl Unpin for MapName

§

impl UnwindSafe for MapName

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneableImpl for T
where - T: 'static + CloneableAny + Clone,

§

fn clone_box(&self) -> Box<dyn CloneableAny>

§

fn as_any(&self) -> &(dyn Any + 'static)

source§

impl<Q, K> Equivalent<K> for Q
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneableImpl for T
where + T: 'static + CloneableAny + Clone,

source§

fn clone_box(&self) -> Box<dyn CloneableAny>

source§

fn as_any(&self) -> &(dyn Any + 'static)

source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an diff --git a/rustdoc/abstio/fn.maybe_read_binary.html b/rustdoc/abstio/fn.maybe_read_binary.html index 26db040d99..f24db5323b 100644 --- a/rustdoc/abstio/fn.maybe_read_binary.html +++ b/rustdoc/abstio/fn.maybe_read_binary.html @@ -1,4 +1,4 @@ maybe_read_binary in abstio - Rust

Function abstio::maybe_read_binary

source ·
pub fn maybe_read_binary<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<T>
\ No newline at end of file diff --git a/rustdoc/abstio/fn.maybe_read_json.html b/rustdoc/abstio/fn.maybe_read_json.html index 46778e2e63..96cbaa86d9 100644 --- a/rustdoc/abstio/fn.maybe_read_json.html +++ b/rustdoc/abstio/fn.maybe_read_json.html @@ -1,4 +1,4 @@ maybe_read_json in abstio - Rust

Function abstio::maybe_read_json

source ·
pub fn maybe_read_json<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<T>
\ No newline at end of file diff --git a/rustdoc/abstio/fn.must_read_object.html b/rustdoc/abstio/fn.must_read_object.html index cc2711ec7d..ea36d97f4a 100644 --- a/rustdoc/abstio/fn.must_read_object.html +++ b/rustdoc/abstio/fn.must_read_object.html @@ -1,5 +1,5 @@ must_read_object in abstio - Rust

Function abstio::must_read_object

source ·
pub fn must_read_object<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> T
Expand description

May be a JSON or binary file. Panics on failure.

\ No newline at end of file diff --git a/rustdoc/abstio/fn.read_binary.html b/rustdoc/abstio/fn.read_binary.html index 13eb9446d5..55e106fb23 100644 --- a/rustdoc/abstio/fn.read_binary.html +++ b/rustdoc/abstio/fn.read_binary.html @@ -1,4 +1,4 @@ read_binary in abstio - Rust

Function abstio::read_binary

source ·
pub fn read_binary<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> T
\ No newline at end of file diff --git a/rustdoc/abstio/fn.read_json.html b/rustdoc/abstio/fn.read_json.html index b8b8f2bb81..bb55cb5b28 100644 --- a/rustdoc/abstio/fn.read_json.html +++ b/rustdoc/abstio/fn.read_json.html @@ -1 +1 @@ -read_json in abstio - Rust

Function abstio::read_json

source ·
pub fn read_json<T: DeserializeOwned>(path: String, timer: &mut Timer<'_>) -> T
\ No newline at end of file +read_json in abstio - Rust

Function abstio::read_json

source ·
pub fn read_json<T: DeserializeOwned>(path: String, timer: &mut Timer<'_>) -> T
\ No newline at end of file diff --git a/rustdoc/abstio/fn.read_object.html b/rustdoc/abstio/fn.read_object.html index d3d3dbae9a..87a93e4f64 100644 --- a/rustdoc/abstio/fn.read_object.html +++ b/rustdoc/abstio/fn.read_object.html @@ -1,5 +1,5 @@ read_object in abstio - Rust

Function abstio::read_object

source ·
pub fn read_object<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<T>
Expand description

May be a JSON or binary file

\ No newline at end of file diff --git a/rustdoc/abstio/io/fn.maybe_read_json.html b/rustdoc/abstio/io/fn.maybe_read_json.html index 95a6fcc461..82cc30c78c 100644 --- a/rustdoc/abstio/io/fn.maybe_read_json.html +++ b/rustdoc/abstio/io/fn.maybe_read_json.html @@ -1,4 +1,4 @@ maybe_read_json in abstio::io - Rust

Function abstio::io::maybe_read_json

source ·
pub fn maybe_read_json<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<T>
\ No newline at end of file diff --git a/rustdoc/abstio/io/fn.must_read_object.html b/rustdoc/abstio/io/fn.must_read_object.html index 9458f49985..c1f3ff0e79 100644 --- a/rustdoc/abstio/io/fn.must_read_object.html +++ b/rustdoc/abstio/io/fn.must_read_object.html @@ -1,5 +1,5 @@ must_read_object in abstio::io - Rust

Function abstio::io::must_read_object

source ·
pub fn must_read_object<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> T
Expand description

May be a JSON or binary file. Panics on failure.

\ No newline at end of file diff --git a/rustdoc/abstio/io/fn.read_binary.html b/rustdoc/abstio/io/fn.read_binary.html index 371c5bb941..b08f39002b 100644 --- a/rustdoc/abstio/io/fn.read_binary.html +++ b/rustdoc/abstio/io/fn.read_binary.html @@ -1,4 +1,4 @@ read_binary in abstio::io - Rust

Function abstio::io::read_binary

source ·
pub fn read_binary<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> T
\ No newline at end of file diff --git a/rustdoc/abstio/io/fn.read_json.html b/rustdoc/abstio/io/fn.read_json.html index 8baa8ccd43..aa61362d03 100644 --- a/rustdoc/abstio/io/fn.read_json.html +++ b/rustdoc/abstio/io/fn.read_json.html @@ -1 +1 @@ -read_json in abstio::io - Rust

Function abstio::io::read_json

source ·
pub fn read_json<T: DeserializeOwned>(path: String, timer: &mut Timer<'_>) -> T
\ No newline at end of file +read_json in abstio::io - Rust

Function abstio::io::read_json

source ·
pub fn read_json<T: DeserializeOwned>(path: String, timer: &mut Timer<'_>) -> T
\ No newline at end of file diff --git a/rustdoc/abstio/io/fn.read_object.html b/rustdoc/abstio/io/fn.read_object.html index ca6098505a..21c1e234df 100644 --- a/rustdoc/abstio/io/fn.read_object.html +++ b/rustdoc/abstio/io/fn.read_object.html @@ -1,5 +1,5 @@ read_object in abstio::io - Rust

Function abstio::io::read_object

source ·
pub fn read_object<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<T>
Expand description

May be a JSON or binary file

\ No newline at end of file diff --git a/rustdoc/abstio/io_native/fn.maybe_read_binary.html b/rustdoc/abstio/io_native/fn.maybe_read_binary.html index ff07e0137d..bcc37d93d3 100644 --- a/rustdoc/abstio/io_native/fn.maybe_read_binary.html +++ b/rustdoc/abstio/io_native/fn.maybe_read_binary.html @@ -1,4 +1,4 @@ maybe_read_binary in abstio::io_native - Rust

Function abstio::io_native::maybe_read_binary

source ·
pub fn maybe_read_binary<T: DeserializeOwned>(
     path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<T>
\ No newline at end of file diff --git a/rustdoc/abstio/io_native/struct.FileWithProgress.html b/rustdoc/abstio/io_native/struct.FileWithProgress.html index f3285b08a0..dbe7a3bc04 100644 --- a/rustdoc/abstio/io_native/struct.FileWithProgress.html +++ b/rustdoc/abstio/io_native/struct.FileWithProgress.html @@ -7,7 +7,7 @@ last_printed_at: Instant, }

Fields§

§inner: BufReader<File>§path: String§processed_bytes: usize§total_bytes: usize§started_at: Instant§last_printed_at: Instant

Implementations§

source§

impl FileWithProgress

source

pub fn new( path: &str -) -> Result<(FileWithProgress, Box<dyn Fn(&mut Timer<'_>)>)>

Also hands back a callback that’ll add the final result to the timer. The caller must run +) -> Result<(FileWithProgress, Box<dyn Fn(&mut Timer<'_>)>)>

Also hands back a callback that’ll add the final result to the timer. The caller must run it.

Trait Implementations§

source§

impl Read for FileWithProgress

source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored diff --git a/rustdoc/abstio/struct.FileWithProgress.html b/rustdoc/abstio/struct.FileWithProgress.html index c31fc53a80..73c190e1aa 100644 --- a/rustdoc/abstio/struct.FileWithProgress.html +++ b/rustdoc/abstio/struct.FileWithProgress.html @@ -7,7 +7,7 @@ last_printed_at: Instant, }

Fields§

§inner: BufReader<File>§path: String§processed_bytes: usize§total_bytes: usize§started_at: Instant§last_printed_at: Instant

Implementations§

source§

impl FileWithProgress

source

pub fn new( path: &str -) -> Result<(FileWithProgress, Box<dyn Fn(&mut Timer<'_>)>)>

Also hands back a callback that’ll add the final result to the timer. The caller must run +) -> Result<(FileWithProgress, Box<dyn Fn(&mut Timer<'_>)>)>

Also hands back a callback that’ll add the final result to the timer. The caller must run it.

Trait Implementations§

source§

impl Read for FileWithProgress

source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored diff --git a/rustdoc/abstio/struct.MapName.html b/rustdoc/abstio/struct.MapName.html index 150b506c63..8062a73a28 100644 --- a/rustdoc/abstio/struct.MapName.html +++ b/rustdoc/abstio/struct.MapName.html @@ -34,11 +34,11 @@ by ==.
source§

impl PartialOrd for MapName

source§

fn partial_cmp(&self, other: &MapName) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Serialize for MapName

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl CloneableAny for MapName

source§

impl Eq for MapName

source§

impl StructuralPartialEq for MapName

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl CloneableAny for MapName

source§

impl Eq for MapName

source§

impl StructuralPartialEq for MapName

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneableImpl for T
where - T: 'static + CloneableAny + Clone,

§

fn clone_box(&self) -> Box<dyn CloneableAny>

§

fn as_any(&self) -> &(dyn Any + 'static)

source§

impl<Q, K> Equivalent<K> for Q
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneableImpl for T
where + T: 'static + CloneableAny + Clone,

source§

fn clone_box(&self) -> Box<dyn CloneableAny>

source§

fn as_any(&self) -> &(dyn Any + 'static)

source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an diff --git a/rustdoc/cli/augment_scenario/fn.add_lunch_trips.html b/rustdoc/cli/augment_scenario/fn.add_lunch_trips.html index 9d4da5eaf7..2e1a9d7628 100644 --- a/rustdoc/cli/augment_scenario/fn.add_lunch_trips.html +++ b/rustdoc/cli/augment_scenario/fn.add_lunch_trips.html @@ -1,6 +1,6 @@ add_lunch_trips in cli::augment_scenario - Rust

Function cli::augment_scenario::add_lunch_trips

source ·
fn add_lunch_trips(
-    scenario: &mut Scenario,
+    scenario: &mut Scenario,
     map: &Map,
     rng: &mut XorShiftRng,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 )
\ No newline at end of file diff --git a/rustdoc/cli/augment_scenario/fn.add_return_trips.html b/rustdoc/cli/augment_scenario/fn.add_return_trips.html index a95dabcb84..b2a5044c95 100644 --- a/rustdoc/cli/augment_scenario/fn.add_return_trips.html +++ b/rustdoc/cli/augment_scenario/fn.add_return_trips.html @@ -1 +1 @@ -add_return_trips in cli::augment_scenario - Rust

Function cli::augment_scenario::add_return_trips

source ·
fn add_return_trips(scenario: &mut Scenario, rng: &mut XorShiftRng)
\ No newline at end of file +add_return_trips in cli::augment_scenario - Rust

Function cli::augment_scenario::add_return_trips

source ·
fn add_return_trips(scenario: &mut Scenario, rng: &mut XorShiftRng)
\ No newline at end of file diff --git a/rustdoc/cli/augment_scenario/fn.delete_cancelled_trips.html b/rustdoc/cli/augment_scenario/fn.delete_cancelled_trips.html index b350effe92..2bc31a035d 100644 --- a/rustdoc/cli/augment_scenario/fn.delete_cancelled_trips.html +++ b/rustdoc/cli/augment_scenario/fn.delete_cancelled_trips.html @@ -1 +1 @@ -delete_cancelled_trips in cli::augment_scenario - Rust

Function cli::augment_scenario::delete_cancelled_trips

source ·
fn delete_cancelled_trips(scenario: Scenario) -> Scenario
\ No newline at end of file +delete_cancelled_trips in cli::augment_scenario - Rust

Function cli::augment_scenario::delete_cancelled_trips

source ·
fn delete_cancelled_trips(scenario: Scenario) -> Scenario
\ No newline at end of file diff --git a/rustdoc/cli/augment_scenario/fn.pick_lunch_spot.html b/rustdoc/cli/augment_scenario/fn.pick_lunch_spot.html index 768b24bf3c..2049256eb5 100644 --- a/rustdoc/cli/augment_scenario/fn.pick_lunch_spot.html +++ b/rustdoc/cli/augment_scenario/fn.pick_lunch_spot.html @@ -4,4 +4,4 @@ closest_spots: &FindClosest<BuildingID>, map: &Map, rng: &mut XorShiftRng -) -> Option<(BuildingID, TripMode)>
\ No newline at end of file +) -> Option<(BuildingID, TripMode)>
\ No newline at end of file diff --git a/rustdoc/cli/augment_scenario/fn.run.html b/rustdoc/cli/augment_scenario/fn.run.html index 30159eda79..cd46608a82 100644 --- a/rustdoc/cli/augment_scenario/fn.run.html +++ b/rustdoc/cli/augment_scenario/fn.run.html @@ -2,7 +2,7 @@ input_scenario: String, should_add_return_trips: bool, should_add_lunch_trips: bool, - modifiers: Vec<ScenarioModifier>, + modifiers: Vec<ScenarioModifier>, should_delete_cancelled_trips: bool, rng_seed: u64 )
\ No newline at end of file diff --git a/rustdoc/cli/enum.Command.html b/rustdoc/cli/enum.Command.html index b16f161a6b..b3a1685267 100644 --- a/rustdoc/cli/enum.Command.html +++ b/rustdoc/cli/enum.Command.html @@ -11,7 +11,7 @@ input_scenario: String, add_return_trips: bool, add_lunch_trips: bool, - scenario_modifiers: Vec<ScenarioModifier>, + scenario_modifiers: Vec<ScenarioModifier>, delete_cancelled_trips: bool, rng_seed: u64, }, @@ -69,7 +69,7 @@ }, RegenerateEverythingExternally, Import { - job: Job, + job: Job, }, PrebakeScenario { scenario_path: String, @@ -86,7 +86,7 @@ added in; be careful about running this on the correct input.

§add_return_trips: bool

For people with only a single trip, add a return trip back home sometime 4-12 hours later

§add_lunch_trips: bool

Before a person’s final trip home, insert a round-trip to a nearby cafe or restaurant

-
§scenario_modifiers: Vec<ScenarioModifier>

A JSON list of modifiers to transform the scenario. These can be generated with the GUI.

+
§scenario_modifiers: Vec<ScenarioModifier>

A JSON list of modifiers to transform the scenario. These can be generated with the GUI.

§delete_cancelled_trips: bool

Delete cancelled trips, and delete people with no remaining trips.

§rng_seed: u64

A seed for generating random numbers

§

ClipOSM

Clips an OSM file to a boundary. This is a simple Rust port of osmium extract large_map.osm -p clipping.poly -o smaller_map.osm.

@@ -146,7 +146,7 @@ shard this invocation should run.

total shards there are.

§

RegenerateEverythingExternally

Generate a shell script to regenerate all cities that uses an external task runner.

§

Import

Import RawMaps, maps, scenarios, and city overviews for a single city.

-

Fields

§job: Job
§

PrebakeScenario

Simulate a full day of a scenario, and write the “prebaked results,” so the UI can later be +

Fields

§job: Job
§

PrebakeScenario

Simulate a full day of a scenario, and write the “prebaked results,” so the UI can later be used for A/B testing.

Fields

§scenario_path: String

The path to a scenario file

Trait Implementations§

source§

impl StructOpt for Command

source§

fn clap<'a, 'b>() -> App<'a, 'b>

Returns clap::App corresponding to the struct.
source§

fn from_clap(matches: &ArgMatches<'_>) -> Self

Builds the struct from clap::ArgMatches. It’s guaranteed to succeed diff --git a/rustdoc/cli/fn.parse_modifiers.html b/rustdoc/cli/fn.parse_modifiers.html index 963e92af5f..040bd5364b 100644 --- a/rustdoc/cli/fn.parse_modifiers.html +++ b/rustdoc/cli/fn.parse_modifiers.html @@ -1 +1 @@ -parse_modifiers in cli - Rust

Function cli::parse_modifiers

source ·
pub(crate) fn parse_modifiers(x: &str) -> Result<Vec<ScenarioModifier>>
\ No newline at end of file +parse_modifiers in cli - Rust

Function cli::parse_modifiers

source ·
pub(crate) fn parse_modifiers(x: &str) -> Result<Vec<ScenarioModifier>>
\ No newline at end of file diff --git a/rustdoc/cli/generate_houses/fn.generate_buildings_on_empty_residential_roads.html b/rustdoc/cli/generate_houses/fn.generate_buildings_on_empty_residential_roads.html index b92149c2e3..3747e5a7f6 100644 --- a/rustdoc/cli/generate_houses/fn.generate_buildings_on_empty_residential_roads.html +++ b/rustdoc/cli/generate_houses/fn.generate_buildings_on_empty_residential_roads.html @@ -1,5 +1,5 @@ generate_buildings_on_empty_residential_roads in cli::generate_houses - Rust
fn generate_buildings_on_empty_residential_roads(
     map: &Map,
     rng: &mut XorShiftRng,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Vec<Polygon>
\ No newline at end of file diff --git a/rustdoc/cli/import_grid2demand/fn.parse_trips.html b/rustdoc/cli/import_grid2demand/fn.parse_trips.html index 4e0dbf834f..8e124eb319 100644 --- a/rustdoc/cli/import_grid2demand/fn.parse_trips.html +++ b/rustdoc/cli/import_grid2demand/fn.parse_trips.html @@ -1 +1 @@ -parse_trips in cli::import_grid2demand - Rust

Function cli::import_grid2demand::parse_trips

source ·
fn parse_trips(csv_path: String) -> Result<Vec<ExternalPerson>>
\ No newline at end of file +parse_trips in cli::import_grid2demand - Rust

Function cli::import_grid2demand::parse_trips

source ·
fn parse_trips(csv_path: String) -> Result<Vec<ExternalPerson>>
\ No newline at end of file diff --git a/rustdoc/cli/import_scenario/struct.Input.html b/rustdoc/cli/import_scenario/struct.Input.html index f396a91dad..332cdb589c 100644 --- a/rustdoc/cli/import_scenario/struct.Input.html +++ b/rustdoc/cli/import_scenario/struct.Input.html @@ -1,7 +1,7 @@ Input in cli::import_scenario - Rust

Struct cli::import_scenario::Input

source ·
struct Input {
     scenario_name: String,
-    people: Vec<ExternalPerson>,
-}

Fields§

§scenario_name: String§people: Vec<ExternalPerson>

Trait Implementations§

source§

impl<'de> Deserialize<'de> for Input

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + people: Vec<ExternalPerson>, +}

Fields§

§scenario_name: String§people: Vec<ExternalPerson>

Trait Implementations§

source§

impl<'de> Deserialize<'de> for Input

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Input

§

impl RefUnwindSafe for Input

§

impl Send for Input

§

impl Sync for Input

§

impl Unpin for Input

§

impl UnwindSafe for Input

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/cli/type.ModifierList.html b/rustdoc/cli/type.ModifierList.html index 52fea8dd6b..2e5f96134f 100644 --- a/rustdoc/cli/type.ModifierList.html +++ b/rustdoc/cli/type.ModifierList.html @@ -1,4 +1,4 @@ -ModifierList in cli - Rust

Type Alias cli::ModifierList

source ·
pub(crate) type ModifierList = Vec<ScenarioModifier>;

Aliased Type§

struct ModifierList {
-    buf: RawVec<ScenarioModifier>,
+ModifierList in cli - Rust

Type Alias cli::ModifierList

source ·
pub(crate) type ModifierList = Vec<ScenarioModifier>;

Aliased Type§

struct ModifierList {
+    buf: RawVec<ScenarioModifier>,
     len: usize,
-}

Fields§

§buf: RawVec<ScenarioModifier>§len: usize
\ No newline at end of file +}

Fields§

§buf: RawVec<ScenarioModifier>§len: usize
\ No newline at end of file diff --git a/rustdoc/convert_osm/elevation/fn.add_data.html b/rustdoc/convert_osm/elevation/fn.add_data.html index 63f301c415..434fa6592d 100644 --- a/rustdoc/convert_osm/elevation/fn.add_data.html +++ b/rustdoc/convert_osm/elevation/fn.add_data.html @@ -1,5 +1,5 @@ add_data in convert_osm::elevation - Rust

Function convert_osm::elevation::add_data

source ·
pub fn add_data(
     map: &mut RawMap,
     path: &str,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<()>
\ No newline at end of file diff --git a/rustdoc/convert_osm/extract/fn.extract_osm.html b/rustdoc/convert_osm/extract/fn.extract_osm.html index d9f69015a1..33e7518e65 100644 --- a/rustdoc/convert_osm/extract/fn.extract_osm.html +++ b/rustdoc/convert_osm/extract/fn.extract_osm.html @@ -3,5 +3,5 @@ osm_input_path: &str, clip_pts: Option<Vec<LonLat>>, opts: &Options, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Extract

\ No newline at end of file diff --git a/rustdoc/convert_osm/extract/fn.find_parking_aisles.html b/rustdoc/convert_osm/extract/fn.find_parking_aisles.html index d2e5579694..f63ff269b8 100644 --- a/rustdoc/convert_osm/extract/fn.find_parking_aisles.html +++ b/rustdoc/convert_osm/extract/fn.find_parking_aisles.html @@ -1,4 +1,4 @@ find_parking_aisles in convert_osm::extract - Rust

Function convert_osm::extract::find_parking_aisles

source ·
fn find_parking_aisles(
     map: &mut RawMap,
-    roads: &mut Vec<(WayID, Vec<Pt2D>, Tags)>
+    roads: &mut Vec<(WayID, Vec<Pt2D>, Tags)>
 )
\ No newline at end of file diff --git a/rustdoc/convert_osm/extract/fn.get_area_type.html b/rustdoc/convert_osm/extract/fn.get_area_type.html index c8085c997e..600b69223a 100644 --- a/rustdoc/convert_osm/extract/fn.get_area_type.html +++ b/rustdoc/convert_osm/extract/fn.get_area_type.html @@ -1 +1 @@ -get_area_type in convert_osm::extract - Rust

Function convert_osm::extract::get_area_type

source ·
fn get_area_type(tags: &Tags) -> Option<AreaType>
\ No newline at end of file +get_area_type in convert_osm::extract - Rust

Function convert_osm::extract::get_area_type

source ·
fn get_area_type(tags: &Tags) -> Option<AreaType>
\ No newline at end of file diff --git a/rustdoc/convert_osm/extract/fn.get_bldg_amenities.html b/rustdoc/convert_osm/extract/fn.get_bldg_amenities.html index 24d7d95b65..afc12fcec8 100644 --- a/rustdoc/convert_osm/extract/fn.get_bldg_amenities.html +++ b/rustdoc/convert_osm/extract/fn.get_bldg_amenities.html @@ -1 +1 @@ -get_bldg_amenities in convert_osm::extract - Rust

Function convert_osm::extract::get_bldg_amenities

source ·
fn get_bldg_amenities(tags: &Tags) -> Vec<Amenity>
\ No newline at end of file +get_bldg_amenities in convert_osm::extract - Rust

Function convert_osm::extract::get_bldg_amenities

source ·
fn get_bldg_amenities(tags: &Tags) -> Vec<Amenity>
\ No newline at end of file diff --git a/rustdoc/convert_osm/extract/fn.is_bldg.html b/rustdoc/convert_osm/extract/fn.is_bldg.html index be4c2ffbfa..a05ebf4b5f 100644 --- a/rustdoc/convert_osm/extract/fn.is_bldg.html +++ b/rustdoc/convert_osm/extract/fn.is_bldg.html @@ -1 +1 @@ -is_bldg in convert_osm::extract - Rust

Function convert_osm::extract::is_bldg

source ·
fn is_bldg(tags: &Tags) -> bool
\ No newline at end of file +is_bldg in convert_osm::extract - Rust

Function convert_osm::extract::is_bldg

source ·
fn is_bldg(tags: &Tags) -> bool
\ No newline at end of file diff --git a/rustdoc/convert_osm/extract/struct.Extract.html b/rustdoc/convert_osm/extract/struct.Extract.html index 2f40875b46..20e52d0a2a 100644 --- a/rustdoc/convert_osm/extract/struct.Extract.html +++ b/rustdoc/convert_osm/extract/struct.Extract.html @@ -1,11 +1,11 @@ Extract in convert_osm::extract - Rust

Struct convert_osm::extract::Extract

source ·
pub struct Extract {
     pub osm: OsmExtract,
     pub doc: Document,
-    pub bus_routes_on_roads: MultiMap<WayID, String>,
+    pub bus_routes_on_roads: MultiMap<WayID, String>,
     pub crossing_nodes: HashSet<(HashablePt2D, CrossingType)>,
     pub barrier_nodes: Vec<(NodeID, HashablePt2D)>,
     pub extra_pois: Vec<ExtraPOI>,
-}

Fields§

§osm: OsmExtract§doc: Document§bus_routes_on_roads: MultiMap<WayID, String>§crossing_nodes: HashSet<(HashablePt2D, CrossingType)>

Crossings located at these points, which should be on a Road’s center line

+}

Fields§

§osm: OsmExtract§doc: Document§bus_routes_on_roads: MultiMap<WayID, String>§crossing_nodes: HashSet<(HashablePt2D, CrossingType)>

Crossings located at these points, which should be on a Road’s center line

§barrier_nodes: Vec<(NodeID, HashablePt2D)>

Some kind of barrier nodes at these points.

§extra_pois: Vec<ExtraPOI>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/convert_osm/fn.clip_map.html b/rustdoc/convert_osm/fn.clip_map.html index 5dc2f4c901..0bea23021d 100644 --- a/rustdoc/convert_osm/fn.clip_map.html +++ b/rustdoc/convert_osm/fn.clip_map.html @@ -1 +1 @@ -clip_map in convert_osm - Rust

Function convert_osm::clip_map

source ·
pub(crate) fn clip_map(map: &mut RawMap, timer: &mut Timer<'_>)
\ No newline at end of file +clip_map in convert_osm - Rust

Function convert_osm::clip_map

source ·
pub(crate) fn clip_map(map: &mut RawMap, timer: &mut Timer<'_>)
\ No newline at end of file diff --git a/rustdoc/convert_osm/fn.convert.html b/rustdoc/convert_osm/fn.convert.html index 7ffbb6fa71..d77e3b4554 100644 --- a/rustdoc/convert_osm/fn.convert.html +++ b/rustdoc/convert_osm/fn.convert.html @@ -3,6 +3,6 @@ name: MapName, clip_path: Option<String>, opts: Options, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> RawMap
Expand description

Create a RawMap from OSM and other input data.

\ No newline at end of file diff --git a/rustdoc/convert_osm/fn.filter_crosswalks.html b/rustdoc/convert_osm/fn.filter_crosswalks.html index 1a461cd6c1..0308d2ae6b 100644 --- a/rustdoc/convert_osm/fn.filter_crosswalks.html +++ b/rustdoc/convert_osm/fn.filter_crosswalks.html @@ -2,5 +2,5 @@ map: &mut RawMap, crosswalks: HashSet<(HashablePt2D, CrossingType)>, pt_to_road: HashMap<HashablePt2D, RoadID>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )
\ No newline at end of file diff --git a/rustdoc/convert_osm/parking/fn.apply_parking.html b/rustdoc/convert_osm/parking/fn.apply_parking.html index 4ca900f751..15f826e73a 100644 --- a/rustdoc/convert_osm/parking/fn.apply_parking.html +++ b/rustdoc/convert_osm/parking/fn.apply_parking.html @@ -1 +1 @@ -apply_parking in convert_osm::parking - Rust

Function convert_osm::parking::apply_parking

source ·
pub fn apply_parking(map: &mut RawMap, opts: &Options, timer: &mut Timer<'_>)
\ No newline at end of file +apply_parking in convert_osm::parking - Rust

Function convert_osm::parking::apply_parking

source ·
pub fn apply_parking(map: &mut RawMap, opts: &Options, timer: &mut Timer<'_>)
\ No newline at end of file diff --git a/rustdoc/convert_osm/parking/fn.unknown_parking.html b/rustdoc/convert_osm/parking/fn.unknown_parking.html index c4242b3ea1..f2d68e9ac5 100644 --- a/rustdoc/convert_osm/parking/fn.unknown_parking.html +++ b/rustdoc/convert_osm/parking/fn.unknown_parking.html @@ -1 +1 @@ -unknown_parking in convert_osm::parking - Rust

Function convert_osm::parking::unknown_parking

source ·
fn unknown_parking(tags: &Tags) -> bool
\ No newline at end of file +unknown_parking in convert_osm::parking - Rust

Function convert_osm::parking::unknown_parking

source ·
fn unknown_parking(tags: &Tags) -> bool
\ No newline at end of file diff --git a/rustdoc/convert_osm/parking/fn.use_offstreet_parking.html b/rustdoc/convert_osm/parking/fn.use_offstreet_parking.html index 9806dcab64..be0d70c0d0 100644 --- a/rustdoc/convert_osm/parking/fn.use_offstreet_parking.html +++ b/rustdoc/convert_osm/parking/fn.use_offstreet_parking.html @@ -1 +1 @@ -use_offstreet_parking in convert_osm::parking - Rust

Function convert_osm::parking::use_offstreet_parking

source ·
fn use_offstreet_parking(map: &mut RawMap, path: String, timer: &mut Timer<'_>)
\ No newline at end of file +use_offstreet_parking in convert_osm::parking - Rust

Function convert_osm::parking::use_offstreet_parking

source ·
fn use_offstreet_parking(map: &mut RawMap, path: String, timer: &mut Timer<'_>)
\ No newline at end of file diff --git a/rustdoc/convert_osm/parking/fn.use_parking_hints.html b/rustdoc/convert_osm/parking/fn.use_parking_hints.html index f2740b683e..1923308dad 100644 --- a/rustdoc/convert_osm/parking/fn.use_parking_hints.html +++ b/rustdoc/convert_osm/parking/fn.use_parking_hints.html @@ -1 +1 @@ -use_parking_hints in convert_osm::parking - Rust

Function convert_osm::parking::use_parking_hints

source ·
fn use_parking_hints(map: &mut RawMap, path: String, timer: &mut Timer<'_>)
\ No newline at end of file +use_parking_hints in convert_osm::parking - Rust

Function convert_osm::parking::use_parking_hints

source ·
fn use_parking_hints(map: &mut RawMap, path: String, timer: &mut Timer<'_>)
\ No newline at end of file diff --git a/rustdoc/fifteen_min/common/struct.HoverOnCategory.html b/rustdoc/fifteen_min/common/struct.HoverOnCategory.html index 0199a04784..7502f3db2d 100644 --- a/rustdoc/fifteen_min/common/struct.HoverOnCategory.html +++ b/rustdoc/fifteen_min/common/struct.HoverOnCategory.html @@ -6,7 +6,7 @@ ctx: &EventCtx<'_>, app: &SimpleApp<Options>, panel: &Panel, - amenities_reachable: &MultiMap<AmenityType, BuildingID> + amenities_reachable: &MultiMap<AmenityType, BuildingID> )
source

pub fn draw(&self, g: &mut GfxCtx<'_>)

Auto Trait Implementations§

§

impl Freeze for HoverOnCategory

§

impl RefUnwindSafe for HoverOnCategory

§

impl !Send for HoverOnCategory

§

impl !Sync for HoverOnCategory

§

impl Unpin for HoverOnCategory

§

impl UnwindSafe for HoverOnCategory

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/fifteen_min/isochrone/struct.Isochrone.html b/rustdoc/fifteen_min/isochrone/struct.Isochrone.html index e73b395e26..1bbcb2c0f9 100644 --- a/rustdoc/fifteen_min/isochrone/struct.Isochrone.html +++ b/rustdoc/fifteen_min/isochrone/struct.Isochrone.html @@ -5,7 +5,7 @@ pub thresholds: Vec<f64>, pub colors: Vec<Color>, pub time_to_reach_building: HashMap<BuildingID, Duration>, - pub amenities_reachable: MultiMap<AmenityType, BuildingID>, + pub amenities_reachable: MultiMap<AmenityType, BuildingID>, pub population: usize, pub onstreet_parking_spots: usize, }
Expand description

Represents the area reachable from a single building.

@@ -15,7 +15,7 @@
§thresholds: Vec<f64>

Thresholds used to draw the isochrone

§colors: Vec<Color>

Colors used to draw the isochrone

§time_to_reach_building: HashMap<BuildingID, Duration>

How far away is each building from the start?

-
§amenities_reachable: MultiMap<AmenityType, BuildingID>

Per category of amenity, what buildings have that?

+
§amenities_reachable: MultiMap<AmenityType, BuildingID>

Per category of amenity, what buildings have that?

§population: usize

How many people live in the returned area, according to estimates included in the map (from city-specific parcel data, guesses from census, or a guess based on OSM tags)

§onstreet_parking_spots: usize

How many sreet parking spots are on the same road as any buildings returned.

diff --git a/rustdoc/fifteen_min/score_homes/fn.build_panel.html b/rustdoc/fifteen_min/score_homes/fn.build_panel.html index cbd771e665..21153eeaea 100644 --- a/rustdoc/fifteen_min/score_homes/fn.build_panel.html +++ b/rustdoc/fifteen_min/score_homes/fn.build_panel.html @@ -2,6 +2,6 @@ ctx: &mut EventCtx<'_>, app: &SimpleApp<Options>, amenities: &Vec<AmenityType>, - amenities_reachable: &MultiMap<AmenityType, BuildingID>, + amenities_reachable: &MultiMap<AmenityType, BuildingID>, matches_all: usize ) -> Panel

\ No newline at end of file diff --git a/rustdoc/fifteen_min/score_homes/fn.score_houses_by_one_match.html b/rustdoc/fifteen_min/score_homes/fn.score_houses_by_one_match.html index 47ba378449..71fe375f8f 100644 --- a/rustdoc/fifteen_min/score_homes/fn.score_houses_by_one_match.html +++ b/rustdoc/fifteen_min/score_homes/fn.score_houses_by_one_match.html @@ -1,7 +1,7 @@ score_houses_by_one_match in fifteen_min::score_homes - Rust

Function fifteen_min::score_homes::score_houses_by_one_match

source ·
fn score_houses_by_one_match(
     app: &SimpleApp<Options>,
     amenities: Vec<AmenityType>,
-    timer: &mut Timer<'_>
-) -> (Counter<BuildingID>, MultiMap<AmenityType, BuildingID>)
Expand description

For every house in the map, return the number of amenity types located within a 15min walkshed. + timer: &mut Timer<'_> +) -> (Counter<BuildingID>, MultiMap<AmenityType, BuildingID>)

Expand description

For every house in the map, return the number of amenity types located within a 15min walkshed. A single matching business per category is enough to count as satisfied.

\ No newline at end of file diff --git a/rustdoc/fifteen_min/score_homes/struct.Results.html b/rustdoc/fifteen_min/score_homes/struct.Results.html index 959d10911a..27248a316c 100644 --- a/rustdoc/fifteen_min/score_homes/struct.Results.html +++ b/rustdoc/fifteen_min/score_homes/struct.Results.html @@ -2,10 +2,10 @@ panel: Panel, draw_houses: Drawable, amenities: Vec<AmenityType>, - amenities_reachable: MultiMap<AmenityType, BuildingID>, + amenities_reachable: MultiMap<AmenityType, BuildingID>, draw_unwalkable_roads: Drawable, hovering_on_category: HoverOnCategory, -}

Fields§

§panel: Panel§draw_houses: Drawable§amenities: Vec<AmenityType>§amenities_reachable: MultiMap<AmenityType, BuildingID>§draw_unwalkable_roads: Drawable§hovering_on_category: HoverOnCategory

Implementations§

source§

impl Results

source

fn new_state( +}

Fields§

§panel: Panel§draw_houses: Drawable§amenities: Vec<AmenityType>§amenities_reachable: MultiMap<AmenityType, BuildingID>§draw_unwalkable_roads: Drawable§hovering_on_category: HoverOnCategory

Implementations§

source§

impl Results

source

fn new_state( ctx: &mut EventCtx<'_>, app: &SimpleApp<Options>, amenities: Vec<AmenityType> diff --git a/rustdoc/fifteen_min/score_homes/struct.ScoreHomes.html b/rustdoc/fifteen_min/score_homes/struct.ScoreHomes.html index 3f81e0d407..4f5ce71f36 100644 --- a/rustdoc/fifteen_min/score_homes/struct.ScoreHomes.html +++ b/rustdoc/fifteen_min/score_homes/struct.ScoreHomes.html @@ -15,7 +15,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/app/struct.App.html b/rustdoc/game/app/struct.App.html index 184a3d9bee..b6ad673194 100644 --- a/rustdoc/game/app/struct.App.html +++ b/rustdoc/game/app/struct.App.html @@ -2,8 +2,8 @@ pub primary: PerMap, pub secondary: Option<PerMap>, pub store_unedited_map_in_secondary: bool, - pub cs: ColorScheme, - pub opts: Options, + pub cs: ColorScheme, + pub opts: Options, pub per_obj: PerObjectActions, pub session: SessionState, }
Expand description

The top-level data that lasts through the entire game, no matter what state the game is in.

@@ -12,11 +12,11 @@ switch the primary and secondary state. This is currently used to compare an edited and unedited map for Ungap the Map and as a debug mode to compare different files representing the same area.

-
§store_unedited_map_in_secondary: bool§cs: ColorScheme§opts: Options§per_obj: PerObjectActions§session: SessionState

Static data that lasts the entire session. Use sparingly.

-

Implementations§

source§

impl App

source

pub fn has_prebaked(&self) -> Option<(&MapName, &String)>

source

pub fn prebaked(&self) -> &Analytics

source

pub fn set_prebaked(&mut self, prebaked: Option<(MapName, String, Analytics)>)

source

pub fn draw( +

§store_unedited_map_in_secondary: bool§cs: ColorScheme§opts: Options§per_obj: PerObjectActions§session: SessionState

Static data that lasts the entire session. Use sparingly.

+

Implementations§

source§

impl App

source

pub fn has_prebaked(&self) -> Option<(&MapName, &String)>

source

pub fn prebaked(&self) -> &Analytics

source

pub fn set_prebaked(&mut self, prebaked: Option<(MapName, String, Analytics)>)

source

pub fn draw( &self, g: &mut GfxCtx<'_>, - opts: DrawOptions, + opts: DrawOptions, show_objs: &dyn ShowObject )

source

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

source

pub fn mouseover_unzoomed_roads_and_intersections( @@ -47,33 +47,33 @@ is in, things like IDs might totally change!

ctx: &mut EventCtx<'_>, label: S ) -> Option<IntersectionID>

If an intersection was clicked, return its ID.

-

Trait Implementations§

source§

impl AppLike for App

source§

fn map(&self) -> &Map

source§

fn cs(&self) -> &ColorScheme

source§

fn mut_cs(&mut self) -> &mut ColorScheme

source§

fn draw_map(&self) -> &DrawMap

source§

fn mut_draw_map(&mut self) -> &mut DrawMap

source§

fn opts(&self) -> &Options

source§

fn mut_opts(&mut self) -> &mut Options

source§

fn map_switched( +

Trait Implementations§

source§

impl AppLike for App

source§

fn map(&self) -> &Map

source§

fn cs(&self) -> &ColorScheme

source§

fn mut_cs(&mut self) -> &mut ColorScheme

source§

fn draw_map(&self) -> &DrawMap

source§

fn mut_draw_map(&mut self) -> &mut DrawMap

source§

fn opts(&self) -> &Options

source§

fn mut_opts(&mut self) -> &mut Options

source§

fn map_switched( &mut self, ctx: &mut EventCtx<'_>, map: Map, - timer: &mut Timer<'_> -)

source§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

source§

fn make_warper( + timer: &mut Timer<'_> +)

source§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

source§

fn make_warper( &mut self, ctx: &EventCtx<'_>, pt: Pt2D, target_cam_zoom: Option<f64>, - id: Option<ID> -) -> Box<dyn State<App>>

Create a widgetry::State that warps to the given point.
source§

fn sim_time(&self) -> Time

source§

fn current_stage_and_remaining_time( + id: Option<ID> +) -> Box<dyn State<App>>

Create a widgetry::State that warps to the given point.
source§

fn sim_time(&self) -> Time

source§

fn current_stage_and_remaining_time( &self, id: IntersectionID -) -> (usize, Duration)

source§

fn change_color_scheme( +) -> (usize, Duration)

§

fn change_color_scheme( &mut self, ctx: &mut EventCtx<'_>, - cs: ColorSchemeChoice -) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
source§

impl MinimapControls<App> for MinimapController

source§

fn has_zorder(&self, app: &App) -> bool

Should the user be able to control the z-order visible? The control is only present when -zoomed in, placed beneath the zoom column.
source§

fn has_layer(&self, app: &App) -> bool

Is there some additional layer displayed on the minimap? If this changes, the panel gets -recalculated.
source§

fn draw_extra(&self, g: &mut GfxCtx<'_>, app: &App)

Draw extra stuff on the minimap, just pulling from the app.
source§

fn make_unzoomed_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Panel

When unzoomed, display this panel. By default, no controls when unzoomed.
source§

fn make_legend(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

A row beneath the minimap in the zoomed view, usually used as a legend for things on the -minimap.
source§

fn make_zoomed_side_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

Controls to be placed to the left to the zoomed-in panel
source§

fn panel_clicked( + cs: ColorSchemeChoice +) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
source§

impl MinimapControls<App> for MinimapController

source§

fn has_zorder(&self, app: &App) -> bool

Should the user be able to control the z-order visible? The control is only present when +zoomed in, placed beneath the zoom column.
source§

fn has_layer(&self, app: &App) -> bool

Is there some additional layer displayed on the minimap? If this changes, the panel gets +recalculated.
source§

fn draw_extra(&self, g: &mut GfxCtx<'_>, app: &App)

Draw extra stuff on the minimap, just pulling from the app.
source§

fn make_unzoomed_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Panel

When unzoomed, display this panel. By default, no controls when unzoomed.
source§

fn make_legend(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

A row beneath the minimap in the zoomed view, usually used as a legend for things on the +minimap.
source§

fn make_zoomed_side_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

Controls to be placed to the left to the zoomed-in panel
source§

fn panel_clicked( &self, ctx: &mut EventCtx<'_>, app: &mut App, action: &str -) -> Option<Transition<App>>

If a button is clicked that was produced by some method in this trait, respond to it here.
source§

fn panel_changed(&self, _: &mut EventCtx<'_>, app: &mut App, panel: &Panel)

Called for Outcome::Changed on the panel.
source§

impl SharedAppState for App

source§

fn before_event(&mut self)

Before State::event is called, call this.
source§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
source§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
source§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
source§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application +) -> Option<Transition<App>>
If a button is clicked that was produced by some method in this trait, respond to it here.
source§

fn panel_changed(&self, _: &mut EventCtx<'_>, app: &mut App, panel: &Panel)

Called for Outcome::Changed on the panel.
source§

impl SharedAppState for App

source§

fn before_event(&mut self)

Before State::event is called, call this.
source§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
source§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
source§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
source§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application should make its best effort to delete any unused Drawables.
source§

impl SimpleState<App> for About

source§

fn on_click( &mut self, _: &mut EventCtx<'_>, @@ -85,7 +85,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -105,7 +105,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -136,7 +136,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn on_mouseover(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Called when the mouse has moved.
§

fn draw(&self, _: &mut GfxCtx<'_>, _: &A)

source§

impl SimpleState<App> for ChangeScenario

source§

fn on_click( &mut self, @@ -149,7 +149,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -169,7 +169,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -189,7 +189,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -209,7 +209,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -234,7 +234,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -258,7 +258,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -277,7 +277,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -297,7 +297,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -322,7 +322,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -346,7 +346,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -370,7 +370,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -394,7 +394,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -418,7 +418,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -448,7 +448,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn on_mouseover(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Called when the mouse has moved.
source§

impl State<App> for ActiveTraffic

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, _app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.
source§

impl State<App> for AgentSpawner

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving @@ -511,7 +511,7 @@ the State-specific state appropriately.
State-specific state appropriately.
source§

impl State<App> for Viewer

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.
source§

impl State<App> for Warping

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, _: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, _: &mut GfxCtx<'_>, _: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.
source§

impl State<App> for ZoneEditor

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving -the State-specific state appropriately.
source§

impl TripManagementState<App> for TripPlanner

source§

fn mut_files(&mut self) -> &mut TripManagement<App, Self>

source§

fn app_session_current_trip_name(app: &mut App) -> &mut Option<String>

source§

fn sync_from_file_management(&mut self, ctx: &mut EventCtx<'_>, app: &mut App)

Auto Trait Implementations§

§

impl !Freeze for App

§

impl !RefUnwindSafe for App

§

impl !Send for App

§

impl !Sync for App

§

impl Unpin for App

§

impl !UnwindSafe for App

Blanket Implementations§

source§

impl<T> Any for T
where +the State-specific state appropriately.

source§

impl TripManagementState<App> for TripPlanner

source§

fn mut_files(&mut self) -> &mut TripManagement<App, Self>

source§

fn app_session_current_trip_name(app: &mut App) -> &mut Option<String>

source§

fn sync_from_file_management(&mut self, ctx: &mut EventCtx<'_>, app: &mut App)

Auto Trait Implementations§

§

impl !Freeze for App

§

impl !RefUnwindSafe for App

§

impl !Send for App

§

impl !Sync for App

§

impl Unpin for App

§

impl !UnwindSafe for App

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/app/struct.FindDelayedIntersections.html b/rustdoc/game/app/struct.FindDelayedIntersections.html index 0a49ba5845..cdece0cced 100644 --- a/rustdoc/game/app/struct.FindDelayedIntersections.html +++ b/rustdoc/game/app/struct.FindDelayedIntersections.html @@ -2,7 +2,7 @@ pub halt_limit: Duration, pub report_limit: Duration, pub currently_delayed: Vec<(IntersectionID, Time)>, -}

Fields§

§halt_limit: Duration§report_limit: Duration§currently_delayed: Vec<(IntersectionID, Time)>

Trait Implementations§

source§

impl SimCallback for FindDelayedIntersections

source§

fn run(&mut self, sim: &Sim, _: &Map) -> bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§halt_limit: Duration§report_limit: Duration§currently_delayed: Vec<(IntersectionID, Time)>

Trait Implementations§

source§

impl SimCallback for FindDelayedIntersections

source§

fn run(&mut self, sim: &Sim, _: &Map) -> bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/app/struct.Flags.html b/rustdoc/game/app/struct.Flags.html index bdd00b0697..748670dd76 100644 --- a/rustdoc/game/app/struct.Flags.html +++ b/rustdoc/game/app/struct.Flags.html @@ -1,8 +1,8 @@ Flags in game::app - Rust

Struct game::app::Flags

source ·
pub struct Flags {
-    pub sim_flags: SimFlags,
+    pub sim_flags: SimFlags,
     pub live_map_edits: bool,
     pub study_area: Option<String>,
-}

Fields§

§sim_flags: SimFlags§live_map_edits: bool

If true, all map edits immediately apply to the live simulation. Otherwise, most edits +}

Fields§

§sim_flags: SimFlags§live_map_edits: bool

If true, all map edits immediately apply to the live simulation. Otherwise, most edits require resetting to midnight.

§study_area: Option<String>

Display an extra area with this name on the map. This gets applied to every map loaded, if the area is within map bounds.

diff --git a/rustdoc/game/app/struct.PerMap.html b/rustdoc/game/app/struct.PerMap.html index 918e027098..aedcd35aa1 100644 --- a/rustdoc/game/app/struct.PerMap.html +++ b/rustdoc/game/app/struct.PerMap.html @@ -1,27 +1,27 @@ PerMap in game::app - Rust

Struct game::app::PerMap

source ·
pub struct PerMap {
Show 16 fields pub map: Map, - pub draw_map: DrawMap, - pub sim: Sim, + pub draw_map: DrawMap, + pub sim: Sim, pub agents: RefCell<AgentCache>, pub current_selection: Option<ID>, pub current_flags: Flags, pub last_warped_from: Option<(Pt2D, f64)>, - pub sim_cb: Option<Box<dyn SimCallback>>, + pub sim_cb: Option<Box<dyn SimCallback>>, pub dirty_from_edits: bool, pub has_modified_trips: bool, pub unedited_map: Option<Map>, pub layer: Option<Box<dyn Layer>>, - pub suspended_sim: Option<Sim>, - prebaked: Option<(MapName, String, Analytics)>, + pub suspended_sim: Option<Sim>, + prebaked: Option<(MapName, String, Analytics)>, pub scenario: Option<Scenario>, pub is_secondary: bool,
}
Expand description

All of the state that’s bound to a specific map.

-

Fields§

§map: Map§draw_map: DrawMap§sim: Sim§agents: RefCell<AgentCache>§current_selection: Option<ID>§current_flags: Flags§last_warped_from: Option<(Pt2D, f64)>§sim_cb: Option<Box<dyn SimCallback>>§dirty_from_edits: bool

If we ever left edit mode and resumed without restarting from midnight, this is true.

+

Fields§

§map: Map§draw_map: DrawMap§sim: Sim§agents: RefCell<AgentCache>§current_selection: Option<ID>§current_flags: Flags§last_warped_from: Option<(Pt2D, f64)>§sim_cb: Option<Box<dyn SimCallback>>§dirty_from_edits: bool

If we ever left edit mode and resumed without restarting from midnight, this is true.

§has_modified_trips: bool

Any ScenarioModifiers in effect?

§unedited_map: Option<Map>

If the map has been edited and app.store_unedited_map_in_secondary is false, store the unedited map here.

-
§layer: Option<Box<dyn Layer>>§suspended_sim: Option<Sim>

Only filled out in edit mode. Stored here once to avoid lots of clones. Used for preview.

-
§prebaked: Option<(MapName, String, Analytics)>

Only exists in some gameplay modes. Must be carefully reset otherwise. Has the map and +

§layer: Option<Box<dyn Layer>>§suspended_sim: Option<Sim>

Only filled out in edit mode. Stored here once to avoid lots of clones. Used for preview.

+
§prebaked: Option<(MapName, String, Analytics)>

Only exists in some gameplay modes. Must be carefully reset otherwise. Has the map and scenario name too.

§scenario: Option<Scenario>

The most recent Scenario loaded from a file. Don’t depend on it always matching the current gameplay mode; always verify the name matches what’s needed.

@@ -30,18 +30,18 @@ loading it again from a file. This is particularly painful on the web!

§is_secondary: bool

Is this the original “secondary” state, loaded via –diff?

Implementations§

source§

impl PerMap

source

pub fn map_loaded( map: Map, - sim: Sim, + sim: Sim, flags: Flags, - opts: &Options, - cs: &ColorScheme, + opts: &Options, + cs: &ColorScheme, ctx: &mut EventCtx<'_>, - timer: &mut Timer<'_> -) -> PerMap

source

pub fn init_camera_for_loaded_map(&mut self, ctx: &mut EventCtx<'_>)

source

pub fn clear_sim(&mut self) -> Sim

Returns whatever was there

+ timer: &mut Timer<'_> +) -> PerMap

source

pub fn init_camera_for_loaded_map(&mut self, ctx: &mut EventCtx<'_>)

source

pub fn clear_sim(&mut self) -> Sim

Returns whatever was there

source

pub fn canonical_point(&self, id: ID) -> Option<Pt2D>

source

pub fn get_obj_outline( &self, ctx: &EventCtx<'_>, id: ID, - cs: &ColorScheme, + cs: &ColorScheme, map: &Map, agents: &mut AgentCache ) -> Option<Tessellation>

Auto Trait Implementations§

§

impl !Freeze for PerMap

§

impl !RefUnwindSafe for PerMap

§

impl !Send for PerMap

§

impl !Sync for PerMap

§

impl Unpin for PerMap

§

impl !UnwindSafe for PerMap

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/game/challenges/struct.ChallengesPicker.html b/rustdoc/game/challenges/struct.ChallengesPicker.html index 9b3133eba5..c64b9ad656 100644 --- a/rustdoc/game/challenges/struct.ChallengesPicker.html +++ b/rustdoc/game/challenges/struct.ChallengesPicker.html @@ -16,7 +16,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/common/fn.color_for_agent_type.html b/rustdoc/game/common/fn.color_for_agent_type.html index f59d0ce3c8..4f5cfa238c 100644 --- a/rustdoc/game/common/fn.color_for_agent_type.html +++ b/rustdoc/game/common/fn.color_for_agent_type.html @@ -1 +1 @@ -color_for_agent_type in game::common - Rust

Function game::common::color_for_agent_type

source ·
pub fn color_for_agent_type(app: &App, a: AgentType) -> Color
\ No newline at end of file +color_for_agent_type in game::common - Rust

Function game::common::color_for_agent_type

source ·
pub fn color_for_agent_type(app: &App, a: AgentType) -> Color
\ No newline at end of file diff --git a/rustdoc/game/common/fn.color_for_trip_phase.html b/rustdoc/game/common/fn.color_for_trip_phase.html index d2937b0891..862089d00a 100644 --- a/rustdoc/game/common/fn.color_for_trip_phase.html +++ b/rustdoc/game/common/fn.color_for_trip_phase.html @@ -1 +1 @@ -color_for_trip_phase in game::common - Rust

Function game::common::color_for_trip_phase

source ·
pub fn color_for_trip_phase(app: &App, tpt: TripPhaseType) -> Color
\ No newline at end of file +color_for_trip_phase in game::common - Rust

Function game::common::color_for_trip_phase

source ·
pub fn color_for_trip_phase(app: &App, tpt: TripPhaseType) -> Color
\ No newline at end of file diff --git a/rustdoc/game/common/share/struct.ShareProposal.html b/rustdoc/game/common/share/struct.ShareProposal.html index efb88d0805..b33960191d 100644 --- a/rustdoc/game/common/share/struct.ShareProposal.html +++ b/rustdoc/game/common/share/struct.ShareProposal.html @@ -18,7 +18,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/debug/blocked_by/struct.Viewer.html b/rustdoc/game/debug/blocked_by/struct.Viewer.html index 321f28106d..cbb5410f9f 100644 --- a/rustdoc/game/debug/blocked_by/struct.Viewer.html +++ b/rustdoc/game/debug/blocked_by/struct.Viewer.html @@ -1,11 +1,11 @@ Viewer in game::debug::blocked_by - Rust

Struct game::debug::blocked_by::Viewer

source ·
pub struct Viewer {
     panel: Panel,
-    graph: BTreeMap<AgentID, (Duration, DelayCause)>,
-    agent_positions: BTreeMap<AgentID, Pt2D>,
+    graph: BTreeMap<AgentID, (Duration, DelayCause)>,
+    agent_positions: BTreeMap<AgentID, Pt2D>,
     arrows: Drawable,
-    root_cause: Cached<AgentID, (Drawable, Text)>,
+    root_cause: Cached<AgentID, (Drawable, Text)>,
 }
Expand description

Visualize the graph of what agents are blocked by others.

-

Fields§

§panel: Panel§graph: BTreeMap<AgentID, (Duration, DelayCause)>§agent_positions: BTreeMap<AgentID, Pt2D>§arrows: Drawable§root_cause: Cached<AgentID, (Drawable, Text)>

Implementations§

source§

impl Viewer

source

pub fn new_state(ctx: &mut EventCtx<'_>, app: &App) -> Box<dyn State<App>>

source

fn arrow_for(&self, app: &App, id: AgentID) -> Option<(Polygon, Color)>

source

fn trace_root_cause(&self, app: &App, start: AgentID) -> (GeomBatch, String)

Figure out why some agent is blocked. Draws an arrow for each hop in the dependency chain, +

Fields§

§panel: Panel§graph: BTreeMap<AgentID, (Duration, DelayCause)>§agent_positions: BTreeMap<AgentID, Pt2D>§arrows: Drawable§root_cause: Cached<AgentID, (Drawable, Text)>

Implementations§

source§

impl Viewer

source

pub fn new_state(ctx: &mut EventCtx<'_>, app: &App) -> Box<dyn State<App>>

source

fn arrow_for(&self, app: &App, id: AgentID) -> Option<(Polygon, Color)>

source

fn trace_root_cause(&self, app: &App, start: AgentID) -> (GeomBatch, String)

Figure out why some agent is blocked. Draws an arrow for each hop in the dependency chain, and gives a description of the root cause.

source

fn find_worst_problems( &self, @@ -13,7 +13,7 @@ and gives a description of the root cause.

app: &App ) -> (GeomBatch, Widget)

Trace the root cause for everyone, find the most common sources, highlight them, and describe them.

-
source

fn simple_root_cause(&self, start: AgentID) -> DelayCause

Trait Implementations§

source§

impl State<App> for Viewer

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving +
source

fn simple_root_cause(&self, start: AgentID) -> DelayCause

Trait Implementations§

source§

impl State<App> for Viewer

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.

Auto Trait Implementations§

§

impl Freeze for Viewer

§

impl !RefUnwindSafe for Viewer

§

impl !Send for Viewer

§

impl !Sync for Viewer

§

impl Unpin for Viewer

§

impl !UnwindSafe for Viewer

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/game/debug/blockfinder/struct.Blockfinder.html b/rustdoc/game/debug/blockfinder/struct.Blockfinder.html index e5f5a57db8..ee0ba7d726 100644 --- a/rustdoc/game/debug/blockfinder/struct.Blockfinder.html +++ b/rustdoc/game/debug/blockfinder/struct.Blockfinder.html @@ -17,7 +17,7 @@ ctx: &mut EventCtx<'_>, app: &App, perimeters: Vec<Perimeter>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

Trait Implementations§

source§

impl State<App> for Blockfinder

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/debug/blockfinder/struct.OneBlock.html b/rustdoc/game/debug/blockfinder/struct.OneBlock.html index 688e32750c..90af69bc73 100644 --- a/rustdoc/game/debug/blockfinder/struct.OneBlock.html +++ b/rustdoc/game/debug/blockfinder/struct.OneBlock.html @@ -21,7 +21,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/debug/fn.diff_tags.html b/rustdoc/game/debug/fn.diff_tags.html index 284bfe5c6a..4d1190bc69 100644 --- a/rustdoc/game/debug/fn.diff_tags.html +++ b/rustdoc/game/debug/fn.diff_tags.html @@ -1 +1 @@ -diff_tags in game::debug - Rust

Function game::debug::diff_tags

source ·
fn diff_tags(t1: &Tags, t2: &Tags)
\ No newline at end of file +diff_tags in game::debug - Rust

Function game::debug::diff_tags

source ·
fn diff_tags(t1: &Tags, t2: &Tags)
\ No newline at end of file diff --git a/rustdoc/game/debug/objects/struct.ObjectDebugger.html b/rustdoc/game/debug/objects/struct.ObjectDebugger.html index 5b53c95e58..6871f3cfd3 100644 --- a/rustdoc/game/debug/objects/struct.ObjectDebugger.html +++ b/rustdoc/game/debug/objects/struct.ObjectDebugger.html @@ -1,4 +1,4 @@ -ObjectDebugger in game::debug::objects - Rust

Struct game::debug::objects::ObjectDebugger

source ·
pub struct ObjectDebugger;

Implementations§

source§

impl ObjectDebugger

source

pub fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

source

pub fn dump_debug(id: ID, map: &Map, sim: &Sim)

source

pub fn debug_json(id: ID, map: &Map, sim: &Sim)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +ObjectDebugger in game::debug::objects - Rust

Struct game::debug::objects::ObjectDebugger

source ·
pub struct ObjectDebugger;

Implementations§

source§

impl ObjectDebugger

source

pub fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

source

pub fn dump_debug(id: ID, map: &Map, sim: &Sim)

source

pub fn debug_json(id: ID, map: &Map, sim: &Sim)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/debug/path_counter/struct.PathCounter.html b/rustdoc/game/debug/path_counter/struct.PathCounter.html index 90a9569a6d..c282c0e72b 100644 --- a/rustdoc/game/debug/path_counter/struct.PathCounter.html +++ b/rustdoc/game/debug/path_counter/struct.PathCounter.html @@ -1,10 +1,10 @@ PathCounter in game::debug::path_counter - Rust

Struct game::debug::path_counter::PathCounter

source ·
pub struct PathCounter {
     panel: Panel,
     draw: ToggleZoomed,
-    cnt: Counter<RoadID>,
+    cnt: Counter<RoadID>,
     tooltip: Option<Text>,
 }
Expand description

A state to count the number of trips that will cross different roads.

-

Fields§

§panel: Panel§draw: ToggleZoomed§cnt: Counter<RoadID>§tooltip: Option<Text>

Implementations§

source§

impl PathCounter

Fields§

§panel: Panel§draw: ToggleZoomed§cnt: Counter<RoadID>§tooltip: Option<Text>

Implementations§

source§

impl PathCounter

source

pub fn demand_across_intersection( ctx: &mut EventCtx<'_>, app: &App, i: IntersectionID diff --git a/rustdoc/game/debug/routes/fn.calculate_demand.html b/rustdoc/game/debug/routes/fn.calculate_demand.html index 979a63610d..0e1d399e19 100644 --- a/rustdoc/game/debug/routes/fn.calculate_demand.html +++ b/rustdoc/game/debug/routes/fn.calculate_demand.html @@ -2,5 +2,5 @@ app: &App, pathfinder: &Pathfinder, requests: &[PathRequest], - timer: &mut Timer<'_> -) -> Counter<RoadID>

\ No newline at end of file + timer: &mut Timer<'_> +) -> Counter<RoadID>

\ No newline at end of file diff --git a/rustdoc/game/debug/routes/struct.AllRoutesExplorer.html b/rustdoc/game/debug/routes/struct.AllRoutesExplorer.html index 6b8a0fff48..72a42c6949 100644 --- a/rustdoc/game/debug/routes/struct.AllRoutesExplorer.html +++ b/rustdoc/game/debug/routes/struct.AllRoutesExplorer.html @@ -1,12 +1,12 @@ AllRoutesExplorer in game::debug::routes - Rust

Struct game::debug::routes::AllRoutesExplorer

source ·
struct AllRoutesExplorer {
     panel: Panel,
     requests: Vec<PathRequest>,
-    baseline_counts: Counter<RoadID>,
-    current_counts: Counter<RoadID>,
+    baseline_counts: Counter<RoadID>,
+    current_counts: Counter<RoadID>,
     draw: ToggleZoomed,
     tooltip: Option<Text>,
 }
Expand description

See how live-tuned routing parameters affect all requests for the current scenario.

-

Fields§

§panel: Panel§requests: Vec<PathRequest>§baseline_counts: Counter<RoadID>§current_counts: Counter<RoadID>§draw: ToggleZoomed§tooltip: Option<Text>

Implementations§

source§

impl AllRoutesExplorer

source

fn new_state(ctx: &mut EventCtx<'_>, app: &mut App) -> Box<dyn State<App>>

Trait Implementations§

source§

impl State<App> for AllRoutesExplorer

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving +

Fields§

§panel: Panel§requests: Vec<PathRequest>§baseline_counts: Counter<RoadID>§current_counts: Counter<RoadID>§draw: ToggleZoomed§tooltip: Option<Text>

Implementations§

source§

impl AllRoutesExplorer

source

fn new_state(ctx: &mut EventCtx<'_>, app: &mut App) -> Box<dyn State<App>>

Trait Implementations§

source§

impl State<App> for AllRoutesExplorer

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/game/debug/uber_turns/struct.UberTurnPicker.html b/rustdoc/game/debug/uber_turns/struct.UberTurnPicker.html index 8d8ae869ce..3ef468c87f 100644 --- a/rustdoc/game/debug/uber_turns/struct.UberTurnPicker.html +++ b/rustdoc/game/debug/uber_turns/struct.UberTurnPicker.html @@ -20,7 +20,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/debug/uber_turns/struct.UberTurnViewer.html b/rustdoc/game/debug/uber_turns/struct.UberTurnViewer.html index ee0188d62d..16a46c4f58 100644 --- a/rustdoc/game/debug/uber_turns/struct.UberTurnViewer.html +++ b/rustdoc/game/debug/uber_turns/struct.UberTurnViewer.html @@ -31,7 +31,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn on_mouseover(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Called when the mouse has moved.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/devtools/compare_counts/struct.GenericCompareCounts.html b/rustdoc/game/devtools/compare_counts/struct.GenericCompareCounts.html index a19abfcd85..12c9e40618 100644 --- a/rustdoc/game/devtools/compare_counts/struct.GenericCompareCounts.html +++ b/rustdoc/game/devtools/compare_counts/struct.GenericCompareCounts.html @@ -1,6 +1,6 @@ GenericCompareCounts in game::devtools::compare_counts - Rust

Struct game::devtools::compare_counts::GenericCompareCounts

source ·
pub struct GenericCompareCounts {
-    compare: CompareCounts,
-}

Fields§

§compare: CompareCounts

Implementations§

source§

impl GenericCompareCounts

source

pub fn new_state( + compare: CompareCounts, +}

Fields§

§compare: CompareCounts

Implementations§

source§

impl GenericCompareCounts

source

pub fn new_state( ctx: &mut EventCtx<'_>, app: &mut App, path1: String, @@ -21,7 +21,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/devtools/destinations/struct.PopularDestinations.html b/rustdoc/game/devtools/destinations/struct.PopularDestinations.html index 1f027df897..3e0a553d1e 100644 --- a/rustdoc/game/devtools/destinations/struct.PopularDestinations.html +++ b/rustdoc/game/devtools/destinations/struct.PopularDestinations.html @@ -1,16 +1,16 @@ PopularDestinations in game::devtools::destinations - Rust

Struct game::devtools::destinations::PopularDestinations

source ·
pub struct PopularDestinations {
-    per_bldg: Counter<BuildingID>,
+    per_bldg: Counter<BuildingID>,
     panel: Panel,
     draw: Drawable,
-}

Fields§

§per_bldg: Counter<BuildingID>§panel: Panel§draw: Drawable

Implementations§

source§

impl PopularDestinations

source

pub fn new_state( +}

Fields§

§per_bldg: Counter<BuildingID>§panel: Panel§draw: Drawable

Implementations§

source§

impl PopularDestinations

source

pub fn new_state( ctx: &mut EventCtx<'_>, app: &App, scenario: &Scenario ) -> Box<dyn State<App>>

source

fn make( ctx: &mut EventCtx<'_>, app: &App, - per_bldg: Counter<BuildingID>, - opts: Option<HeatmapOptions> + per_bldg: Counter<BuildingID>, + opts: Option<HeatmapOptions> ) -> Box<dyn State<App>>

Trait Implementations§

source§

impl State<App> for PopularDestinations

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/devtools/kml/fn.load_objects.html b/rustdoc/game/devtools/kml/fn.load_objects.html index 4a68dce619..7178819d53 100644 --- a/rustdoc/game/devtools/kml/fn.load_objects.html +++ b/rustdoc/game/devtools/kml/fn.load_objects.html @@ -2,6 +2,6 @@ app: &App, file: Option<(String, Vec<u8>)>, dump_clipped_shapes: bool, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (String, Vec<Object>)
Expand description

Loads and clips objects to the current map. Also returns the dataset name.

\ No newline at end of file diff --git a/rustdoc/game/devtools/kml/fn.make_object.html b/rustdoc/game/devtools/kml/fn.make_object.html index bec6824329..d880ec0bb6 100644 --- a/rustdoc/game/devtools/kml/fn.make_object.html +++ b/rustdoc/game/devtools/kml/fn.make_object.html @@ -1,5 +1,5 @@ make_object in game::devtools::kml - Rust

Function game::devtools::kml::make_object

source ·
fn make_object(
-    cs: &ColorScheme,
+    cs: &ColorScheme,
     bldg_lookup: &HashMap<String, BuildingID>,
     attribs: BTreeMap<String, String>,
     pts: Vec<Pt2D>,
diff --git a/rustdoc/game/devtools/polygon/struct.PolygonEditor.html b/rustdoc/game/devtools/polygon/struct.PolygonEditor.html
index 534176555d..9731eb3b7a 100644
--- a/rustdoc/game/devtools/polygon/struct.PolygonEditor.html
+++ b/rustdoc/game/devtools/polygon/struct.PolygonEditor.html
@@ -1,8 +1,8 @@
 PolygonEditor in game::devtools::polygon - Rust

Struct game::devtools::polygon::PolygonEditor

source ·
pub struct PolygonEditor {
     panel: Panel,
     name: String,
-    edit: EditPolygon,
-}

Fields§

§panel: Panel§name: String§edit: EditPolygon

Implementations§

source§

impl PolygonEditor

source

pub fn new_state( + edit: EditPolygon, +}

Fields§

§panel: Panel§name: String§edit: EditPolygon

Implementations§

source§

impl PolygonEditor

source

pub fn new_state( ctx: &mut EventCtx<'_>, app: &App, name: String, diff --git a/rustdoc/game/devtools/story/struct.EditingMarker.html b/rustdoc/game/devtools/story/struct.EditingMarker.html index a2acbaca56..697ff3c497 100644 --- a/rustdoc/game/devtools/story/struct.EditingMarker.html +++ b/rustdoc/game/devtools/story/struct.EditingMarker.html @@ -15,7 +15,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/devtools/struct.DevToolsMode.html b/rustdoc/game/devtools/struct.DevToolsMode.html index 93ddb1c1bb..d316e40d53 100644 --- a/rustdoc/game/devtools/struct.DevToolsMode.html +++ b/rustdoc/game/devtools/struct.DevToolsMode.html @@ -9,7 +9,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/edit/stop_signs/struct.StopSignEditor.html b/rustdoc/game/edit/stop_signs/struct.StopSignEditor.html index 2305172cfa..ce1aee0909 100644 --- a/rustdoc/game/edit/stop_signs/struct.StopSignEditor.html +++ b/rustdoc/game/edit/stop_signs/struct.StopSignEditor.html @@ -24,7 +24,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/edit/traffic_signals/edits/struct.ChangeDuration.html b/rustdoc/game/edit/traffic_signals/edits/struct.ChangeDuration.html index d78dd78ab8..af15703f5a 100644 --- a/rustdoc/game/edit/traffic_signals/edits/struct.ChangeDuration.html +++ b/rustdoc/game/edit/traffic_signals/edits/struct.ChangeDuration.html @@ -27,7 +27,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn on_mouseover(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Called when the mouse has moved.
§

fn draw(&self, _: &mut GfxCtx<'_>, _: &A)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/edit/traffic_signals/offsets/struct.ShowAbsolute.html b/rustdoc/game/edit/traffic_signals/offsets/struct.ShowAbsolute.html index 2a753e42e3..a65b02e9ac 100644 --- a/rustdoc/game/edit/traffic_signals/offsets/struct.ShowAbsolute.html +++ b/rustdoc/game/edit/traffic_signals/offsets/struct.ShowAbsolute.html @@ -21,7 +21,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/edit/traffic_signals/offsets/struct.ShowRelative.html b/rustdoc/game/edit/traffic_signals/offsets/struct.ShowRelative.html index 386f4e57dc..8d0ddb4c42 100644 --- a/rustdoc/game/edit/traffic_signals/offsets/struct.ShowRelative.html +++ b/rustdoc/game/edit/traffic_signals/offsets/struct.ShowRelative.html @@ -23,7 +23,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/edit/traffic_signals/offsets/struct.TuneRelative.html b/rustdoc/game/edit/traffic_signals/offsets/struct.TuneRelative.html index 392d2d01f0..4f3a86f5b8 100644 --- a/rustdoc/game/edit/traffic_signals/offsets/struct.TuneRelative.html +++ b/rustdoc/game/edit/traffic_signals/offsets/struct.TuneRelative.html @@ -25,7 +25,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>
Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/edit/traffic_signals/struct.TrafficSignalEditor.html b/rustdoc/game/edit/traffic_signals/struct.TrafficSignalEditor.html index 40c316e2a8..c1008699c0 100644 --- a/rustdoc/game/edit/traffic_signals/struct.TrafficSignalEditor.html +++ b/rustdoc/game/edit/traffic_signals/struct.TrafficSignalEditor.html @@ -4,7 +4,7 @@ mode: GameplayMode, members: BTreeSet<IntersectionID>, current_stage: usize, - movements: Vec<DrawMovement>, + movements: Vec<DrawMovement>, movement_selected: Option<(MovementID, Option<TurnPriority>)>, draw_current: Drawable, tooltip: Option<Text>, @@ -13,7 +13,7 @@ original: BundleEdits, warn_changed: bool, fade_irrelevant: Drawable, -

}

Fields§

§side_panel: Panel§top_panel: Panel§mode: GameplayMode§members: BTreeSet<IntersectionID>§current_stage: usize§movements: Vec<DrawMovement>§movement_selected: Option<(MovementID, Option<TurnPriority>)>§draw_current: Drawable§tooltip: Option<Text>§command_stack: Vec<BundleEdits>§redo_stack: Vec<BundleEdits>§original: BundleEdits§warn_changed: bool§fade_irrelevant: Drawable

Implementations§

source§

impl TrafficSignalEditor

source

pub fn new_state( +

}

Fields§

§side_panel: Panel§top_panel: Panel§mode: GameplayMode§members: BTreeSet<IntersectionID>§current_stage: usize§movements: Vec<DrawMovement>§movement_selected: Option<(MovementID, Option<TurnPriority>)>§draw_current: Drawable§tooltip: Option<Text>§command_stack: Vec<BundleEdits>§redo_stack: Vec<BundleEdits>§original: BundleEdits§warn_changed: bool§fade_irrelevant: Drawable

Implementations§

source§

impl TrafficSignalEditor

source

pub fn new_state( ctx: &mut EventCtx<'_>, app: &mut App, members: BTreeSet<IntersectionID>, diff --git a/rustdoc/game/fn.finish_app_setup.html b/rustdoc/game/fn.finish_app_setup.html index a499b41888..011f977fb1 100644 --- a/rustdoc/game/fn.finish_app_setup.html +++ b/rustdoc/game/fn.finish_app_setup.html @@ -2,7 +2,7 @@ ctx: &mut EventCtx<'_>, app: &mut App, title: bool, - savestate: Option<Sim>, + savestate: Option<Sim>, edits: Option<MapEdits>, setup: Setup ) -> Vec<Box<dyn State<App>>>

\ No newline at end of file diff --git a/rustdoc/game/id/enum.ID.html b/rustdoc/game/id/enum.ID.html index 2df01745b9..955f7452c3 100644 --- a/rustdoc/game/id/enum.ID.html +++ b/rustdoc/game/id/enum.ID.html @@ -4,12 +4,12 @@ Intersection(IntersectionID), Building(BuildingID), ParkingLot(ParkingLotID), - Car(CarID), - Pedestrian(PedestrianID), - PedCrowd(Vec<PedestrianID>), + Car(CarID), + Pedestrian(PedestrianID), + PedCrowd(Vec<PedestrianID>), TransitStop(TransitStopID), Area(AreaID), -}

Variants§

§

Road(RoadID)

§

Lane(LaneID)

§

Intersection(IntersectionID)

§

Building(BuildingID)

§

ParkingLot(ParkingLotID)

§

Car(CarID)

§

Pedestrian(PedestrianID)

§

PedCrowd(Vec<PedestrianID>)

§

TransitStop(TransitStopID)

§

Area(AreaID)

Implementations§

source§

impl ID

source

pub fn from_agent(id: AgentID) -> ID

source

pub fn agent_id(&self) -> Option<AgentID>

source

pub fn as_intersection(&self) -> IntersectionID

source

pub fn to_map_gui(self) -> ID

Trait Implementations§

source§

impl Clone for ID

source§

fn clone(&self) -> ID

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ID> for ID

source§

fn from(id: ID) -> Self

Converts to this type from the input type.
source§

impl Hash for ID

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Variants§

§

Road(RoadID)

§

Lane(LaneID)

§

Intersection(IntersectionID)

§

Building(BuildingID)

§

ParkingLot(ParkingLotID)

§

Car(CarID)

§

Pedestrian(PedestrianID)

§

PedCrowd(Vec<PedestrianID>)

§

TransitStop(TransitStopID)

§

Area(AreaID)

Implementations§

source§

impl ID

source

pub fn from_agent(id: AgentID) -> ID

source

pub fn agent_id(&self) -> Option<AgentID>

source

pub fn as_intersection(&self) -> IntersectionID

source

pub fn to_map_gui(self) -> ID

Trait Implementations§

source§

impl Clone for ID

source§

fn clone(&self) -> ID

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ID> for ID

source§

fn from(id: ID) -> Self

Converts to this type from the input type.
source§

impl Hash for ID

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for ID

source§

fn cmp(&self, other: &ID) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/rustdoc/game/info/building/fn.draw_occupants.html b/rustdoc/game/info/building/fn.draw_occupants.html index 0510110ab9..5299d982fc 100644 --- a/rustdoc/game/info/building/fn.draw_occupants.html +++ b/rustdoc/game/info/building/fn.draw_occupants.html @@ -2,5 +2,5 @@ details: &mut Details, app: &App, id: BuildingID, - focus: Option<PersonID> + focus: Option<PersonID> )

\ No newline at end of file diff --git a/rustdoc/game/info/enum.Tab.html b/rustdoc/game/info/enum.Tab.html index d543b8fe0f..66bdb8581d 100644 --- a/rustdoc/game/info/enum.Tab.html +++ b/rustdoc/game/info/enum.Tab.html @@ -1,15 +1,15 @@ Tab in game::info - Rust

Enum game::info::Tab

source ·
pub enum Tab {
-
Show 23 variants PersonTrips(PersonID, BTreeMap<TripID, OpenTrip>), - PersonBio(PersonID), - PersonSchedule(PersonID), - TransitVehicleStatus(CarID), +
Show 23 variants PersonTrips(PersonID, BTreeMap<TripID, OpenTrip>), + PersonBio(PersonID), + PersonSchedule(PersonID), + TransitVehicleStatus(CarID), TransitStop(TransitStopID), TransitRoute(TransitRouteID), - ParkedCar(CarID), + ParkedCar(CarID), BldgInfo(BuildingID), BldgPeople(BuildingID), ParkingLot(ParkingLotID), - Crowd(Vec<PedestrianID>), + Crowd(Vec<PedestrianID>), Area(AreaID), IntersectionInfo(IntersectionID), IntersectionTraffic(IntersectionID, DataOptions), @@ -22,7 +22,7 @@ LaneDebug(LaneID), LaneTraffic(LaneID, DataOptions), LaneProblems(LaneID, ProblemOptions), -
}

Variants§

§

PersonTrips(PersonID, BTreeMap<TripID, OpenTrip>)

§

PersonBio(PersonID)

§

PersonSchedule(PersonID)

§

TransitVehicleStatus(CarID)

§

TransitStop(TransitStopID)

§

TransitRoute(TransitRouteID)

§

ParkedCar(CarID)

§

BldgInfo(BuildingID)

§

BldgPeople(BuildingID)

§

ParkingLot(ParkingLotID)

§

Crowd(Vec<PedestrianID>)

§

Area(AreaID)

§

IntersectionInfo(IntersectionID)

§

IntersectionTraffic(IntersectionID, DataOptions)

§

IntersectionDelay(IntersectionID, DataOptions, bool)

§

IntersectionDemand(IntersectionID)

§

IntersectionArrivals(IntersectionID, DataOptions)

§

IntersectionTrafficSignal(IntersectionID)

§

IntersectionProblems(IntersectionID, ProblemOptions)

§

LaneInfo(LaneID)

§

LaneDebug(LaneID)

§

LaneTraffic(LaneID, DataOptions)

§

LaneProblems(LaneID, ProblemOptions)

Implementations§

source§

impl Tab

source

pub fn from_id(app: &App, id: ID) -> Tab

source

fn to_id(&self, app: &App) -> Option<ID>

source

fn changed_settings(&self, c: &Panel) -> Option<Tab>

source

fn variant(&self) -> (&'static str, &'static str)

Trait Implementations§

source§

impl Clone for Tab

source§

fn clone(&self) -> Tab

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Tab

§

impl RefUnwindSafe for Tab

§

impl Send for Tab

§

impl Sync for Tab

§

impl Unpin for Tab

§

impl UnwindSafe for Tab

Blanket Implementations§

source§

impl<T> Any for T
where +

}

Variants§

§

PersonTrips(PersonID, BTreeMap<TripID, OpenTrip>)

§

PersonBio(PersonID)

§

PersonSchedule(PersonID)

§

TransitVehicleStatus(CarID)

§

TransitStop(TransitStopID)

§

TransitRoute(TransitRouteID)

§

ParkedCar(CarID)

§

BldgInfo(BuildingID)

§

BldgPeople(BuildingID)

§

ParkingLot(ParkingLotID)

§

Crowd(Vec<PedestrianID>)

§

Area(AreaID)

§

IntersectionInfo(IntersectionID)

§

IntersectionTraffic(IntersectionID, DataOptions)

§

IntersectionDelay(IntersectionID, DataOptions, bool)

§

IntersectionDemand(IntersectionID)

§

IntersectionArrivals(IntersectionID, DataOptions)

§

IntersectionTrafficSignal(IntersectionID)

§

IntersectionProblems(IntersectionID, ProblemOptions)

§

LaneInfo(LaneID)

§

LaneDebug(LaneID)

§

LaneTraffic(LaneID, DataOptions)

§

LaneProblems(LaneID, ProblemOptions)

Implementations§

source§

impl Tab

source

pub fn from_id(app: &App, id: ID) -> Tab

source

fn to_id(&self, app: &App) -> Option<ID>

source

fn changed_settings(&self, c: &Panel) -> Option<Tab>

source

fn variant(&self) -> (&'static str, &'static str)

Trait Implementations§

source§

impl Clone for Tab

source§

fn clone(&self) -> Tab

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Tab

§

impl RefUnwindSafe for Tab

§

impl Send for Tab

§

impl Sync for Tab

§

impl Unpin for Tab

§

impl UnwindSafe for Tab

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/info/fn.color_for_problem_type.html b/rustdoc/game/info/fn.color_for_problem_type.html index d906c87f20..706125afef 100644 --- a/rustdoc/game/info/fn.color_for_problem_type.html +++ b/rustdoc/game/info/fn.color_for_problem_type.html @@ -1 +1 @@ -color_for_problem_type in game::info - Rust

Function game::info::color_for_problem_type

source ·
fn color_for_problem_type(app: &App, problem_type: ProblemType) -> Color
\ No newline at end of file +color_for_problem_type in game::info - Rust

Function game::info::color_for_problem_type

source ·
fn color_for_problem_type(app: &App, problem_type: ProblemType) -> Color
\ No newline at end of file diff --git a/rustdoc/game/info/fn.do_time_warp.html b/rustdoc/game/info/fn.do_time_warp.html index 8c4157abf6..d6dc29be59 100644 --- a/rustdoc/game/info/fn.do_time_warp.html +++ b/rustdoc/game/info/fn.do_time_warp.html @@ -1,6 +1,6 @@ do_time_warp in game::info - Rust

Function game::info::do_time_warp

source ·
fn do_time_warp(
     ctx_actions: &mut dyn ContextualActions,
     app: &mut App,
-    trip: TripID,
+    trip: TripID,
     time: Time
 ) -> (bool, Option<Transition<App>>)
\ No newline at end of file diff --git a/rustdoc/game/info/fn.problem_count.html b/rustdoc/game/info/fn.problem_count.html index 6e2504ab36..b8fa85264e 100644 --- a/rustdoc/game/info/fn.problem_count.html +++ b/rustdoc/game/info/fn.problem_count.html @@ -1,4 +1,4 @@ -problem_count in game::info - Rust

Function game::info::problem_count

source ·
fn problem_count<F: Fn(&Analytics) -> Vec<(ProblemType, Vec<(Time, usize)>)>>(
+problem_count in game::info - Rust

Function game::info::problem_count

source ·
fn problem_count<F: Fn(&Analytics) -> Vec<(ProblemType, Vec<(Time, usize)>)>>(
     ctx: &EventCtx<'_>,
     app: &App,
     title: &str,
diff --git a/rustdoc/game/info/fn.throughput.html b/rustdoc/game/info/fn.throughput.html
index cd76aee55d..11828298b9 100644
--- a/rustdoc/game/info/fn.throughput.html
+++ b/rustdoc/game/info/fn.throughput.html
@@ -1,4 +1,4 @@
-throughput in game::info - Rust

Function game::info::throughput

source ·
fn throughput<F: Fn(&Analytics) -> Vec<(AgentType, Vec<(Time, usize)>)>>(
+throughput in game::info - Rust

Function game::info::throughput

source ·
fn throughput<F: Fn(&Analytics) -> Vec<(AgentType, Vec<(Time, usize)>)>>(
     ctx: &EventCtx<'_>,
     app: &App,
     title: &str,
diff --git a/rustdoc/game/info/person/fn.bio.html b/rustdoc/game/info/person/fn.bio.html
index 83f632a8bc..b2aa8f9c83 100644
--- a/rustdoc/game/info/person/fn.bio.html
+++ b/rustdoc/game/info/person/fn.bio.html
@@ -2,6 +2,6 @@
     ctx: &mut EventCtx<'_>,
     app: &App,
     details: &mut Details,
-    id: PersonID,
+    id: PersonID,
     is_paused: bool
 ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.bio_body.html b/rustdoc/game/info/person/fn.bio_body.html index c0a3bd9afb..cb4c0dedd6 100644 --- a/rustdoc/game/info/person/fn.bio_body.html +++ b/rustdoc/game/info/person/fn.bio_body.html @@ -2,5 +2,5 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: PersonID + id: PersonID ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.crowd.html b/rustdoc/game/info/person/fn.crowd.html index 325a3fa947..696e1d4389 100644 --- a/rustdoc/game/info/person/fn.crowd.html +++ b/rustdoc/game/info/person/fn.crowd.html @@ -2,5 +2,5 @@ ctx: &EventCtx<'_>, app: &App, details: &mut Details, - members: &[PedestrianID] + members: &[PedestrianID] ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.crowd_body.html b/rustdoc/game/info/person/fn.crowd_body.html index 4a7124112a..7fdc744fb5 100644 --- a/rustdoc/game/info/person/fn.crowd_body.html +++ b/rustdoc/game/info/person/fn.crowd_body.html @@ -2,5 +2,5 @@ ctx: &EventCtx<'_>, app: &App, details: &mut Details, - members: &[PedestrianID] + members: &[PedestrianID] ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.current_status.html b/rustdoc/game/info/person/fn.current_status.html index a9b8479014..81a7740c7f 100644 --- a/rustdoc/game/info/person/fn.current_status.html +++ b/rustdoc/game/info/person/fn.current_status.html @@ -1 +1 @@ -current_status in game::info::person - Rust

Function game::info::person::current_status

source ·
fn current_status(ctx: &EventCtx<'_>, person: &Person, map: &Map) -> Widget
\ No newline at end of file +current_status in game::info::person - Rust

Function game::info::person::current_status

source ·
fn current_status(ctx: &EventCtx<'_>, person: &Person, map: &Map) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.header.html b/rustdoc/game/info/person/fn.header.html index 6e93afa790..8c47041085 100644 --- a/rustdoc/game/info/person/fn.header.html +++ b/rustdoc/game/info/person/fn.header.html @@ -2,7 +2,7 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: PersonID, + id: PersonID, tab: Tab, is_paused: bool ) -> Widget

\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.parked_car.html b/rustdoc/game/info/person/fn.parked_car.html index 6357b8bb4c..5b6ba26867 100644 --- a/rustdoc/game/info/person/fn.parked_car.html +++ b/rustdoc/game/info/person/fn.parked_car.html @@ -2,6 +2,6 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: CarID, + id: CarID, is_paused: bool ) -> Widget

\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.parked_car_body.html b/rustdoc/game/info/person/fn.parked_car_body.html index 2cf3151adb..1eaabc609c 100644 --- a/rustdoc/game/info/person/fn.parked_car_body.html +++ b/rustdoc/game/info/person/fn.parked_car_body.html @@ -2,5 +2,5 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: CarID + id: CarID ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.schedule.html b/rustdoc/game/info/person/fn.schedule.html index e6e4417201..91549bcc69 100644 --- a/rustdoc/game/info/person/fn.schedule.html +++ b/rustdoc/game/info/person/fn.schedule.html @@ -2,6 +2,6 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: PersonID, + id: PersonID, is_paused: bool ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.schedule_body.html b/rustdoc/game/info/person/fn.schedule_body.html index 3a8f3b4d58..4d0adc6058 100644 --- a/rustdoc/game/info/person/fn.schedule_body.html +++ b/rustdoc/game/info/person/fn.schedule_body.html @@ -1 +1 @@ -schedule_body in game::info::person - Rust

Function game::info::person::schedule_body

source ·
fn schedule_body(ctx: &mut EventCtx<'_>, app: &App, id: PersonID) -> Widget
\ No newline at end of file +schedule_body in game::info::person - Rust

Function game::info::person::schedule_body

source ·
fn schedule_body(ctx: &mut EventCtx<'_>, app: &App, id: PersonID) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.trips.html b/rustdoc/game/info/person/fn.trips.html index 67a8493bba..e8e56f5fad 100644 --- a/rustdoc/game/info/person/fn.trips.html +++ b/rustdoc/game/info/person/fn.trips.html @@ -2,7 +2,7 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: PersonID, - open_trips: &mut BTreeMap<TripID, OpenTrip>, + id: PersonID, + open_trips: &mut BTreeMap<TripID, OpenTrip>, is_paused: bool ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/person/fn.trips_body.html b/rustdoc/game/info/person/fn.trips_body.html index 6ee94ecb41..73936d3e76 100644 --- a/rustdoc/game/info/person/fn.trips_body.html +++ b/rustdoc/game/info/person/fn.trips_body.html @@ -2,6 +2,6 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: PersonID, - open_trips: &mut BTreeMap<TripID, OpenTrip> + id: PersonID, + open_trips: &mut BTreeMap<TripID, OpenTrip> ) -> Widget \ No newline at end of file diff --git a/rustdoc/game/info/struct.DataOptions.html b/rustdoc/game/info/struct.DataOptions.html index 590b03dc8b..45eb1e5abd 100644 --- a/rustdoc/game/info/struct.DataOptions.html +++ b/rustdoc/game/info/struct.DataOptions.html @@ -1,8 +1,8 @@ DataOptions in game::info - Rust

Struct game::info::DataOptions

source ·
pub struct DataOptions {
     pub show_before: bool,
     pub show_end_of_day: bool,
-    disabled_types: BTreeSet<AgentType>,
-}

Fields§

§show_before: bool§show_end_of_day: bool§disabled_types: BTreeSet<AgentType>

Implementations§

source§

impl DataOptions

source

pub fn new() -> DataOptions

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

source

pub fn from_controls(c: &Panel) -> DataOptions

source

pub fn disabled_series(&self) -> HashSet<String>

Trait Implementations§

source§

impl Clone for DataOptions

source§

fn clone(&self) -> DataOptions

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for DataOptions

source§

fn eq(&self, other: &DataOptions) -> bool

This method tests for self and other values to be equal, and is used + disabled_types: BTreeSet<AgentType>, +}

Fields§

§show_before: bool§show_end_of_day: bool§disabled_types: BTreeSet<AgentType>

Implementations§

source§

impl DataOptions

source

pub fn new() -> DataOptions

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

source

pub fn from_controls(c: &Panel) -> DataOptions

source

pub fn disabled_series(&self) -> HashSet<String>

Trait Implementations§

source§

impl Clone for DataOptions

source§

fn clone(&self) -> DataOptions

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for DataOptions

source§

fn eq(&self, other: &DataOptions) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for DataOptions

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/info/struct.Details.html b/rustdoc/game/info/struct.Details.html index e5b9920f0f..dd2e1637d7 100644 --- a/rustdoc/game/info/struct.Details.html +++ b/rustdoc/game/info/struct.Details.html @@ -1,16 +1,16 @@ Details in game::info - Rust

Struct game::info::Details

source ·
pub struct Details {
     pub draw_extra: ToggleZoomedBuilder,
-    pub tooltips: Vec<(Polygon, Text, (TripID, Time))>,
+    pub tooltips: Vec<(Polygon, Text, (TripID, Time))>,
     pub hyperlinks: HashMap<String, Tab>,
     pub warpers: HashMap<String, ID>,
-    pub time_warpers: HashMap<String, (TripID, Time)>,
+    pub time_warpers: HashMap<String, (TripID, Time)>,
     pub can_jump_to_time: bool,
 }

Fields§

§draw_extra: ToggleZoomedBuilder

Draw extra things when unzoomed or zoomed.

-
§tooltips: Vec<(Polygon, Text, (TripID, Time))>

Show these tooltips over the map. If the tooltip is clicked, time-warp and open the info +

§tooltips: Vec<(Polygon, Text, (TripID, Time))>

Show these tooltips over the map. If the tooltip is clicked, time-warp and open the info panel.

§hyperlinks: HashMap<String, Tab>

When a button with this label is clicked, open this info panel tab instead.

§warpers: HashMap<String, ID>

When a button with this label is clicked, warp to this ID.

-
§time_warpers: HashMap<String, (TripID, Time)>

When a button with this label is clicked, time-warp and open the info panel for this trip.

+
§time_warpers: HashMap<String, (TripID, Time)>

When a button with this label is clicked, time-warp and open the info panel for this trip.

§can_jump_to_time: bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/game/info/struct.InfoPanel.html b/rustdoc/game/info/struct.InfoPanel.html index 03d2ce9e97..7b7a09c573 100644 --- a/rustdoc/game/info/struct.InfoPanel.html +++ b/rustdoc/game/info/struct.InfoPanel.html @@ -4,12 +4,12 @@ is_paused: bool, panel: Panel, draw_extra: ToggleZoomed, - tooltips: Vec<(Polygon, Text, (TripID, Time))>, + tooltips: Vec<(Polygon, Text, (TripID, Time))>, hyperlinks: HashMap<String, Tab>, warpers: HashMap<String, ID>, - time_warpers: HashMap<String, (TripID, Time)>, + time_warpers: HashMap<String, (TripID, Time)>, cached_actions: Vec<Key>, -}

Fields§

§tab: Tab§time: Time§is_paused: bool§panel: Panel§draw_extra: ToggleZoomed§tooltips: Vec<(Polygon, Text, (TripID, Time))>§hyperlinks: HashMap<String, Tab>§warpers: HashMap<String, ID>§time_warpers: HashMap<String, (TripID, Time)>§cached_actions: Vec<Key>

Implementations§

source§

impl InfoPanel

source

pub fn new( +}

Fields§

§tab: Tab§time: Time§is_paused: bool§panel: Panel§draw_extra: ToggleZoomed§tooltips: Vec<(Polygon, Text, (TripID, Time))>§hyperlinks: HashMap<String, Tab>§warpers: HashMap<String, ID>§time_warpers: HashMap<String, (TripID, Time)>§cached_actions: Vec<Key>

Implementations§

source§

impl InfoPanel

source

pub fn new( ctx: &mut EventCtx<'_>, app: &mut App, tab: Tab, diff --git a/rustdoc/game/info/struct.ProblemOptions.html b/rustdoc/game/info/struct.ProblemOptions.html index 9639305507..4083a2e01d 100644 --- a/rustdoc/game/info/struct.ProblemOptions.html +++ b/rustdoc/game/info/struct.ProblemOptions.html @@ -1,8 +1,8 @@ ProblemOptions in game::info - Rust

Struct game::info::ProblemOptions

source ·
pub struct ProblemOptions {
     pub show_before: bool,
     pub show_end_of_day: bool,
-    disabled_types: HashSet<ProblemType>,
-}

Fields§

§show_before: bool§show_end_of_day: bool§disabled_types: HashSet<ProblemType>

Implementations§

source§

impl ProblemOptions

source

pub fn new() -> Self

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

source

pub fn from_controls(c: &Panel) -> ProblemOptions

source

pub fn disabled_series(&self) -> HashSet<String>

Trait Implementations§

source§

impl Clone for ProblemOptions

source§

fn clone(&self) -> ProblemOptions

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for ProblemOptions

source§

fn eq(&self, other: &ProblemOptions) -> bool

This method tests for self and other values to be equal, and is used + disabled_types: HashSet<ProblemType>, +}

Fields§

§show_before: bool§show_end_of_day: bool§disabled_types: HashSet<ProblemType>

Implementations§

source§

impl ProblemOptions

source

pub fn new() -> Self

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

source

pub fn from_controls(c: &Panel) -> ProblemOptions

source

pub fn disabled_series(&self) -> HashSet<String>

Trait Implementations§

source§

impl Clone for ProblemOptions

source§

fn clone(&self) -> ProblemOptions

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for ProblemOptions

source§

fn eq(&self, other: &ProblemOptions) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for ProblemOptions

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/info/transit/fn.bus_header.html b/rustdoc/game/info/transit/fn.bus_header.html index f413da397f..aa44625c40 100644 --- a/rustdoc/game/info/transit/fn.bus_header.html +++ b/rustdoc/game/info/transit/fn.bus_header.html @@ -2,6 +2,6 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: CarID, + id: CarID, tab: Tab ) -> Widget

\ No newline at end of file diff --git a/rustdoc/game/info/transit/fn.bus_status.html b/rustdoc/game/info/transit/fn.bus_status.html index 44220aae09..91d1e9ca41 100644 --- a/rustdoc/game/info/transit/fn.bus_status.html +++ b/rustdoc/game/info/transit/fn.bus_status.html @@ -2,5 +2,5 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: CarID + id: CarID ) -> Widget

\ No newline at end of file diff --git a/rustdoc/game/info/transit/fn.bus_status_body.html b/rustdoc/game/info/transit/fn.bus_status_body.html index 1d01cb51ee..6efd124ae9 100644 --- a/rustdoc/game/info/transit/fn.bus_status_body.html +++ b/rustdoc/game/info/transit/fn.bus_status_body.html @@ -2,5 +2,5 @@ ctx: &mut EventCtx<'_>, app: &App, details: &mut Details, - id: CarID + id: CarID ) -> Widget

\ No newline at end of file diff --git a/rustdoc/game/info/trip/fn.cancelled.html b/rustdoc/game/info/trip/fn.cancelled.html index 7bf3fbdeed..275c99cddc 100644 --- a/rustdoc/game/info/trip/fn.cancelled.html +++ b/rustdoc/game/info/trip/fn.cancelled.html @@ -1,7 +1,7 @@ cancelled in game::info::trip - Rust

Function game::info::trip::cancelled

source ·
pub fn cancelled(
     ctx: &mut EventCtx<'_>,
     app: &App,
-    id: TripID,
+    id: TripID,
     open_trip: &mut OpenTrip,
     details: &mut Details
 ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/trip/fn.describe_problems.html b/rustdoc/game/info/trip/fn.describe_problems.html index 33d9d1d5e7..dbdd29de5d 100644 --- a/rustdoc/game/info/trip/fn.describe_problems.html +++ b/rustdoc/game/info/trip/fn.describe_problems.html @@ -1,7 +1,7 @@ describe_problems in game::info::trip - Rust

Function game::info::trip::describe_problems

source ·
fn describe_problems(
     ctx: &mut EventCtx<'_>,
-    analytics: &Analytics,
-    id: TripID,
-    trip: &TripInfo,
+    analytics: &Analytics,
+    id: TripID,
+    trip: &TripInfo,
     col_width: Percent
 ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/trip/fn.draw_problems.html b/rustdoc/game/info/trip/fn.draw_problems.html index b43392da0e..dc0d722676 100644 --- a/rustdoc/game/info/trip/fn.draw_problems.html +++ b/rustdoc/game/info/trip/fn.draw_problems.html @@ -1,8 +1,8 @@ draw_problems in game::info::trip - Rust

Function game::info::trip::draw_problems

source ·
fn draw_problems(
     ctx: &EventCtx<'_>,
     app: &App,
-    analytics: &Analytics,
+    analytics: &Analytics,
     details: &mut Details,
-    id: TripID,
+    id: TripID,
     map: &Map
 )
\ No newline at end of file diff --git a/rustdoc/game/info/trip/fn.finished.html b/rustdoc/game/info/trip/fn.finished.html index 5103359a1a..c33f64f863 100644 --- a/rustdoc/game/info/trip/fn.finished.html +++ b/rustdoc/game/info/trip/fn.finished.html @@ -1,8 +1,8 @@ finished in game::info::trip - Rust

Function game::info::trip::finished

source ·
pub fn finished(
     ctx: &mut EventCtx<'_>,
     app: &App,
-    person: PersonID,
-    open_trips: &mut BTreeMap<TripID, OpenTrip>,
-    id: TripID,
+    person: PersonID,
+    open_trips: &mut BTreeMap<TripID, OpenTrip>,
+    id: TripID,
     details: &mut Details
 ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/trip/fn.future.html b/rustdoc/game/info/trip/fn.future.html index 93ee786eb6..f4d2a0acbe 100644 --- a/rustdoc/game/info/trip/fn.future.html +++ b/rustdoc/game/info/trip/fn.future.html @@ -1,7 +1,7 @@ future in game::info::trip - Rust

Function game::info::trip::future

source ·
pub fn future(
     ctx: &mut EventCtx<'_>,
     app: &App,
-    id: TripID,
+    id: TripID,
     open_trip: &mut OpenTrip,
     details: &mut Details
 ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/trip/fn.make_timeline.html b/rustdoc/game/info/trip/fn.make_timeline.html index 63519f70e7..41512083cd 100644 --- a/rustdoc/game/info/trip/fn.make_timeline.html +++ b/rustdoc/game/info/trip/fn.make_timeline.html @@ -1,8 +1,8 @@ make_timeline in game::info::trip - Rust

Function game::info::trip::make_timeline

source ·
fn make_timeline(
     ctx: &mut EventCtx<'_>,
     app: &App,
-    trip_id: TripID,
-    phases: &[TripPhase],
+    trip_id: TripID,
+    phases: &[TripPhase],
     progress_along_path: Option<f64>
 ) -> Widget
Expand description

Draws the timeline for a single trip, with tooltips

\ No newline at end of file diff --git a/rustdoc/game/info/trip/fn.make_trip_details.html b/rustdoc/game/info/trip/fn.make_trip_details.html index fabc19f419..bd3185db91 100644 --- a/rustdoc/game/info/trip/fn.make_trip_details.html +++ b/rustdoc/game/info/trip/fn.make_trip_details.html @@ -1,10 +1,10 @@ make_trip_details in game::info::trip - Rust

Function game::info::trip::make_trip_details

source ·
fn make_trip_details(
     ctx: &mut EventCtx<'_>,
     app: &App,
-    trip_id: TripID,
+    trip_id: TripID,
     open_trip: &mut OpenTrip,
     details: &mut Details,
-    phases: Vec<TripPhase>,
+    phases: Vec<TripPhase>,
     map_for_pathfinding: &Map,
     progress_along_path: Option<f64>
 ) -> Widget
Expand description

Creates the timeline, location warp, and time warp buttons for one trip, and draws the route on diff --git a/rustdoc/game/info/trip/fn.ongoing.html b/rustdoc/game/info/trip/fn.ongoing.html index 82c55d48b4..a822a2c67e 100644 --- a/rustdoc/game/info/trip/fn.ongoing.html +++ b/rustdoc/game/info/trip/fn.ongoing.html @@ -1,8 +1,8 @@ ongoing in game::info::trip - Rust

Function game::info::trip::ongoing

source ·
pub fn ongoing(
     ctx: &mut EventCtx<'_>,
     app: &App,
-    id: TripID,
-    agent: AgentID,
+    id: TripID,
+    agent: AgentID,
     open_trip: &mut OpenTrip,
     details: &mut Details
 ) -> Widget
\ No newline at end of file diff --git a/rustdoc/game/info/trip/struct.OpenTrip.html b/rustdoc/game/info/trip/struct.OpenTrip.html index bedfa64322..fb670b4e0c 100644 --- a/rustdoc/game/info/trip/struct.OpenTrip.html +++ b/rustdoc/game/info/trip/struct.OpenTrip.html @@ -1,7 +1,7 @@ OpenTrip in game::info::trip - Rust

Struct game::info::trip::OpenTrip

source ·
pub struct OpenTrip {
     pub show_after: bool,
     cached_routes: Vec<Option<(Polygon, Vec<Polygon>)>>,
-}

Fields§

§show_after: bool§cached_routes: Vec<Option<(Polygon, Vec<Polygon>)>>

Implementations§

Trait Implementations§

source§

impl Clone for OpenTrip

source§

fn clone(&self) -> OpenTrip

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for OpenTrip

source§

fn eq(&self, other: &OpenTrip) -> bool

This method tests for self and other values to be equal, and is used +}

Fields§

§show_after: bool§cached_routes: Vec<Option<(Polygon, Vec<Polygon>)>>

Implementations§

source§

impl OpenTrip

source

pub fn single(id: TripID) -> BTreeMap<TripID, OpenTrip>

source

pub fn new() -> OpenTrip

Trait Implementations§

source§

impl Clone for OpenTrip

source§

fn clone(&self) -> OpenTrip

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for OpenTrip

source§

fn eq(&self, other: &OpenTrip) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/layer/elevation/struct.SteepStreets.html b/rustdoc/game/layer/elevation/struct.SteepStreets.html index 1e229e47b8..a0132f25e4 100644 --- a/rustdoc/game/layer/elevation/struct.SteepStreets.html +++ b/rustdoc/game/layer/elevation/struct.SteepStreets.html @@ -5,7 +5,7 @@ }

Fields§

§tooltip: Option<Text>§draw: ToggleZoomed§panel: Panel

Implementations§

source§

impl SteepStreets

source

pub fn new(ctx: &mut EventCtx<'_>, app: &App) -> SteepStreets

source

pub fn make_colorer<'a>( ctx: &mut EventCtx<'_>, app: &'a App -) -> (ColorDiscrete<'a>, f64, Widget)

Also returns the steepest street and a row explaining the uphill arrows

+) -> (ColorDiscrete<'a>, f64, Widget)

Also returns the steepest street and a row explaining the uphill arrows

source

pub fn make_legend( ctx: &mut EventCtx<'_> ) -> (Vec<(&'static str, Color)>, Widget)

Returns the colored categories used and a row explaining the uphill arrows

diff --git a/rustdoc/game/layer/map/struct.Static.html b/rustdoc/game/layer/map/struct.Static.html index 39857ea9dc..d2b8152876 100644 --- a/rustdoc/game/layer/map/struct.Static.html +++ b/rustdoc/game/layer/map/struct.Static.html @@ -4,7 +4,7 @@ name: &'static str, }

Fields§

§panel: Panel§draw: ToggleZoomed§name: &'static str

Implementations§

source§

impl Static

source

fn new( ctx: &mut EventCtx<'_>, - colorer: ColorDiscrete<'_>, + colorer: ColorDiscrete<'_>, name: &'static str, title: String, extra: Widget diff --git a/rustdoc/game/layer/pandemic/struct.Options.html b/rustdoc/game/layer/pandemic/struct.Options.html index aed5046b22..7fd553cbb5 100644 --- a/rustdoc/game/layer/pandemic/struct.Options.html +++ b/rustdoc/game/layer/pandemic/struct.Options.html @@ -1,7 +1,7 @@ Options in game::layer::pandemic - Rust

Struct game::layer::pandemic::Options

source ·
pub struct Options {
-    pub heatmap: Option<HeatmapOptions>,
+    pub heatmap: Option<HeatmapOptions>,
     pub state: Seir,
-}

Fields§

§heatmap: Option<HeatmapOptions>§state: Seir

Trait Implementations§

source§

impl Clone for Options

source§

fn clone(&self) -> Options

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for Options

source§

fn eq(&self, other: &Options) -> bool

This method tests for self and other values to be equal, and is used +}

Fields§

§heatmap: Option<HeatmapOptions>§state: Seir

Trait Implementations§

source§

impl Clone for Options

source§

fn clone(&self) -> Options

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for Options

source§

fn eq(&self, other: &Options) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for Options

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/layer/parking/enum.Loc.html b/rustdoc/game/layer/parking/enum.Loc.html index c300bc8845..91ffbf6882 100644 --- a/rustdoc/game/layer/parking/enum.Loc.html +++ b/rustdoc/game/layer/parking/enum.Loc.html @@ -2,7 +2,7 @@ Road(RoadID), Bldg(BuildingID), Lot(ParkingLotID), -}

Variants§

§

Road(RoadID)

§

Bldg(BuildingID)

§

Lot(ParkingLotID)

Implementations§

Trait Implementations§

source§

impl Clone for Loc

source§

fn clone(&self) -> Loc

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Ord for Loc

source§

fn cmp(&self, other: &Loc) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where +}

Variants§

§

Road(RoadID)

§

Bldg(BuildingID)

§

Lot(ParkingLotID)

Implementations§

source§

impl Loc

source

fn new(spot: ParkingSpot) -> Loc

Trait Implementations§

source§

impl Clone for Loc

source§

fn clone(&self) -> Loc

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Ord for Loc

source§

fn cmp(&self, other: &Loc) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Loc

source§

fn eq(&self, other: &Loc) -> bool

This method tests for self and other values to be equal, and is used diff --git a/rustdoc/game/layer/population/struct.Options.html b/rustdoc/game/layer/population/struct.Options.html index e7e1a4f844..73bf55237a 100644 --- a/rustdoc/game/layer/population/struct.Options.html +++ b/rustdoc/game/layer/population/struct.Options.html @@ -1,6 +1,6 @@ Options in game::layer::population - Rust

Struct game::layer::population::Options

source ·
pub struct Options {
-    pub heatmap: Option<HeatmapOptions>,
-}

Fields§

§heatmap: Option<HeatmapOptions>

Trait Implementations§

source§

impl Clone for Options

source§

fn clone(&self) -> Options

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for Options

source§

fn eq(&self, other: &Options) -> bool

This method tests for self and other values to be equal, and is used + pub heatmap: Option<HeatmapOptions>, +}

Fields§

§heatmap: Option<HeatmapOptions>

Trait Implementations§

source§

impl Clone for Options

source§

fn clone(&self) -> Options

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for Options

source§

fn eq(&self, other: &Options) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for Options

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/layer/problems/struct.Options.html b/rustdoc/game/layer/problems/struct.Options.html index 01cada8e92..7ae55a3d78 100644 --- a/rustdoc/game/layer/problems/struct.Options.html +++ b/rustdoc/game/layer/problems/struct.Options.html @@ -1,10 +1,10 @@ Options in game::layer::problems - Rust

Struct game::layer::problems::Options

source ·
pub struct Options {
-    heatmap: Option<HeatmapOptions>,
+    heatmap: Option<HeatmapOptions>,
     modes: BTreeSet<TripMode>,
     time1: Time,
     time2: Time,
     pub types: ProblemTypes,
-}

Fields§

§heatmap: Option<HeatmapOptions>§modes: BTreeSet<TripMode>§time1: Time§time2: Time§types: ProblemTypes

Implementations§

source§

impl Options

source

pub fn new(app: &App) -> Self

source

fn show(&self, trip: TripInfo, time: Time, problem: &Problem) -> bool

Trait Implementations§

source§

impl Clone for Options

source§

fn clone(&self) -> Options

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for Options

source§

fn eq(&self, other: &Options) -> bool

This method tests for self and other values to be equal, and is used +}

Fields§

§heatmap: Option<HeatmapOptions>§modes: BTreeSet<TripMode>§time1: Time§time2: Time§types: ProblemTypes

Implementations§

source§

impl Options

source

pub fn new(app: &App) -> Self

source

fn show(&self, trip: TripInfo, time: Time, problem: &Problem) -> bool

Trait Implementations§

source§

impl Clone for Options

source§

fn clone(&self) -> Options

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for Options

source§

fn eq(&self, other: &Options) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for Options

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/layer/problems_diff/struct.ProblemTypes.html b/rustdoc/game/layer/problems_diff/struct.ProblemTypes.html index 8f06d3bfe1..81e3a42b11 100644 --- a/rustdoc/game/layer/problems_diff/struct.ProblemTypes.html +++ b/rustdoc/game/layer/problems_diff/struct.ProblemTypes.html @@ -1,6 +1,6 @@ ProblemTypes in game::layer::problems_diff - Rust

Struct game::layer::problems_diff::ProblemTypes

source ·
pub struct ProblemTypes {
-    disabled_types: HashSet<ProblemType>,
-}

Fields§

§disabled_types: HashSet<ProblemType>

Implementations§

source§

impl ProblemTypes

source

pub fn new() -> Self

source

pub fn show(&self, problem: &Problem) -> bool

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>) -> Widget

source

pub fn from_controls(panel: &Panel) -> Self

Trait Implementations§

source§

impl Clone for ProblemTypes

source§

fn clone(&self) -> ProblemTypes

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for ProblemTypes

source§

fn eq(&self, other: &ProblemTypes) -> bool

This method tests for self and other values to be equal, and is used + disabled_types: HashSet<ProblemType>, +}

Fields§

§disabled_types: HashSet<ProblemType>

Implementations§

source§

impl ProblemTypes

source

pub fn new() -> Self

source

pub fn show(&self, problem: &Problem) -> bool

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>) -> Widget

source

pub fn from_controls(panel: &Panel) -> Self

Trait Implementations§

source§

impl Clone for ProblemTypes

source§

fn clone(&self) -> ProblemTypes

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for ProblemTypes

source§

fn eq(&self, other: &ProblemTypes) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for ProblemTypes

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/game/layer/problems_diff/struct.RelativeProblemMap.html b/rustdoc/game/layer/problems_diff/struct.RelativeProblemMap.html index bc7ed25284..2460ca2a0e 100644 --- a/rustdoc/game/layer/problems_diff/struct.RelativeProblemMap.html +++ b/rustdoc/game/layer/problems_diff/struct.RelativeProblemMap.html @@ -3,12 +3,12 @@ opts: ProblemTypes, draw: ToggleZoomed, panel: Panel, - before_road: Counter<RoadID>, - before_intersection: Counter<IntersectionID>, - after_road: Counter<RoadID>, - after_intersection: Counter<IntersectionID>, + before_road: Counter<RoadID>, + before_intersection: Counter<IntersectionID>, + after_road: Counter<RoadID>, + after_intersection: Counter<IntersectionID>, tooltip: Option<Text>, -}

Fields§

§time: Time§opts: ProblemTypes§draw: ToggleZoomed§panel: Panel§before_road: Counter<RoadID>§before_intersection: Counter<IntersectionID>§after_road: Counter<RoadID>§after_intersection: Counter<IntersectionID>§tooltip: Option<Text>

Implementations§

source§

impl RelativeProblemMap

source

pub fn new(ctx: &mut EventCtx<'_>, app: &App, opts: ProblemTypes) -> Self

Trait Implementations§

source§

impl Layer for RelativeProblemMap

source§

fn name(&self) -> Option<&'static str>

source§

fn event( +}

Fields§

§time: Time§opts: ProblemTypes§draw: ToggleZoomed§panel: Panel§before_road: Counter<RoadID>§before_intersection: Counter<IntersectionID>§after_road: Counter<RoadID>§after_intersection: Counter<IntersectionID>§tooltip: Option<Text>

Implementations§

source§

impl RelativeProblemMap

source

pub fn new(ctx: &mut EventCtx<'_>, app: &App, opts: ProblemTypes) -> Self

Trait Implementations§

source§

impl Layer for RelativeProblemMap

source§

fn name(&self) -> Option<&'static str>

source§

fn event( &mut self, ctx: &mut EventCtx<'_>, app: &mut App diff --git a/rustdoc/game/layer/problems_diff/type.Options.html b/rustdoc/game/layer/problems_diff/type.Options.html index df8a1c913e..53c49fd65b 100644 --- a/rustdoc/game/layer/problems_diff/type.Options.html +++ b/rustdoc/game/layer/problems_diff/type.Options.html @@ -1,3 +1,3 @@ Options in game::layer::problems_diff - Rust

Type Alias game::layer::problems_diff::Options

source ·
pub type Options = ProblemTypes;

Aliased Type§

struct Options {
-    disabled_types: HashSet<ProblemType>,
-}

Fields§

§disabled_types: HashSet<ProblemType>
\ No newline at end of file + disabled_types: HashSet<ProblemType>, +}

Fields§

§disabled_types: HashSet<ProblemType>

\ No newline at end of file diff --git a/rustdoc/game/layer/traffic/struct.Throughput.html b/rustdoc/game/layer/traffic/struct.Throughput.html index fefc4030a5..ee2d4e40f9 100644 --- a/rustdoc/game/layer/traffic/struct.Throughput.html +++ b/rustdoc/game/layer/traffic/struct.Throughput.html @@ -1,13 +1,13 @@ Throughput in game::layer::traffic - Rust

Struct game::layer::traffic::Throughput

source ·
pub struct Throughput {
     time: Time,
-    agent_types: BTreeSet<AgentType>,
+    agent_types: BTreeSet<AgentType>,
     tooltip: Option<Text>,
     draw: ToggleZoomed,
     panel: Panel,
-}

Fields§

§time: Time§agent_types: BTreeSet<AgentType>§tooltip: Option<Text>§draw: ToggleZoomed§panel: Panel

Implementations§

source§

impl Throughput

source

pub fn new( +}

Fields§

§time: Time§agent_types: BTreeSet<AgentType>§tooltip: Option<Text>§draw: ToggleZoomed§panel: Panel

Implementations§

source§

impl Throughput

source

pub fn new( ctx: &mut EventCtx<'_>, app: &App, - agent_types: BTreeSet<AgentType> + agent_types: BTreeSet<AgentType> ) -> Throughput

Trait Implementations§

source§

impl Layer for Throughput

source§

fn name(&self) -> Option<&'static str>

source§

fn event( &mut self, ctx: &mut EventCtx<'_>, diff --git a/rustdoc/game/pregame/proposals/struct.Proposals.html b/rustdoc/game/pregame/proposals/struct.Proposals.html index 2dacb7c460..26e866e011 100644 --- a/rustdoc/game/pregame/proposals/struct.Proposals.html +++ b/rustdoc/game/pregame/proposals/struct.Proposals.html @@ -15,7 +15,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/render/agents/struct.AgentCache.html b/rustdoc/game/render/agents/struct.AgentCache.html index 61f1d9ea91..dd0a90d84d 100644 --- a/rustdoc/game/render/agents/struct.AgentCache.html +++ b/rustdoc/game/render/agents/struct.AgentCache.html @@ -2,30 +2,30 @@ pub unzoomed_agents: UnzoomedAgents, time: Option<Time>, agents_per_on: HashMap<Traversable, Vec<Box<dyn GameRenderable>>>, - unzoomed: Option<(Time, UnzoomedAgents, QuadTree<AgentID>, Drawable)>, + unzoomed: Option<(Time, UnzoomedAgents, QuadTree<AgentID>, Drawable)>, }

Fields§

§unzoomed_agents: UnzoomedAgents

This is controlled almost entirely by the minimap panel. It has no meaning in edit mode.

-
§time: Option<Time>§agents_per_on: HashMap<Traversable, Vec<Box<dyn GameRenderable>>>§unzoomed: Option<(Time, UnzoomedAgents, QuadTree<AgentID>, Drawable)>

Implementations§

source§

impl AgentCache

source

pub fn new() -> AgentCache

source

pub fn get(&self, on: Traversable) -> Vec<&dyn GameRenderable>

source

pub fn populate_if_needed( +

§time: Option<Time>§agents_per_on: HashMap<Traversable, Vec<Box<dyn GameRenderable>>>§unzoomed: Option<(Time, UnzoomedAgents, QuadTree<AgentID>, Drawable)>

Implementations§

source§

impl AgentCache

source

pub fn new() -> AgentCache

source

pub fn get(&self, on: Traversable) -> Vec<&dyn GameRenderable>

source

pub fn populate_if_needed( &mut self, on: Traversable, map: &Map, - sim: &Sim, - cs: &ColorScheme, + sim: &Sim, + cs: &ColorScheme, prerender: &Prerender )

source

pub fn calculate_unzoomed_agents<P: AsRef<Prerender>>( &mut self, prerender: &mut P, map: &Map, - sim: &Sim, - cs: &ColorScheme -) -> &QuadTree<AgentID>

If the sim time has changed or the unzoomed agent filters have been modified, recalculate + sim: &Sim, + cs: &ColorScheme +) -> &QuadTree<AgentID>

If the sim time has changed or the unzoomed agent filters have been modified, recalculate the quadtree and drawable for all unzoomed agents.

source

pub fn draw_unzoomed_agents( &mut self, g: &mut GfxCtx<'_>, map: &Map, - sim: &Sim, - cs: &ColorScheme, - opts: &Options + sim: &Sim, + cs: &ColorScheme, + opts: &Options )

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/game/render/agents/struct.UnzoomedAgents.html b/rustdoc/game/render/agents/struct.UnzoomedAgents.html index a6367ef6b3..93ee950310 100644 --- a/rustdoc/game/render/agents/struct.UnzoomedAgents.html +++ b/rustdoc/game/render/agents/struct.UnzoomedAgents.html @@ -5,8 +5,8 @@ peds: bool, }

Fields§

§cars: bool§bikes: bool§buses_and_trains: bool§peds: bool

Implementations§

source§

impl UnzoomedAgents

source

pub fn new() -> UnzoomedAgents

source

pub fn cars(&self) -> bool

source

pub fn bikes(&self) -> bool

source

pub fn buses_and_trains(&self) -> bool

source

pub fn peds(&self) -> bool

source

fn color( &self, - agent: &UnzoomedAgent, - color_scheme: &ColorScheme + agent: &UnzoomedAgent, + color_scheme: &ColorScheme ) -> Option<Color>

source

pub fn update(&mut self, panel: &Panel)

Trait Implementations§

source§

impl Clone for UnzoomedAgents

source§

fn clone(&self) -> UnzoomedAgents

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq for UnzoomedAgents

source§

fn eq(&self, other: &UnzoomedAgents) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for UnzoomedAgents

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/game/render/bike/struct.DrawBike.html b/rustdoc/game/render/bike/struct.DrawBike.html index 95c83423db..1b01e52815 100644 --- a/rustdoc/game/render/bike/struct.DrawBike.html +++ b/rustdoc/game/render/bike/struct.DrawBike.html @@ -1,15 +1,15 @@ DrawBike in game::render::bike - Rust

Struct game::render::bike::DrawBike

source ·
pub struct DrawBike {
-    pub id: CarID,
+    pub id: CarID,
     body_circle: Circle,
     zorder: isize,
     draw_default: Drawable,
-}

Fields§

§id: CarID§body_circle: Circle§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawBike

source

pub fn new( - input: DrawCarInput, +}

Fields§

§id: CarID§body_circle: Circle§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawBike

source

pub fn new( + input: DrawCarInput, map: &Map, - sim: &Sim, + sim: &Sim, prerender: &Prerender, - cs: &ColorScheme -) -> DrawBike

Trait Implementations§

source§

impl GameRenderable for DrawBike

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

source§

fn get_zorder(&self) -> isize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + cs: &ColorScheme +) -> DrawBike

Trait Implementations§

source§

impl GameRenderable for DrawBike

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

source§

fn get_zorder(&self) -> isize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/render/car/fn.zoomed_color_car.html b/rustdoc/game/render/car/fn.zoomed_color_car.html index 78482945e8..1e5eb12a6f 100644 --- a/rustdoc/game/render/car/fn.zoomed_color_car.html +++ b/rustdoc/game/render/car/fn.zoomed_color_car.html @@ -1 +1 @@ -zoomed_color_car in game::render::car - Rust

Function game::render::car::zoomed_color_car

source ·
fn zoomed_color_car(input: &DrawCarInput, sim: &Sim, cs: &ColorScheme) -> Color
\ No newline at end of file +zoomed_color_car in game::render::car - Rust

Function game::render::car::zoomed_color_car

source ·
fn zoomed_color_car(input: &DrawCarInput, sim: &Sim, cs: &ColorScheme) -> Color
\ No newline at end of file diff --git a/rustdoc/game/render/car/struct.DrawCar.html b/rustdoc/game/render/car/struct.DrawCar.html index a04fb65dc7..3e2f65208c 100644 --- a/rustdoc/game/render/car/struct.DrawCar.html +++ b/rustdoc/game/render/car/struct.DrawCar.html @@ -1,16 +1,16 @@ DrawCar in game::render::car - Rust

Struct game::render::car::DrawCar

source ·
pub struct DrawCar {
-    pub id: CarID,
+    pub id: CarID,
     body: PolyLine,
     body_polygon: Polygon,
     zorder: isize,
     draw_default: Drawable,
-}

Fields§

§id: CarID§body: PolyLine§body_polygon: Polygon§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawCar

source

pub fn new( - input: DrawCarInput, +}

Fields§

§id: CarID§body: PolyLine§body_polygon: Polygon§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawCar

source

pub fn new( + input: DrawCarInput, map: &Map, - sim: &Sim, + sim: &Sim, prerender: &Prerender, - cs: &ColorScheme -) -> DrawCar

Trait Implementations§

source§

impl GameRenderable for DrawCar

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

source§

fn get_zorder(&self) -> isize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + cs: &ColorScheme +) -> DrawCar

Trait Implementations§

source§

impl GameRenderable for DrawCar

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

source§

fn get_zorder(&self) -> isize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/render/fn.draw_vehicle.html b/rustdoc/game/render/fn.draw_vehicle.html index 73032ca36e..e79098e5e4 100644 --- a/rustdoc/game/render/fn.draw_vehicle.html +++ b/rustdoc/game/render/fn.draw_vehicle.html @@ -1,7 +1,7 @@ draw_vehicle in game::render - Rust

Function game::render::draw_vehicle

source ·
fn draw_vehicle(
-    input: DrawCarInput,
+    input: DrawCarInput,
     map: &Map,
-    sim: &Sim,
+    sim: &Sim,
     prerender: &Prerender,
-    cs: &ColorScheme
+    cs: &ColorScheme
 ) -> Box<dyn GameRenderable>
\ No newline at end of file diff --git a/rustdoc/game/render/fn.grey_out_unhighlighted_people.html b/rustdoc/game/render/fn.grey_out_unhighlighted_people.html index d06a47c7c7..76c33c67dd 100644 --- a/rustdoc/game/render/fn.grey_out_unhighlighted_people.html +++ b/rustdoc/game/render/fn.grey_out_unhighlighted_people.html @@ -1,6 +1,6 @@ grey_out_unhighlighted_people in game::render - Rust

Function game::render::grey_out_unhighlighted_people

source ·
fn grey_out_unhighlighted_people(
     color: Color,
-    person: &Option<PersonID>,
-    sim: &Sim
+    person: &Option<PersonID>,
+    sim: &Sim
 ) -> Color
Expand description

If the sim has highlighted people, then fade all others out.

\ No newline at end of file diff --git a/rustdoc/game/render/fn.unzoomed_agent_radius.html b/rustdoc/game/render/fn.unzoomed_agent_radius.html index 05b4faa694..92fcbc29ee 100644 --- a/rustdoc/game/render/fn.unzoomed_agent_radius.html +++ b/rustdoc/game/render/fn.unzoomed_agent_radius.html @@ -1 +1 @@ -unzoomed_agent_radius in game::render - Rust

Function game::render::unzoomed_agent_radius

source ·
pub fn unzoomed_agent_radius(vt: Option<VehicleType>) -> Distance
\ No newline at end of file +unzoomed_agent_radius in game::render - Rust

Function game::render::unzoomed_agent_radius

source ·
pub fn unzoomed_agent_radius(vt: Option<VehicleType>) -> Distance
\ No newline at end of file diff --git a/rustdoc/game/render/pedestrian/struct.DrawPedCrowd.html b/rustdoc/game/render/pedestrian/struct.DrawPedCrowd.html index 828f7703fd..5c8c00a12e 100644 --- a/rustdoc/game/render/pedestrian/struct.DrawPedCrowd.html +++ b/rustdoc/game/render/pedestrian/struct.DrawPedCrowd.html @@ -1,15 +1,15 @@ DrawPedCrowd in game::render::pedestrian - Rust

Struct game::render::pedestrian::DrawPedCrowd

source ·
pub struct DrawPedCrowd {
-    members: Vec<PedestrianID>,
+    members: Vec<PedestrianID>,
     blob: Polygon,
     blob_pl: PolyLine,
     zorder: isize,
     draw_default: Drawable,
-}

Fields§

§members: Vec<PedestrianID>§blob: Polygon§blob_pl: PolyLine§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawPedCrowd

source

pub fn new( - input: DrawPedCrowdInput, +}

Fields§

§members: Vec<PedestrianID>§blob: Polygon§blob_pl: PolyLine§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawPedCrowd

source

pub fn new( + input: DrawPedCrowdInput, map: &Map, prerender: &Prerender, - cs: &ColorScheme -) -> DrawPedCrowd

Trait Implementations§

source§

impl GameRenderable for DrawPedCrowd

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn get_zorder(&self) -> isize

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + cs: &ColorScheme +) -> DrawPedCrowd

Trait Implementations§

source§

impl GameRenderable for DrawPedCrowd

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn get_zorder(&self) -> isize

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/render/pedestrian/struct.DrawPedestrian.html b/rustdoc/game/render/pedestrian/struct.DrawPedestrian.html index f26c7880e5..1e2c88da5f 100644 --- a/rustdoc/game/render/pedestrian/struct.DrawPedestrian.html +++ b/rustdoc/game/render/pedestrian/struct.DrawPedestrian.html @@ -1,22 +1,22 @@ DrawPedestrian in game::render::pedestrian - Rust

Struct game::render::pedestrian::DrawPedestrian

source ·
pub struct DrawPedestrian {
-    pub id: PedestrianID,
+    pub id: PedestrianID,
     body_circle: Circle,
     zorder: isize,
     draw_default: Drawable,
-}

Fields§

§id: PedestrianID§body_circle: Circle§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawPedestrian

source

pub fn new( - input: DrawPedestrianInput, +}

Fields§

§id: PedestrianID§body_circle: Circle§zorder: isize§draw_default: Drawable

Implementations§

source§

impl DrawPedestrian

source

pub fn new( + input: DrawPedestrianInput, step_count: usize, map: &Map, - sim: &Sim, + sim: &Sim, prerender: &Prerender, - cs: &ColorScheme + cs: &ColorScheme ) -> DrawPedestrian

source

pub fn geometry( batch: &mut GeomBatch, - sim: &Sim, - cs: &ColorScheme, - input: &DrawPedestrianInput, + sim: &Sim, + cs: &ColorScheme, + input: &DrawPedestrianInput, step_count: usize -)

Trait Implementations§

source§

impl GameRenderable for DrawPedestrian

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

source§

fn get_zorder(&self) -> isize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +)

Trait Implementations§

source§

impl GameRenderable for DrawPedestrian

source§

fn get_id(&self) -> ID

source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &dyn AppLike, _: &DrawOptions)

source§

fn get_outline(&self, _: &Map) -> Tessellation

source§

fn contains_pt(&self, pt: Pt2D, _: &Map) -> bool

source§

fn get_zorder(&self) -> isize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/render/trait.GameRenderable.html b/rustdoc/game/render/trait.GameRenderable.html index 98f97047f9..c4f81215e4 100644 --- a/rustdoc/game/render/trait.GameRenderable.html +++ b/rustdoc/game/render/trait.GameRenderable.html @@ -1,10 +1,10 @@ GameRenderable in game::render - Rust

Trait game::render::GameRenderable

source ·
pub trait GameRenderable {
     // Required methods
     fn get_id(&self) -> ID;
-    fn draw(&self, g: &mut GfxCtx<'_>, app: &dyn AppLike, opts: &DrawOptions);
+    fn draw(&self, g: &mut GfxCtx<'_>, app: &dyn AppLike, opts: &DrawOptions);
     fn get_outline(&self, map: &Map) -> Tessellation;
     fn contains_pt(&self, pt: Pt2D, map: &Map) -> bool;
 
     // Provided method
     fn get_zorder(&self) -> isize { ... }
-}

Required Methods§

source

fn get_id(&self) -> ID

source

fn draw(&self, g: &mut GfxCtx<'_>, app: &dyn AppLike, opts: &DrawOptions)

source

fn get_outline(&self, map: &Map) -> Tessellation

source

fn contains_pt(&self, pt: Pt2D, map: &Map) -> bool

Provided Methods§

source

fn get_zorder(&self) -> isize

Implementors§

\ No newline at end of file +}

Required Methods§

source

fn get_id(&self) -> ID

source

fn draw(&self, g: &mut GfxCtx<'_>, app: &dyn AppLike, opts: &DrawOptions)

source

fn get_outline(&self, map: &Map) -> Tessellation

source

fn contains_pt(&self, pt: Pt2D, map: &Map) -> bool

Provided Methods§

source

fn get_zorder(&self) -> isize

Implementors§

\ No newline at end of file diff --git a/rustdoc/game/sandbox/dashboards/commuter/fn.group_bldgs.html b/rustdoc/game/sandbox/dashboards/commuter/fn.group_bldgs.html index 11106ef198..893972d334 100644 --- a/rustdoc/game/sandbox/dashboards/commuter/fn.group_bldgs.html +++ b/rustdoc/game/sandbox/dashboards/commuter/fn.group_bldgs.html @@ -1,4 +1,4 @@ group_bldgs in game::sandbox::dashboards::commuter - Rust

Function game::sandbox::dashboards::commuter::group_bldgs

source ·
fn group_bldgs(
     app: &App,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<(HashMap<BuildingID, usize>, HashMap<IntersectionID, usize>, Vec<Block>)>
\ No newline at end of file diff --git a/rustdoc/game/sandbox/dashboards/commuter/struct.CommuterPatterns.html b/rustdoc/game/sandbox/dashboards/commuter/struct.CommuterPatterns.html index a1d3d90f6f..9652ffafe0 100644 --- a/rustdoc/game/sandbox/dashboards/commuter/struct.CommuterPatterns.html +++ b/rustdoc/game/sandbox/dashboards/commuter/struct.CommuterPatterns.html @@ -4,11 +4,11 @@ blocks: Vec<Block>, current_block: (BlockSelection, Drawable), filter: Filter, - trips_from_block: Vec<Vec<TripInfo>>, - trips_to_block: Vec<Vec<TripInfo>>, + trips_from_block: Vec<Vec<TripInfo>>, + trips_to_block: Vec<Vec<TripInfo>>, panel: Panel, draw_all_blocks: Drawable, -}

Fields§

§bldg_to_block: HashMap<BuildingID, usize>§border_to_block: HashMap<IntersectionID, usize>§blocks: Vec<Block>§current_block: (BlockSelection, Drawable)§filter: Filter§trips_from_block: Vec<Vec<TripInfo>>§trips_to_block: Vec<Vec<TripInfo>>§panel: Panel§draw_all_blocks: Drawable

Implementations§

source§

impl CommuterPatterns

source

pub fn new_state(ctx: &mut EventCtx<'_>, app: &mut App) -> Box<dyn State<App>>

source

fn count_per_block(&self, base: &Block) -> Vec<(&Block, usize)>

source

fn build_block_drawable<'a>( +}

Fields§

§bldg_to_block: HashMap<BuildingID, usize>§border_to_block: HashMap<IntersectionID, usize>§blocks: Vec<Block>§current_block: (BlockSelection, Drawable)§filter: Filter§trips_from_block: Vec<Vec<TripInfo>>§trips_to_block: Vec<Vec<TripInfo>>§panel: Panel§draw_all_blocks: Drawable

Implementations§

source§

impl CommuterPatterns

source

pub fn new_state(ctx: &mut EventCtx<'_>, app: &mut App) -> Box<dyn State<App>>

source

fn count_per_block(&self, base: &Block) -> Vec<(&Block, usize)>

source

fn build_block_drawable<'a>( &self, block_selection: BlockSelection, ctx: &EventCtx<'_>, diff --git a/rustdoc/game/sandbox/dashboards/generic_trip_table/fn.preview_route.html b/rustdoc/game/sandbox/dashboards/generic_trip_table/fn.preview_route.html index f1de840236..3f9834dfbd 100644 --- a/rustdoc/game/sandbox/dashboards/generic_trip_table/fn.preview_route.html +++ b/rustdoc/game/sandbox/dashboards/generic_trip_table/fn.preview_route.html @@ -1,6 +1,6 @@ preview_route in game::sandbox::dashboards::generic_trip_table - Rust

Function game::sandbox::dashboards::generic_trip_table::preview_route

source ·
fn preview_route(
     g: &mut GfxCtx<'_>,
     app: &App,
-    id: TripID,
+    id: TripID,
     batch: &mut GeomBatch
 )
\ No newline at end of file diff --git a/rustdoc/game/sandbox/dashboards/mode_shift/struct.Entry.html b/rustdoc/game/sandbox/dashboards/mode_shift/struct.Entry.html index 9606fb714b..f11dc84085 100644 --- a/rustdoc/game/sandbox/dashboards/mode_shift/struct.Entry.html +++ b/rustdoc/game/sandbox/dashboards/mode_shift/struct.Entry.html @@ -1,11 +1,11 @@ Entry in game::sandbox::dashboards::mode_shift - Rust

Struct game::sandbox::dashboards::mode_shift::Entry

source ·
struct Entry {
-    trip: TripID,
+    trip: TripID,
     estimated_driving_time: Duration,
     estimated_biking_time: Duration,
     distance: Distance,
     total_elevation_gain: Distance,
     total_elevation_loss: Distance,
-}

Fields§

§trip: TripID§estimated_driving_time: Duration§estimated_biking_time: Duration§distance: Distance§total_elevation_gain: Distance§total_elevation_loss: Distance

Auto Trait Implementations§

§

impl Freeze for Entry

§

impl RefUnwindSafe for Entry

§

impl Send for Entry

§

impl Sync for Entry

§

impl Unpin for Entry

§

impl UnwindSafe for Entry

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§trip: TripID§estimated_driving_time: Duration§estimated_biking_time: Duration§distance: Distance§total_elevation_gain: Distance§total_elevation_loss: Distance

Auto Trait Implementations§

§

impl Freeze for Entry

§

impl RefUnwindSafe for Entry

§

impl Send for Entry

§

impl Sync for Entry

§

impl Unpin for Entry

§

impl UnwindSafe for Entry

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/dashboards/parking_overhead/struct.Entry.html b/rustdoc/game/sandbox/dashboards/parking_overhead/struct.Entry.html index 2ad845123e..4a0f40103f 100644 --- a/rustdoc/game/sandbox/dashboards/parking_overhead/struct.Entry.html +++ b/rustdoc/game/sandbox/dashboards/parking_overhead/struct.Entry.html @@ -1,5 +1,5 @@ Entry in game::sandbox::dashboards::parking_overhead - Rust

Struct game::sandbox::dashboards::parking_overhead::Entry

source ·
struct Entry {
-    trip: TripID,
+    trip: TripID,
     total_duration: Duration,
     driving_duration: Duration,
     parking_duration: Duration,
@@ -7,7 +7,7 @@
     percent_overhead: usize,
     starts_off_map: bool,
     ends_off_map: bool,
-}

Fields§

§trip: TripID§total_duration: Duration§driving_duration: Duration§parking_duration: Duration§walking_duration: Duration§percent_overhead: usize§starts_off_map: bool§ends_off_map: bool

Auto Trait Implementations§

§

impl Freeze for Entry

§

impl RefUnwindSafe for Entry

§

impl Send for Entry

§

impl Sync for Entry

§

impl Unpin for Entry

§

impl UnwindSafe for Entry

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§trip: TripID§total_duration: Duration§driving_duration: Duration§parking_duration: Duration§walking_duration: Duration§percent_overhead: usize§starts_off_map: bool§ends_off_map: bool

Auto Trait Implementations§

§

impl Freeze for Entry

§

impl RefUnwindSafe for Entry

§

impl Send for Entry

§

impl Sync for Entry

§

impl Unpin for Entry

§

impl UnwindSafe for Entry

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/dashboards/risks/struct.Filter.html b/rustdoc/game/sandbox/dashboards/risks/struct.Filter.html index 4883e2f7b4..f6bcf2c740 100644 --- a/rustdoc/game/sandbox/dashboards/risks/struct.Filter.html +++ b/rustdoc/game/sandbox/dashboards/risks/struct.Filter.html @@ -4,8 +4,8 @@ }

Fields§

§modes: BTreeSet<TripMode>§include_no_changes: bool

Trait Implementations§

source§

impl TripProblemFilter for Filter

source§

fn includes_mode(&self, mode: &TripMode) -> bool

source§

fn include_no_changes(&self) -> bool

source§

fn trip_problems( &self, app: &App, - problem_type: ProblemType -) -> Vec<(TripID, Duration, isize)>

source§

fn finished_trip_count(&self, app: &App) -> usize

Auto Trait Implementations§

§

impl Freeze for Filter

§

impl RefUnwindSafe for Filter

§

impl Send for Filter

§

impl Sync for Filter

§

impl Unpin for Filter

§

impl UnwindSafe for Filter

Blanket Implementations§

source§

impl<T> Any for T
where + problem_type: ProblemType +) -> Vec<(TripID, Duration, isize)>

source§

fn finished_trip_count(&self, app: &App) -> usize

Auto Trait Implementations§

§

impl Freeze for Filter

§

impl RefUnwindSafe for Filter

§

impl Send for Filter

§

impl Sync for Filter

§

impl Unpin for Filter

§

impl UnwindSafe for Filter

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/dashboards/traffic_signals/struct.Demand.html b/rustdoc/game/sandbox/dashboards/traffic_signals/struct.Demand.html index 4667334115..bc262d5ce2 100644 --- a/rustdoc/game/sandbox/dashboards/traffic_signals/struct.Demand.html +++ b/rustdoc/game/sandbox/dashboards/traffic_signals/struct.Demand.html @@ -2,8 +2,8 @@ raw: Vec<(Time, MovementID)>, }

Fields§

§raw: Vec<(Time, MovementID)>

Implementations§

source§

impl Demand

source

fn all_demand( app: &App, - timer: &mut Timer<'_> -) -> HashMap<IntersectionID, Demand>

source

fn count(&self, start: Time) -> Counter<MovementID>

Auto Trait Implementations§

§

impl Freeze for Demand

§

impl RefUnwindSafe for Demand

§

impl Send for Demand

§

impl Sync for Demand

§

impl Unpin for Demand

§

impl UnwindSafe for Demand

Blanket Implementations§

source§

impl<T> Any for T
where + timer: &mut Timer<'_> +) -> HashMap<IntersectionID, Demand>

source

fn count(&self, start: Time) -> Counter<MovementID>

Auto Trait Implementations§

§

impl Freeze for Demand

§

impl RefUnwindSafe for Demand

§

impl Send for Demand

§

impl Sync for Demand

§

impl Unpin for Demand

§

impl UnwindSafe for Demand

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/dashboards/travel_times/struct.Filter.html b/rustdoc/game/sandbox/dashboards/travel_times/struct.Filter.html index bd3cecd570..ebf3eedba5 100644 --- a/rustdoc/game/sandbox/dashboards/travel_times/struct.Filter.html +++ b/rustdoc/game/sandbox/dashboards/travel_times/struct.Filter.html @@ -5,8 +5,8 @@ }

Fields§

§changes_pct: Option<f64>§modes: BTreeSet<TripMode>§include_no_changes: bool

Implementations§

source§

impl Filter

source

pub fn new() -> Filter

source

fn get_trips(&self, app: &App) -> Vec<(Duration, Duration)>

Trait Implementations§

source§

impl TripProblemFilter for Filter

source§

fn includes_mode(&self, mode: &TripMode) -> bool

source§

fn include_no_changes(&self) -> bool

source§

fn trip_problems( &self, app: &App, - problem_type: ProblemType -) -> Vec<(TripID, Duration, isize)>

source§

fn finished_trip_count(&self, app: &App) -> usize

Auto Trait Implementations§

§

impl Freeze for Filter

§

impl RefUnwindSafe for Filter

§

impl Send for Filter

§

impl Sync for Filter

§

impl Unpin for Filter

§

impl UnwindSafe for Filter

Blanket Implementations§

source§

impl<T> Any for T
where + problem_type: ProblemType +) -> Vec<(TripID, Duration, isize)>

source§

fn finished_trip_count(&self, app: &App) -> usize

Auto Trait Implementations§

§

impl Freeze for Filter

§

impl RefUnwindSafe for Filter

§

impl Send for Filter

§

impl Sync for Filter

§

impl Unpin for Filter

§

impl UnwindSafe for Filter

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/dashboards/trip_problems/fn.bucketize_isizes.html b/rustdoc/game/sandbox/dashboards/trip_problems/fn.bucketize_isizes.html index 620fb4c611..083779fa55 100644 --- a/rustdoc/game/sandbox/dashboards/trip_problems/fn.bucketize_isizes.html +++ b/rustdoc/game/sandbox/dashboards/trip_problems/fn.bucketize_isizes.html @@ -1,4 +1,4 @@ bucketize_isizes in game::sandbox::dashboards::trip_problems - Rust

Function game::sandbox::dashboards::trip_problems::bucketize_isizes

source ·
fn bucketize_isizes(
     max_buckets: usize,
-    pts: &[(TripID, Duration, isize)]
+    pts: &[(TripID, Duration, isize)]
 ) -> Vec<isize>
\ No newline at end of file diff --git a/rustdoc/game/sandbox/dashboards/trip_problems/fn.problem_matrix.html b/rustdoc/game/sandbox/dashboards/trip_problems/fn.problem_matrix.html index 7dc7dba06f..f445c75732 100644 --- a/rustdoc/game/sandbox/dashboards/trip_problems/fn.problem_matrix.html +++ b/rustdoc/game/sandbox/dashboards/trip_problems/fn.problem_matrix.html @@ -1,6 +1,6 @@ problem_matrix in game::sandbox::dashboards::trip_problems - Rust

Function game::sandbox::dashboards::trip_problems::problem_matrix

source ·
pub fn problem_matrix(
     ctx: &mut EventCtx<'_>,
     app: &App,
-    trips: Vec<(TripID, Duration, isize)>
+    trips: Vec<(TripID, Duration, isize)>
 ) -> Widget
Expand description

The caller should handle Outcome::ClickCustom with Vec for clicked cells.

\ No newline at end of file diff --git a/rustdoc/game/sandbox/dashboards/trip_problems/struct.Matrix.html b/rustdoc/game/sandbox/dashboards/trip_problems/struct.Matrix.html index 79b2d79602..19ec38d94c 100644 --- a/rustdoc/game/sandbox/dashboards/trip_problems/struct.Matrix.html +++ b/rustdoc/game/sandbox/dashboards/trip_problems/struct.Matrix.html @@ -3,7 +3,7 @@ buckets_x: Vec<X>, buckets_y: Vec<Y>, }
Expand description

Aka a 2D histogram. Tracks matching IDs in each cell.

-

Fields§

§entries: Vec<Vec<ID>>§buckets_x: Vec<X>§buckets_y: Vec<Y>

Implementations§

source§

impl<ID: 'static + CloneableAny + Clone, X: Copy + PartialOrd + Display, Y: Copy + PartialOrd + Display> Matrix<ID, X, Y>

source

fn new(buckets_x: Vec<X>, buckets_y: Vec<Y>) -> Matrix<ID, X, Y>

source

fn add_pt(&mut self, id: ID, x: X, y: Y)

source

fn idx(&self, x: usize, y: usize) -> usize

source

fn draw( +

Fields§

§entries: Vec<Vec<ID>>§buckets_x: Vec<X>§buckets_y: Vec<Y>

Implementations§

source§

impl<ID: 'static + CloneableAny + Clone, X: Copy + PartialOrd + Display, Y: Copy + PartialOrd + Display> Matrix<ID, X, Y>

source

fn new(buckets_x: Vec<X>, buckets_y: Vec<Y>) -> Matrix<ID, X, Y>

source

fn add_pt(&mut self, id: ID, x: X, y: Y)

source

fn idx(&self, x: usize, y: usize) -> usize

source

fn draw( self, ctx: &mut EventCtx<'_>, app: &App, diff --git a/rustdoc/game/sandbox/dashboards/trip_problems/trait.TripProblemFilter.html b/rustdoc/game/sandbox/dashboards/trip_problems/trait.TripProblemFilter.html index 82a6aebf30..e3cee57f74 100644 --- a/rustdoc/game/sandbox/dashboards/trip_problems/trait.TripProblemFilter.html +++ b/rustdoc/game/sandbox/dashboards/trip_problems/trait.TripProblemFilter.html @@ -7,11 +7,11 @@ fn trip_problems( &self, app: &App, - problem_type: ProblemType - ) -> Vec<(TripID, Duration, isize)> { ... } + problem_type: ProblemType + ) -> Vec<(TripID, Duration, isize)> { ... } fn finished_trip_count(&self, app: &App) -> usize { ... } }

Required Methods§

source

fn includes_mode(&self, mode: &TripMode) -> bool

source

fn include_no_changes(&self) -> bool

Provided Methods§

source

fn trip_problems( &self, app: &App, - problem_type: ProblemType -) -> Vec<(TripID, Duration, isize)>

source

fn finished_trip_count(&self, app: &App) -> usize

Implementors§

source§

impl TripProblemFilter for game::sandbox::dashboards::risks::Filter

source§

impl TripProblemFilter for game::sandbox::dashboards::travel_times::Filter

\ No newline at end of file + problem_type: ProblemType +) -> Vec<(TripID, Duration, isize)>

source

fn finished_trip_count(&self, app: &App) -> usize

Implementors§

source§

impl TripProblemFilter for game::sandbox::dashboards::risks::Filter

source§

impl TripProblemFilter for game::sandbox::dashboards::travel_times::Filter

\ No newline at end of file diff --git a/rustdoc/game/sandbox/dashboards/trip_table/struct.CancelledTrip.html b/rustdoc/game/sandbox/dashboards/trip_table/struct.CancelledTrip.html index 504eb730ba..824cfee5c1 100644 --- a/rustdoc/game/sandbox/dashboards/trip_table/struct.CancelledTrip.html +++ b/rustdoc/game/sandbox/dashboards/trip_table/struct.CancelledTrip.html @@ -1,12 +1,12 @@ CancelledTrip in game::sandbox::dashboards::trip_table - Rust

Struct game::sandbox::dashboards::trip_table::CancelledTrip

source ·
struct CancelledTrip {
-    id: TripID,
+    id: TripID,
     mode: TripMode,
     departure: Time,
     start: TripEndpoint,
     end: TripEndpoint,
     duration_before: Duration,
     reason: String,
-}

Fields§

§id: TripID§mode: TripMode§departure: Time§start: TripEndpoint§end: TripEndpoint§duration_before: Duration§reason: String

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§id: TripID§mode: TripMode§departure: Time§start: TripEndpoint§end: TripEndpoint§duration_before: Duration§reason: String

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/dashboards/trip_table/struct.FinishedTrip.html b/rustdoc/game/sandbox/dashboards/trip_table/struct.FinishedTrip.html index ba80c47e5a..1ecfe9f8b0 100644 --- a/rustdoc/game/sandbox/dashboards/trip_table/struct.FinishedTrip.html +++ b/rustdoc/game/sandbox/dashboards/trip_table/struct.FinishedTrip.html @@ -1,5 +1,5 @@ FinishedTrip in game::sandbox::dashboards::trip_table - Rust

Struct game::sandbox::dashboards::trip_table::FinishedTrip

source ·
struct FinishedTrip {
-    id: TripID,
+    id: TripID,
     mode: TripMode,
     modified: bool,
     start: TripEndpoint,
@@ -9,7 +9,7 @@
     duration_before: Duration,
     waiting: Duration,
     percent_waiting: usize,
-}

Fields§

§id: TripID§mode: TripMode§modified: bool§start: TripEndpoint§end: TripEndpoint§departure: Time§duration_after: Duration§duration_before: Duration§waiting: Duration§percent_waiting: usize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§id: TripID§mode: TripMode§modified: bool§start: TripEndpoint§end: TripEndpoint§departure: Time§duration_after: Duration§duration_before: Duration§waiting: Duration§percent_waiting: usize

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/dashboards/trip_table/struct.UnfinishedTrip.html b/rustdoc/game/sandbox/dashboards/trip_table/struct.UnfinishedTrip.html index 9590a4887d..cad8a50416 100644 --- a/rustdoc/game/sandbox/dashboards/trip_table/struct.UnfinishedTrip.html +++ b/rustdoc/game/sandbox/dashboards/trip_table/struct.UnfinishedTrip.html @@ -1,9 +1,9 @@ UnfinishedTrip in game::sandbox::dashboards::trip_table - Rust

Struct game::sandbox::dashboards::trip_table::UnfinishedTrip

source ·
struct UnfinishedTrip {
-    id: TripID,
+    id: TripID,
     mode: TripMode,
     departure: Time,
     duration_before: Duration,
-}

Fields§

§id: TripID§mode: TripMode§departure: Time§duration_before: Duration

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§id: TripID§mode: TripMode§departure: Time§duration_before: Duration

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/enum.LoadStage.html b/rustdoc/game/sandbox/enum.LoadStage.html index 46ef4f675a..9d857a76b3 100644 --- a/rustdoc/game/sandbox/enum.LoadStage.html +++ b/rustdoc/game/sandbox/enum.LoadStage.html @@ -3,9 +3,9 @@ LoadingScenario, GotScenario(Scenario), LoadingPrebaked(String), - GotPrebaked(String, Result<Analytics>), + GotPrebaked(String, Result<Analytics>), Finalizing, -}

Variants§

§

LoadingMap

§

LoadingScenario

§

GotScenario(Scenario)

§

LoadingPrebaked(String)

§

GotPrebaked(String, Result<Analytics>)

§

Finalizing

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Variants§

§

LoadingMap

§

LoadingScenario

§

GotScenario(Scenario)

§

LoadingPrebaked(String)

§

GotPrebaked(String, Result<Analytics>)

§

Finalizing

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/gameplay/actdev/fn.find_active_trip.html b/rustdoc/game/sandbox/gameplay/actdev/fn.find_active_trip.html index 29786bbf39..699dd91cbb 100644 --- a/rustdoc/game/sandbox/gameplay/actdev/fn.find_active_trip.html +++ b/rustdoc/game/sandbox/gameplay/actdev/fn.find_active_trip.html @@ -1 +1 @@ -find_active_trip in game::sandbox::gameplay::actdev - Rust

Function game::sandbox::gameplay::actdev::find_active_trip

source ·
fn find_active_trip(app: &App) -> Option<(PersonID, TripID)>
\ No newline at end of file +find_active_trip in game::sandbox::gameplay::actdev - Rust

Function game::sandbox::gameplay::actdev::find_active_trip

source ·
fn find_active_trip(app: &App) -> Option<(PersonID, TripID)>
\ No newline at end of file diff --git a/rustdoc/game/sandbox/gameplay/actdev/struct.About.html b/rustdoc/game/sandbox/gameplay/actdev/struct.About.html index 23f45391d2..71c4264964 100644 --- a/rustdoc/game/sandbox/gameplay/actdev/struct.About.html +++ b/rustdoc/game/sandbox/gameplay/actdev/struct.About.html @@ -9,7 +9,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/sandbox/gameplay/commute/fn.get_score.html b/rustdoc/game/sandbox/gameplay/commute/fn.get_score.html index ae884d7be5..9f7e6074b4 100644 --- a/rustdoc/game/sandbox/gameplay/commute/fn.get_score.html +++ b/rustdoc/game/sandbox/gameplay/commute/fn.get_score.html @@ -1 +1 @@ -get_score in game::sandbox::gameplay::commute - Rust

Function game::sandbox::gameplay::commute::get_score

source ·
fn get_score(app: &App, trips: &[TripID]) -> (Duration, Duration, usize)
\ No newline at end of file +get_score in game::sandbox::gameplay::commute - Rust

Function game::sandbox::gameplay::commute::get_score

source ·
fn get_score(app: &App, trips: &[TripID]) -> (Duration, Duration, usize)
\ No newline at end of file diff --git a/rustdoc/game/sandbox/gameplay/commute/struct.OptimizeCommute.html b/rustdoc/game/sandbox/gameplay/commute/struct.OptimizeCommute.html index d2ea3fac68..e90ea1625b 100644 --- a/rustdoc/game/sandbox/gameplay/commute/struct.OptimizeCommute.html +++ b/rustdoc/game/sandbox/gameplay/commute/struct.OptimizeCommute.html @@ -1,13 +1,13 @@ OptimizeCommute in game::sandbox::gameplay::commute - Rust

Struct game::sandbox::gameplay::commute::OptimizeCommute

source ·
pub struct OptimizeCommute {
     top_right: Panel,
-    person: PersonID,
+    person: PersonID,
     mode: GameplayMode,
     goal: Duration,
     time: Time,
     done: bool,
-    trips: Vec<TripID>,
+    trips: Vec<TripID>,
     once: bool,
-}

Fields§

§top_right: Panel§person: PersonID§mode: GameplayMode§goal: Duration§time: Time§done: bool§trips: Vec<TripID>§once: bool

Implementations§

source§

impl OptimizeCommute

source

pub fn new_state( +}

Fields§

§top_right: Panel§person: PersonID§mode: GameplayMode§goal: Duration§time: Time§done: bool§trips: Vec<TripID>§once: bool

Implementations§

source§

impl OptimizeCommute

source

pub fn new_state( ctx: &mut EventCtx<'_>, app: &App, orig_person: OrigPersonID, diff --git a/rustdoc/game/sandbox/gameplay/enum.GameplayMode.html b/rustdoc/game/sandbox/gameplay/enum.GameplayMode.html index d2d79c0f7f..653f157008 100644 --- a/rustdoc/game/sandbox/gameplay/enum.GameplayMode.html +++ b/rustdoc/game/sandbox/gameplay/enum.GameplayMode.html @@ -9,7 +9,7 @@ &self, app: &App, rng: XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> LoadScenario

source

pub fn can_edit_roads(&self) -> bool

source

pub fn can_edit_stop_signs(&self) -> bool

source

pub fn can_jump_to_time(&self) -> bool

source

pub fn allows(&self, edits: &MapEdits) -> bool

source

pub fn initialize( &self, ctx: &mut EventCtx<'_>, diff --git a/rustdoc/game/sandbox/gameplay/freeform/importers/fn.import_json_scenario.html b/rustdoc/game/sandbox/gameplay/freeform/importers/fn.import_json_scenario.html index 712aa48a0d..f28db18723 100644 --- a/rustdoc/game/sandbox/gameplay/freeform/importers/fn.import_json_scenario.html +++ b/rustdoc/game/sandbox/gameplay/freeform/importers/fn.import_json_scenario.html @@ -1,5 +1,5 @@ import_json_scenario in game::sandbox::gameplay::freeform::importers - Rust

Function game::sandbox::gameplay::freeform::importers::import_json_scenario

source ·
fn import_json_scenario(
     map: &Map,
     bytes: Vec<u8>,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<String>
\ No newline at end of file diff --git a/rustdoc/game/sandbox/gameplay/freeform/struct.ChangeScenario.html b/rustdoc/game/sandbox/gameplay/freeform/struct.ChangeScenario.html index f0817f8095..b97cef0dab 100644 --- a/rustdoc/game/sandbox/gameplay/freeform/struct.ChangeScenario.html +++ b/rustdoc/game/sandbox/gameplay/freeform/struct.ChangeScenario.html @@ -13,7 +13,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/sandbox/gameplay/play_scenario/struct.DepartureSummary.html b/rustdoc/game/sandbox/gameplay/play_scenario/struct.DepartureSummary.html index 09f16716c4..768cd4cb9e 100644 --- a/rustdoc/game/sandbox/gameplay/play_scenario/struct.DepartureSummary.html +++ b/rustdoc/game/sandbox/gameplay/play_scenario/struct.DepartureSummary.html @@ -11,7 +11,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/game/sandbox/gameplay/tutorial/constant.ESCORT.html b/rustdoc/game/sandbox/gameplay/tutorial/constant.ESCORT.html index 490b352746..0261988bf6 100644 --- a/rustdoc/game/sandbox/gameplay/tutorial/constant.ESCORT.html +++ b/rustdoc/game/sandbox/gameplay/tutorial/constant.ESCORT.html @@ -1 +1 @@ -ESCORT in game::sandbox::gameplay::tutorial - Rust

Constant game::sandbox::gameplay::tutorial::ESCORT

source ·
const ESCORT: CarID;
\ No newline at end of file +ESCORT in game::sandbox::gameplay::tutorial - Rust

Constant game::sandbox::gameplay::tutorial::ESCORT

source ·
const ESCORT: CarID;
\ No newline at end of file diff --git a/rustdoc/game/sandbox/minimap/struct.MinimapController.html b/rustdoc/game/sandbox/minimap/struct.MinimapController.html index ac5547f3a8..8cbb8df06a 100644 --- a/rustdoc/game/sandbox/minimap/struct.MinimapController.html +++ b/rustdoc/game/sandbox/minimap/struct.MinimapController.html @@ -1,12 +1,12 @@ -MinimapController in game::sandbox::minimap - Rust

Struct game::sandbox::minimap::MinimapController

source ·
pub struct MinimapController;

Trait Implementations§

source§

impl MinimapControls<App> for MinimapController

source§

fn has_zorder(&self, app: &App) -> bool

Should the user be able to control the z-order visible? The control is only present when -zoomed in, placed beneath the zoom column.
source§

fn has_layer(&self, app: &App) -> bool

Is there some additional layer displayed on the minimap? If this changes, the panel gets -recalculated.
source§

fn draw_extra(&self, g: &mut GfxCtx<'_>, app: &App)

Draw extra stuff on the minimap, just pulling from the app.
source§

fn make_unzoomed_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Panel

When unzoomed, display this panel. By default, no controls when unzoomed.
source§

fn make_legend(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

A row beneath the minimap in the zoomed view, usually used as a legend for things on the -minimap.
source§

fn make_zoomed_side_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

Controls to be placed to the left to the zoomed-in panel
source§

fn panel_clicked( +MinimapController in game::sandbox::minimap - Rust

Struct game::sandbox::minimap::MinimapController

source ·
pub struct MinimapController;

Trait Implementations§

source§

impl MinimapControls<App> for MinimapController

source§

fn has_zorder(&self, app: &App) -> bool

Should the user be able to control the z-order visible? The control is only present when +zoomed in, placed beneath the zoom column.
source§

fn has_layer(&self, app: &App) -> bool

Is there some additional layer displayed on the minimap? If this changes, the panel gets +recalculated.
source§

fn draw_extra(&self, g: &mut GfxCtx<'_>, app: &App)

Draw extra stuff on the minimap, just pulling from the app.
source§

fn make_unzoomed_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Panel

When unzoomed, display this panel. By default, no controls when unzoomed.
source§

fn make_legend(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

A row beneath the minimap in the zoomed view, usually used as a legend for things on the +minimap.
source§

fn make_zoomed_side_panel(&self, ctx: &mut EventCtx<'_>, app: &App) -> Widget

Controls to be placed to the left to the zoomed-in panel
source§

fn panel_clicked( &self, ctx: &mut EventCtx<'_>, app: &mut App, action: &str -) -> Option<Transition<App>>

If a button is clicked that was produced by some method in this trait, respond to it here.
source§

fn panel_changed(&self, _: &mut EventCtx<'_>, app: &mut App, panel: &Panel)

Called for Outcome::Changed on the panel.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +) -> Option<Transition<App>>

If a button is clicked that was produced by some method in this trait, respond to it here.
source§

fn panel_changed(&self, _: &mut EventCtx<'_>, app: &mut App, panel: &Panel)

Called for Outcome::Changed on the panel.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/sandbox/misc_tools/struct.RoutePreview.html b/rustdoc/game/sandbox/misc_tools/struct.RoutePreview.html index 3defcd27bf..a906a21fc6 100644 --- a/rustdoc/game/sandbox/misc_tools/struct.RoutePreview.html +++ b/rustdoc/game/sandbox/misc_tools/struct.RoutePreview.html @@ -1,7 +1,7 @@ RoutePreview in game::sandbox::misc_tools - Rust

Struct game::sandbox::misc_tools::RoutePreview

source ·
pub struct RoutePreview {
-    preview: Option<(AgentID, Time, bool, Drawable)>,
+    preview: Option<(AgentID, Time, bool, Drawable)>,
 }
Expand description

Draws a preview of the path for the agent under the mouse cursor.

-

Fields§

§preview: Option<(AgentID, Time, bool, Drawable)>

Implementations§

source§

impl RoutePreview

source§

impl RoutePreview

source

pub fn event( +

Fields§

§preview: Option<(AgentID, Time, bool, Drawable)>

Implementations§

source§

impl RoutePreview

source§

impl RoutePreview

source

pub fn event( &mut self, ctx: &mut EventCtx<'_>, app: &mut App diff --git a/rustdoc/game/sandbox/struct.SandboxControls.html b/rustdoc/game/sandbox/struct.SandboxControls.html index fa4bb94a04..124d79c121 100644 --- a/rustdoc/game/sandbox/struct.SandboxControls.html +++ b/rustdoc/game/sandbox/struct.SandboxControls.html @@ -3,8 +3,8 @@ route_preview: Option<RoutePreview>, tool_panel: Option<Panel>, pub time_panel: Option<TimePanel>, - minimap: Option<Minimap<App, MinimapController>>, -}

Fields§

§common: Option<CommonState>§route_preview: Option<RoutePreview>§tool_panel: Option<Panel>§time_panel: Option<TimePanel>§minimap: Option<Minimap<App, MinimapController>>

Implementations§

source§

impl SandboxControls

source

pub fn new( + minimap: Option<Minimap<App, MinimapController>>, +}

Fields§

§common: Option<CommonState>§route_preview: Option<RoutePreview>§tool_panel: Option<Panel>§time_panel: Option<TimePanel>§minimap: Option<Minimap<App, MinimapController>>

Implementations§

source§

impl SandboxControls

source

pub fn new( ctx: &mut EventCtx<'_>, app: &App, gameplay: &dyn GameplayState diff --git a/rustdoc/game/sandbox/struct.SandboxMode.html b/rustdoc/game/sandbox/struct.SandboxMode.html index 966d647a35..387685579d 100644 --- a/rustdoc/game/sandbox/struct.SandboxMode.html +++ b/rustdoc/game/sandbox/struct.SandboxMode.html @@ -3,8 +3,8 @@ pub gameplay_mode: GameplayMode, pub controls: SandboxControls, recalc_unzoomed_agent: Option<Time>, - last_cs: ColorSchemeChoice, -}

Fields§

§gameplay: Box<dyn GameplayState>§gameplay_mode: GameplayMode§controls: SandboxControls§recalc_unzoomed_agent: Option<Time>§last_cs: ColorSchemeChoice

Implementations§

source§

impl SandboxMode

source

pub fn simple_new(app: &mut App, mode: GameplayMode) -> Box<dyn State<App>>

If you don’t need to chain any transitions after the SandboxMode that rely on its resources + last_cs: ColorSchemeChoice, +}

Fields§

§gameplay: Box<dyn GameplayState>§gameplay_mode: GameplayMode§controls: SandboxControls§recalc_unzoomed_agent: Option<Time>§last_cs: ColorSchemeChoice

Implementations§

source§

impl SandboxMode

source

pub fn simple_new(app: &mut App, mode: GameplayMode) -> Box<dyn State<App>>

If you don’t need to chain any transitions after the SandboxMode that rely on its resources being loaded, use this. Otherwise, see async_new.

source

pub fn async_new( app: &mut App, diff --git a/rustdoc/game/struct.Args.html b/rustdoc/game/struct.Args.html index f10a185719..e03780516f 100644 --- a/rustdoc/game/struct.Args.html +++ b/rustdoc/game/struct.Args.html @@ -7,7 +7,7 @@ pub(crate) dump_raw_events: bool, pub(crate) scale_factor: Option<f64>, pub(crate) dev: bool, - pub(crate) color_scheme: Option<ColorSchemeChoice>, + pub(crate) color_scheme: Option<ColorSchemeChoice>, pub(crate) minimal_controls: bool, pub(crate) prebake: bool, pub(crate) tutorial_intro: bool, @@ -31,7 +31,7 @@

§scale_factor: Option<f64>

Override the monitor’s auto-detected scale factor

§dev: bool

Dev mode exposes experimental tools useful for debugging, but that’d likely confuse most players.

-
§color_scheme: Option<ColorSchemeChoice>

The color scheme for map elements, agents, and the UI.

+
§color_scheme: Option<ColorSchemeChoice>

The color scheme for map elements, agents, and the UI.

§minimal_controls: bool

When making a screen recording, enable this option to hide some UI elements

§prebake: bool

Run a configured set of simulations and record prebaked data.

§tutorial_intro: bool

Start at the tutorial intro screen

diff --git a/rustdoc/game/struct.Setup.html b/rustdoc/game/struct.Setup.html index 7fa96a46df..c9fa8be174 100644 --- a/rustdoc/game/struct.Setup.html +++ b/rustdoc/game/struct.Setup.html @@ -1,13 +1,13 @@ Setup in game - Rust

Struct game::Setup

source ·
pub(crate) struct Setup {
     pub(crate) flags: Flags,
-    pub(crate) opts: Options,
+    pub(crate) opts: Options,
     pub(crate) start_with_edits: Option<String>,
     pub(crate) initialize_tutorial: bool,
     pub(crate) center_camera: Option<String>,
     pub(crate) start_time: Option<Duration>,
     pub(crate) diff_map: Option<String>,
     pub(crate) mode: Mode,
-}

Fields§

§flags: Flags§opts: Options§start_with_edits: Option<String>§initialize_tutorial: bool§center_camera: Option<String>§start_time: Option<Duration>§diff_map: Option<String>§mode: Mode

Auto Trait Implementations§

§

impl Freeze for Setup

§

impl RefUnwindSafe for Setup

§

impl Send for Setup

§

impl Sync for Setup

§

impl Unpin for Setup

§

impl UnwindSafe for Setup

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§flags: Flags§opts: Options§start_with_edits: Option<String>§initialize_tutorial: bool§center_camera: Option<String>§start_time: Option<Duration>§diff_map: Option<String>§mode: Mode

Auto Trait Implementations§

§

impl Freeze for Setup

§

impl RefUnwindSafe for Setup

§

impl Send for Setup

§

impl Sync for Setup

§

impl Unpin for Setup

§

impl UnwindSafe for Setup

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/ungap/layers/struct.Layers.html b/rustdoc/game/ungap/layers/struct.Layers.html index 804f95d32a..614285d4b7 100644 --- a/rustdoc/game/ungap/layers/struct.Layers.html +++ b/rustdoc/game/ungap/layers/struct.Layers.html @@ -2,7 +2,7 @@ panel: Panel, minimized: bool, bike_network: Option<DrawNetworkLayer>, - labels: Option<DrawRoadLabels>, + labels: Option<DrawRoadLabels>, elevation: bool, steep_streets: Option<Drawable>, road_types: HashMap<String, Drawable>, @@ -10,7 +10,7 @@ zoom_enabled_cache_key: (bool, bool), map_edit_key: usize, }
Expand description

A bottom-right panel for managing a bunch of toggleable layers in the “ungap the map” tool.

-

Fields§

§panel: Panel§minimized: bool§bike_network: Option<DrawNetworkLayer>§labels: Option<DrawRoadLabels>§elevation: bool§steep_streets: Option<Drawable>§road_types: HashMap<String, Drawable>§fade_map: Drawable§zoom_enabled_cache_key: (bool, bool)§map_edit_key: usize

Implementations§

source§

impl Layers

source

pub fn new(ctx: &mut EventCtx<'_>, app: &App) -> Layers

source

pub fn event( +

Fields§

§panel: Panel§minimized: bool§bike_network: Option<DrawNetworkLayer>§labels: Option<DrawRoadLabels>§elevation: bool§steep_streets: Option<Drawable>§road_types: HashMap<String, Drawable>§fade_map: Drawable§zoom_enabled_cache_key: (bool, bool)§map_edit_key: usize

Implementations§

source§

impl Layers

source

pub fn new(ctx: &mut EventCtx<'_>, app: &App) -> Layers

source

pub fn event( &mut self, ctx: &mut EventCtx<'_>, app: &mut App diff --git a/rustdoc/game/ungap/predict/struct.ModeShiftData.html b/rustdoc/game/ungap/predict/struct.ModeShiftData.html index 20bab630f8..826b3ab806 100644 --- a/rustdoc/game/ungap/predict/struct.ModeShiftData.html +++ b/rustdoc/game/ungap/predict/struct.ModeShiftData.html @@ -8,12 +8,12 @@ ctx: &mut EventCtx<'_>, app: &App, scenario: Scenario, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> ModeShiftData

source

fn recalculate_gaps( &mut self, ctx: &mut EventCtx<'_>, app: &App, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/game/ungap/predict/struct.NetworkGaps.html b/rustdoc/game/ungap/predict/struct.NetworkGaps.html index f006d881d7..27784cf452 100644 --- a/rustdoc/game/ungap/predict/struct.NetworkGaps.html +++ b/rustdoc/game/ungap/predict/struct.NetworkGaps.html @@ -1,7 +1,7 @@ NetworkGaps in game::ungap::predict - Rust

Struct game::ungap::predict::NetworkGaps

source ·
struct NetworkGaps {
     draw: ToggleZoomed,
-    count_per_road: Counter<RoadID>,
-}

Fields§

§draw: ToggleZoomed§count_per_road: Counter<RoadID>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + count_per_road: Counter<RoadID>, +}

Fields§

§draw: ToggleZoomed§count_per_road: Counter<RoadID>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/game/ungap/trip/enum.ID.html b/rustdoc/game/ungap/trip/enum.ID.html index ff1f64a087..a1f67ebe2c 100644 --- a/rustdoc/game/ungap/trip/enum.ID.html +++ b/rustdoc/game/ungap/trip/enum.ID.html @@ -1,8 +1,8 @@ ID in game::ungap::trip - Rust

Enum game::ungap::trip::ID

source ·
enum ID {
     MainRoute,
     AltRoute(usize),
-    Waypoint(WaypointID),
-}

Variants§

§

MainRoute

§

AltRoute(usize)

§

Waypoint(WaypointID)

Trait Implementations§

source§

impl Clone for ID

source§

fn clone(&self) -> ID

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ID

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + Waypoint(WaypointID), +}

Variants§

§

MainRoute

§

AltRoute(usize)

§

Waypoint(WaypointID)

Trait Implementations§

source§

impl Clone for ID

source§

fn clone(&self) -> ID

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for ID

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for ID

source§

fn eq(&self, other: &ID) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always diff --git a/rustdoc/game/ungap/trip/struct.TripPlanner.html b/rustdoc/game/ungap/trip/struct.TripPlanner.html index d680e99f16..6c2e425302 100644 --- a/rustdoc/game/ungap/trip/struct.TripPlanner.html +++ b/rustdoc/game/ungap/trip/struct.TripPlanner.html @@ -1,12 +1,12 @@ TripPlanner in game::ungap::trip - Rust

Struct game::ungap::trip::TripPlanner

source ·
pub struct TripPlanner {
     layers: Layers,
     input_panel: Panel,
-    waypoints: InputWaypoints,
+    waypoints: InputWaypoints,
     main_route: RouteDetails,
-    files: TripManagement<App, TripPlanner>,
+    files: TripManagement<App, TripPlanner>,
     alt_routes: Vec<RouteDetails>,
     world: World<ID>,
-}

Fields§

§layers: Layers§input_panel: Panel§waypoints: InputWaypoints§main_route: RouteDetails§files: TripManagement<App, TripPlanner>§alt_routes: Vec<RouteDetails>§world: World<ID>

Implementations§

source§

impl TripPlanner

source

pub fn new_state( +}

Fields§

§layers: Layers§input_panel: Panel§waypoints: InputWaypoints§main_route: RouteDetails§files: TripManagement<App, TripPlanner>§alt_routes: Vec<RouteDetails>§world: World<ID>

Implementations§

source§

impl TripPlanner

source

pub fn new_state( ctx: &mut EventCtx<'_>, app: &mut App, layers: Layers @@ -16,7 +16,7 @@ app: &App, main_route: Widget )

Trait Implementations§

source§

impl State<App> for TripPlanner

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
source§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, app: &mut App)

Before this state is popped or replaced, call this.
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving -the State-specific state appropriately.
source§

impl TakeLayers for TripPlanner

source§

impl TripManagementState<App> for TripPlanner

source§

fn mut_files(&mut self) -> &mut TripManagement<App, Self>

source§

fn app_session_current_trip_name(app: &mut App) -> &mut Option<String>

source§

fn sync_from_file_management(&mut self, ctx: &mut EventCtx<'_>, app: &mut App)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +the State-specific state appropriately.

source§

impl TakeLayers for TripPlanner

source§

impl TripManagementState<App> for TripPlanner

source§

fn mut_files(&mut self) -> &mut TripManagement<App, Self>

source§

fn app_session_current_trip_name(app: &mut App) -> &mut Option<String>

source§

fn sync_from_file_management(&mut self, ctx: &mut EventCtx<'_>, app: &mut App)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where diff --git a/rustdoc/headless/struct.LoadSim.html b/rustdoc/headless/struct.LoadSim.html index d3e2a06500..0b0670b171 100644 --- a/rustdoc/headless/struct.LoadSim.html +++ b/rustdoc/headless/struct.LoadSim.html @@ -4,7 +4,7 @@ pub(crate) edits: Option<PermanentMapEdits>, pub(crate) rng_seed: u64, pub(crate) opts: SimOptions, -}

Fields§

§scenario: String§modifiers: Vec<ScenarioModifier>§edits: Option<PermanentMapEdits>§rng_seed: u64§opts: SimOptions

Implementations§

source§

impl LoadSim

source

pub(crate) fn setup(&self, timer: &mut Timer<'_>) -> (Map, Sim)

Trait Implementations§

source§

impl<'de> Deserialize<'de> for LoadSim

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where +}

Fields§

§scenario: String§modifiers: Vec<ScenarioModifier>§edits: Option<PermanentMapEdits>§rng_seed: u64§opts: SimOptions

Implementations§

source§

impl LoadSim

source

pub(crate) fn setup(&self, timer: &mut Timer<'_>) -> (Map, Sim)

Trait Implementations§

source§

impl<'de> Deserialize<'de> for LoadSim

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/importer/berlin/fn.correlate_population.html b/rustdoc/importer/berlin/fn.correlate_population.html index 0b3a51483f..302bc34f98 100644 --- a/rustdoc/importer/berlin/fn.correlate_population.html +++ b/rustdoc/importer/berlin/fn.correlate_population.html @@ -1,5 +1,5 @@ correlate_population in importer::berlin - Rust

Function importer::berlin::correlate_population

source ·
fn correlate_population(
     kml_path: String,
     csv_path: String,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 )
\ No newline at end of file diff --git a/rustdoc/importer/berlin/fn.distribute_residents.html b/rustdoc/importer/berlin/fn.distribute_residents.html index f70d43b85b..e770788d81 100644 --- a/rustdoc/importer/berlin/fn.distribute_residents.html +++ b/rustdoc/importer/berlin/fn.distribute_residents.html @@ -1 +1 @@ -distribute_residents in importer::berlin - Rust

Function importer::berlin::distribute_residents

source ·
pub fn distribute_residents(map: &mut Map, timer: &mut Timer<'_>)
\ No newline at end of file +distribute_residents in importer::berlin - Rust

Function importer::berlin::distribute_residents

source ·
pub fn distribute_residents(map: &mut Map, timer: &mut Timer<'_>)
\ No newline at end of file diff --git a/rustdoc/importer/berlin/fn.import_extra_data.html b/rustdoc/importer/berlin/fn.import_extra_data.html index 7f9155f596..63f140e6e7 100644 --- a/rustdoc/importer/berlin/fn.import_extra_data.html +++ b/rustdoc/importer/berlin/fn.import_extra_data.html @@ -1,5 +1,5 @@ import_extra_data in importer::berlin - Rust

Function importer::berlin::import_extra_data

source ·
pub async fn import_extra_data(
     map: &RawMap,
     config: &ImporterConfiguration,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 )
\ No newline at end of file diff --git a/rustdoc/importer/fn.oneshot.html b/rustdoc/importer/fn.oneshot.html index 61d120d66f..24d3bc9184 100644 --- a/rustdoc/importer/fn.oneshot.html +++ b/rustdoc/importer/fn.oneshot.html @@ -1,7 +1,7 @@ oneshot in importer - Rust

Function importer::oneshot

source ·
pub async fn oneshot(
     osm_path: String,
     clip: Option<String>,
-    options: Options,
+    options: Options,
     create_uk_travel_demand_model: bool,
     opts: RawToMapOptions
 )
Expand description

Transforms a .osm.xml or .pbf file to a map in one step.

diff --git a/rustdoc/importer/map_config/fn.config_for_map.html b/rustdoc/importer/map_config/fn.config_for_map.html index fdbbce446c..83e1a1ba1b 100644 --- a/rustdoc/importer/map_config/fn.config_for_map.html +++ b/rustdoc/importer/map_config/fn.config_for_map.html @@ -1,4 +1,4 @@ -config_for_map in importer::map_config - Rust

Function importer::map_config::config_for_map

source ·
pub fn config_for_map(name: &MapName) -> Options
Expand description

Given the name of a map, configure its import.

+config_for_map in importer::map_config - Rust

Function importer::map_config::config_for_map

source ·
pub fn config_for_map(name: &MapName) -> Options
Expand description

Given the name of a map, configure its import.

Note this was once expressed as config files for every city. That was less maintainable; most places used default values that were copied around.

\ No newline at end of file diff --git a/rustdoc/importer/map_config/index.html b/rustdoc/importer/map_config/index.html index 2d03b93749..d8f89ef4e1 100644 --- a/rustdoc/importer/map_config/index.html +++ b/rustdoc/importer/map_config/index.html @@ -1 +1 @@ -importer::map_config - Rust

Module importer::map_config

source ·

Functions§

\ No newline at end of file +importer::map_config - Rust

Module importer::map_config

source ·

Functions§

\ No newline at end of file diff --git a/rustdoc/importer/seattle/fn.ensure_popdat_exists.html b/rustdoc/importer/seattle/fn.ensure_popdat_exists.html index eded541c1f..5223c4c5e6 100644 --- a/rustdoc/importer/seattle/fn.ensure_popdat_exists.html +++ b/rustdoc/importer/seattle/fn.ensure_popdat_exists.html @@ -1,5 +1,5 @@ ensure_popdat_exists in importer::seattle - Rust

Function importer::seattle::ensure_popdat_exists

source ·
pub async fn ensure_popdat_exists(
-    timer: &mut Timer<'_>,
+    timer: &mut Timer<'_>,
     config: &ImporterConfiguration,
     built_raw_huge_seattle: &mut bool,
     built_map_huge_seattle: &mut bool
diff --git a/rustdoc/importer/seattle/fn.input.html b/rustdoc/importer/seattle/fn.input.html
index a2c7ca259c..139504f7a8 100644
--- a/rustdoc/importer/seattle/fn.input.html
+++ b/rustdoc/importer/seattle/fn.input.html
@@ -1 +1 @@
-input in importer::seattle - Rust

Function importer::seattle::input

source ·
pub async fn input(config: &ImporterConfiguration, timer: &mut Timer<'_>)
\ No newline at end of file +input in importer::seattle - Rust

Function importer::seattle::input

source ·
pub async fn input(config: &ImporterConfiguration, timer: &mut Timer<'_>)
\ No newline at end of file diff --git a/rustdoc/importer/seattle/fn.match_parcels_to_buildings.html b/rustdoc/importer/seattle/fn.match_parcels_to_buildings.html index 027861483a..12f9761f05 100644 --- a/rustdoc/importer/seattle/fn.match_parcels_to_buildings.html +++ b/rustdoc/importer/seattle/fn.match_parcels_to_buildings.html @@ -1,6 +1,6 @@ match_parcels_to_buildings in importer::seattle - Rust

Function importer::seattle::match_parcels_to_buildings

source ·
pub fn match_parcels_to_buildings(
     map: &mut Map,
     shapes: &ExtraShapes,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 )
Expand description

Match OSM buildings to parcels, scraping the number of housing units.

\ No newline at end of file diff --git a/rustdoc/importer/soundcast/popdat/fn.import_data.html b/rustdoc/importer/soundcast/popdat/fn.import_data.html index 69ad5841e5..99bc20a969 100644 --- a/rustdoc/importer/soundcast/popdat/fn.import_data.html +++ b/rustdoc/importer/soundcast/popdat/fn.import_data.html @@ -1 +1 @@ -import_data in importer::soundcast::popdat - Rust

Function importer::soundcast::popdat::import_data

source ·
pub fn import_data(huge_map: &Map, timer: &mut Timer<'_>) -> PopDat
\ No newline at end of file +import_data in importer::soundcast::popdat - Rust

Function importer::soundcast::popdat::import_data

source ·
pub fn import_data(huge_map: &Map, timer: &mut Timer<'_>) -> PopDat
\ No newline at end of file diff --git a/rustdoc/importer/soundcast/popdat/fn.import_parcels.html b/rustdoc/importer/soundcast/popdat/fn.import_parcels.html index a1466e4790..97306f438b 100644 --- a/rustdoc/importer/soundcast/popdat/fn.import_parcels.html +++ b/rustdoc/importer/soundcast/popdat/fn.import_parcels.html @@ -1,4 +1,4 @@ import_parcels in importer::soundcast::popdat - Rust

Function importer::soundcast::popdat::import_parcels

source ·
fn import_parcels(
     _: &Map,
-    _: &mut Timer<'_>
+    _: &mut Timer<'_>
 ) -> (HashMap<usize, Endpoint>, BTreeMap<usize, ExtraShape>)
\ No newline at end of file diff --git a/rustdoc/importer/soundcast/popdat/fn.import_trips.html b/rustdoc/importer/soundcast/popdat/fn.import_trips.html index 75d131ba4f..21970e46e2 100644 --- a/rustdoc/importer/soundcast/popdat/fn.import_trips.html +++ b/rustdoc/importer/soundcast/popdat/fn.import_trips.html @@ -1 +1 @@ -import_trips in importer::soundcast::popdat - Rust

Function importer::soundcast::popdat::import_trips

source ·
fn import_trips(huge_map: &Map, timer: &mut Timer<'_>) -> Vec<OrigTrip>
\ No newline at end of file +import_trips in importer::soundcast::popdat - Rust

Function importer::soundcast::popdat::import_trips

source ·
fn import_trips(huge_map: &Map, timer: &mut Timer<'_>) -> Vec<OrigTrip>
\ No newline at end of file diff --git a/rustdoc/importer/soundcast/trips/fn.clip_trips.html b/rustdoc/importer/soundcast/trips/fn.clip_trips.html index 933390bfa4..f54b2b4f09 100644 --- a/rustdoc/importer/soundcast/trips/fn.clip_trips.html +++ b/rustdoc/importer/soundcast/trips/fn.clip_trips.html @@ -3,5 +3,5 @@ popdat: &PopDat, huge_map: &Map, only_passthrough_trips: bool, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Vec<Trip>
\ No newline at end of file diff --git a/rustdoc/importer/soundcast/trips/fn.make_scenario.html b/rustdoc/importer/soundcast/trips/fn.make_scenario.html index 2f18a86de8..cb5d92abb9 100644 --- a/rustdoc/importer/soundcast/trips/fn.make_scenario.html +++ b/rustdoc/importer/soundcast/trips/fn.make_scenario.html @@ -3,5 +3,5 @@ map: &Map, popdat: &PopDat, huge_map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Scenario
\ No newline at end of file diff --git a/rustdoc/importer/struct.Job.html b/rustdoc/importer/struct.Job.html index 9f829adedf..71c48285a6 100644 --- a/rustdoc/importer/struct.Job.html +++ b/rustdoc/importer/struct.Job.html @@ -15,7 +15,7 @@ importer/config/$city/.

§opts: RawToMapOptions

Implementations§

source§

impl Job

source

pub fn full_for_city(city: CityName) -> Job

source

pub fn flags(&self) -> Vec<String>

Return the command-line flags that should produce this job. Incomplete – doesn’t invert RawToMapOptions

-
source

pub async fn run(self, timer: &mut Timer<'_>)

Trait Implementations§

source§

impl StructOpt for Job

source§

fn clap<'a, 'b>() -> App<'a, 'b>

Returns clap::App corresponding to the struct.
source§

fn from_clap(matches: &ArgMatches<'_>) -> Self

Builds the struct from clap::ArgMatches. It’s guaranteed to succeed +
source

pub async fn run(self, timer: &mut Timer<'_>)

Trait Implementations§

source§

impl StructOpt for Job

source§

fn clap<'a, 'b>() -> App<'a, 'b>

Returns clap::App corresponding to the struct.
source§

fn from_clap(matches: &ArgMatches<'_>) -> Self

Builds the struct from clap::ArgMatches. It’s guaranteed to succeed if matches originates from an App generated by [StructOpt::clap] called on the same type, otherwise it must panic.
§

fn from_args() -> Self
where Self: Sized,

Builds the struct from the command line arguments (std::env::args_os). diff --git a/rustdoc/importer/uk/fn.check_sensor_data.html b/rustdoc/importer/uk/fn.check_sensor_data.html index 864830225c..1e724d1954 100644 --- a/rustdoc/importer/uk/fn.check_sensor_data.html +++ b/rustdoc/importer/uk/fn.check_sensor_data.html @@ -2,5 +2,5 @@ map: &Map, scenario: &Scenario, sensor_path: &str, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )
\ No newline at end of file diff --git a/rustdoc/importer/uk/fn.generate_scenario.html b/rustdoc/importer/uk/fn.generate_scenario.html index 45ea775ae4..b51ff42775 100644 --- a/rustdoc/importer/uk/fn.generate_scenario.html +++ b/rustdoc/importer/uk/fn.generate_scenario.html @@ -1,5 +1,5 @@ generate_scenario in importer::uk - Rust

Function importer::uk::generate_scenario

source ·
pub async fn generate_scenario(
     map: &Map,
     config: &ImporterConfiguration,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<()>
\ No newline at end of file diff --git a/rustdoc/importer/uk/fn.import_collision_data.html b/rustdoc/importer/uk/fn.import_collision_data.html index 6c9f074883..fcae0b8bae 100644 --- a/rustdoc/importer/uk/fn.import_collision_data.html +++ b/rustdoc/importer/uk/fn.import_collision_data.html @@ -1,5 +1,5 @@ import_collision_data in importer::uk - Rust

Function importer::uk::import_collision_data

source ·
pub async fn import_collision_data(
     map: &RawMap,
     config: &ImporterConfiguration,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 )
\ No newline at end of file diff --git a/rustdoc/importer/utils/fn.download_kml.html b/rustdoc/importer/utils/fn.download_kml.html index c7d52e3af0..3565e26bbc 100644 --- a/rustdoc/importer/utils/fn.download_kml.html +++ b/rustdoc/importer/utils/fn.download_kml.html @@ -3,7 +3,7 @@ url: &str, bounds: &GPSBounds, require_all_pts_in_bounds: bool, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )
Expand description

If the output file doesn’t already exist, downloads the URL into that location. Clips .kml files and converts to a .bin.

\ No newline at end of file diff --git a/rustdoc/importer/utils/fn.osm_to_raw.html b/rustdoc/importer/utils/fn.osm_to_raw.html index 167014d9f7..a327cd7a68 100644 --- a/rustdoc/importer/utils/fn.osm_to_raw.html +++ b/rustdoc/importer/utils/fn.osm_to_raw.html @@ -1,6 +1,6 @@ osm_to_raw in importer::utils - Rust

Function importer::utils::osm_to_raw

source ·
pub async fn osm_to_raw(
     name: MapName,
-    timer: &mut Timer<'_>,
+    timer: &mut Timer<'_>,
     config: &ImporterConfiguration
 ) -> RawMap
Expand description

Creates a RawMap from OSM and other input data.

\ No newline at end of file diff --git a/rustdoc/importer/utils/fn.raw_to_map.html b/rustdoc/importer/utils/fn.raw_to_map.html index c499d5ad3c..e6535c39ea 100644 --- a/rustdoc/importer/utils/fn.raw_to_map.html +++ b/rustdoc/importer/utils/fn.raw_to_map.html @@ -1,6 +1,6 @@ raw_to_map in importer::utils - Rust

Function importer::utils::raw_to_map

source ·
pub fn raw_to_map(
     name: &MapName,
     opts: RawToMapOptions,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Map
Expand description

Converts a RawMap to a Map.

\ No newline at end of file diff --git a/rustdoc/kml/fn.load.html b/rustdoc/kml/fn.load.html index e82bf7ffb5..4aa23df7ea 100644 --- a/rustdoc/kml/fn.load.html +++ b/rustdoc/kml/fn.load.html @@ -2,7 +2,7 @@ path: String, gps_bounds: &GPSBounds, require_all_pts_in_bounds: bool, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Result<ExtraShapes>
Expand description

Parses a .kml file and returns ExtraShapes. Objects will be clipped to the given gps_bounds. If require_all_pts_in_bounds is true, objects that’re partly out-of-bounds will be skipped.

\ No newline at end of file diff --git a/rustdoc/kml/struct.ExtraShapes.html b/rustdoc/kml/struct.ExtraShapes.html index c67698fe80..d6e210f2e3 100644 --- a/rustdoc/kml/struct.ExtraShapes.html +++ b/rustdoc/kml/struct.ExtraShapes.html @@ -5,7 +5,7 @@ this format and serializing is faster than parsing the original again.

Fields§

§shapes: Vec<ExtraShape>

Implementations§

source§

impl ExtraShapes

source

pub fn load_csv( path: String, gps_bounds: &GPSBounds, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Result<ExtraShapes>

Parses a .csv file and returns ExtraShapes. Each record must EITHER have a column called ‘Longitude’ and ‘Latitude’, representing a single point, OR a column called ‘geometry’ with a WKT-style linestring. All other columns will just be attributes. Objects that’re partly diff --git a/rustdoc/ltn/app/struct.App.html b/rustdoc/ltn/app/struct.App.html index 51e6d5b606..fd390f99c9 100644 --- a/rustdoc/ltn/app/struct.App.html +++ b/rustdoc/ltn/app/struct.App.html @@ -18,7 +18,7 @@ &mut self, ctx: &mut EventCtx<'_>, map: Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, _l: DrawOptions)

source§

fn make_warper( &mut self, ctx: &EventCtx<'_>, @@ -44,7 +44,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -64,7 +64,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/ltn/app/struct.PerMap.html b/rustdoc/ltn/app/struct.PerMap.html index b4e6b168a5..770c7383e0 100644 --- a/rustdoc/ltn/app/struct.PerMap.html +++ b/rustdoc/ltn/app/struct.PerMap.html @@ -19,7 +19,7 @@ map: Map, opts: &Options, cs: &ColorScheme, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Auto Trait Implementations§

§

impl !Freeze for PerMap

§

impl !RefUnwindSafe for PerMap

§

impl !Send for PerMap

§

impl !Sync for PerMap

§

impl Unpin for PerMap

§

impl !UnwindSafe for PerMap

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/ltn/logic/auto_filters/enum.AutoFilterHeuristic.html b/rustdoc/ltn/logic/auto_filters/enum.AutoFilterHeuristic.html index 9748d1f9cb..00d63141b6 100644 --- a/rustdoc/ltn/logic/auto_filters/enum.AutoFilterHeuristic.html +++ b/rustdoc/ltn/logic/auto_filters/enum.AutoFilterHeuristic.html @@ -17,7 +17,7 @@ all shortcuts.

ctx: &mut EventCtx<'_>, app: &mut App, neighbourhood: &Neighbourhood, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Result<()>

Trait Implementations§

source§

impl Clone for AutoFilterHeuristic

source§

fn clone(&self) -> AutoFilterHeuristic

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AutoFilterHeuristic

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for AutoFilterHeuristic

source§

fn eq(&self, other: &AutoFilterHeuristic) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for AutoFilterHeuristic

source§

impl StructuralPartialEq for AutoFilterHeuristic

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/ltn/logic/auto_filters/fn.brute_force.html b/rustdoc/ltn/logic/auto_filters/fn.brute_force.html index 68e5c7a8c1..1284ae3824 100644 --- a/rustdoc/ltn/logic/auto_filters/fn.brute_force.html +++ b/rustdoc/ltn/logic/auto_filters/fn.brute_force.html @@ -1,5 +1,5 @@ brute_force in ltn::logic::auto_filters - Rust

Function ltn::logic::auto_filters::brute_force

source ·
fn brute_force(
     app: &mut App,
     neighbourhood: &Neighbourhood,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 )
\ No newline at end of file diff --git a/rustdoc/ltn/logic/auto_filters/fn.split_cells.html b/rustdoc/ltn/logic/auto_filters/fn.split_cells.html index 2f8f05cf96..1722975e07 100644 --- a/rustdoc/ltn/logic/auto_filters/fn.split_cells.html +++ b/rustdoc/ltn/logic/auto_filters/fn.split_cells.html @@ -1,5 +1,5 @@ split_cells in ltn::logic::auto_filters - Rust

Function ltn::logic::auto_filters::split_cells

source ·
fn split_cells(
     app: &mut App,
     neighbourhood: &Neighbourhood,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 )
\ No newline at end of file diff --git a/rustdoc/ltn/logic/enum.AutoFilterHeuristic.html b/rustdoc/ltn/logic/enum.AutoFilterHeuristic.html index b6aa9b1631..251d291753 100644 --- a/rustdoc/ltn/logic/enum.AutoFilterHeuristic.html +++ b/rustdoc/ltn/logic/enum.AutoFilterHeuristic.html @@ -17,7 +17,7 @@ all shortcuts.

ctx: &mut EventCtx<'_>, app: &mut App, neighbourhood: &Neighbourhood, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Result<()>

Trait Implementations§

source§

impl Clone for AutoFilterHeuristic

source§

fn clone(&self) -> AutoFilterHeuristic

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AutoFilterHeuristic

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for AutoFilterHeuristic

source§

fn eq(&self, other: &AutoFilterHeuristic) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for AutoFilterHeuristic

source§

impl StructuralPartialEq for AutoFilterHeuristic

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/ltn/logic/existing/fn.transform_existing.html b/rustdoc/ltn/logic/existing/fn.transform_existing.html index b71b01ffa1..7a15340a6b 100644 --- a/rustdoc/ltn/logic/existing/fn.transform_existing.html +++ b/rustdoc/ltn/logic/existing/fn.transform_existing.html @@ -1,3 +1,3 @@ -transform_existing in ltn::logic::existing - Rust

Function ltn::logic::existing::transform_existing

source ·
pub fn transform_existing(map: &mut Map, timer: &mut Timer<'_>)
Expand description

Edit the map, adding modal filters and crossings that’re modelled in OSM in various ways.

+transform_existing in ltn::logic::existing - Rust

Function ltn::logic::existing::transform_existing

source ·
pub fn transform_existing(map: &mut Map, timer: &mut Timer<'_>)
Expand description

Edit the map, adding modal filters and crossings that’re modelled in OSM in various ways.

TODO Maybe do this in the map importer pipeline!

\ No newline at end of file diff --git a/rustdoc/ltn/logic/fn.transform_existing.html b/rustdoc/ltn/logic/fn.transform_existing.html index 47e91cd7e0..d983a1b62e 100644 --- a/rustdoc/ltn/logic/fn.transform_existing.html +++ b/rustdoc/ltn/logic/fn.transform_existing.html @@ -1,3 +1,3 @@ -transform_existing in ltn::logic - Rust

Function ltn::logic::transform_existing

source ·
pub fn transform_existing(map: &mut Map, timer: &mut Timer<'_>)
Expand description

Edit the map, adding modal filters and crossings that’re modelled in OSM in various ways.

+transform_existing in ltn::logic - Rust

Function ltn::logic::transform_existing

source ·
pub fn transform_existing(map: &mut Map, timer: &mut Timer<'_>)
Expand description

Edit the map, adding modal filters and crossings that’re modelled in OSM in various ways.

TODO Maybe do this in the map importer pipeline!

\ No newline at end of file diff --git a/rustdoc/ltn/logic/impact/struct.Impact.html b/rustdoc/ltn/logic/impact/struct.Impact.html index 40a58c13d2..b1bf450254 100644 --- a/rustdoc/ltn/logic/impact/struct.Impact.html +++ b/rustdoc/ltn/logic/impact/struct.Impact.html @@ -10,22 +10,22 @@ ctx: &mut EventCtx<'_>, app: &App, scenario: Scenario, - timer: &mut Timer<'_> -) -> Impact

source

fn pathfinder_after(&self, app: &App, timer: &mut Timer<'_>) -> Pathfinder

source

pub fn trips_changed( + timer: &mut Timer<'_> +) -> Impact

source

fn pathfinder_after(&self, app: &App, timer: &mut Timer<'_>) -> Pathfinder

source

pub fn trips_changed( &mut self, ctx: &mut EventCtx<'_>, app: &App, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

pub fn map_edits_changed( &mut self, ctx: &mut EventCtx<'_>, app: &App, - timer: &mut Timer<'_> -)

source

fn counts_b(&self, app: &App, timer: &mut Timer<'_>) -> TrafficCounts

source

pub fn find_changed_routes( + timer: &mut Timer<'_> +)

source

fn counts_b(&self, app: &App, timer: &mut Timer<'_>) -> TrafficCounts

source

pub fn find_changed_routes( &self, app: &App, r: RoadID, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Vec<(PathV2, PathV2)>

Returns routes that start or stop crossing the given road. Returns paths (before filters, after)

Auto Trait Implementations§

§

impl !Freeze for Impact

§

impl RefUnwindSafe for Impact

§

impl !Send for Impact

§

impl !Sync for Impact

§

impl Unpin for Impact

§

impl UnwindSafe for Impact

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/ltn/logic/partition/struct.Partitioning.html b/rustdoc/ltn/logic/partition/struct.Partitioning.html index 1f0866bf06..f60b9a3e19 100644 --- a/rustdoc/ltn/logic/partition/struct.Partitioning.html +++ b/rustdoc/ltn/logic/partition/struct.Partitioning.html @@ -7,7 +7,7 @@ pub broken: bool, pub custom_boundaries: BTreeMap<NeighbourhoodID, CustomBoundary>, }

Fields§

§map: MapName§neighbourhoods: BTreeMap<NeighbourhoodID, NeighbourhoodInfo>§single_blocks: Vec<Block>§neighbourhood_id_counter: usize§block_to_neighbourhood: BTreeMap<BlockID, NeighbourhoodID>§broken: bool§custom_boundaries: BTreeMap<NeighbourhoodID, CustomBoundary>

Implementations§

source§

impl Partitioning

source

pub fn empty() -> Partitioning

Only valid before the LTN tool has been activated this session

-
source

pub fn is_empty(&self) -> bool

source

pub fn seed_using_heuristics(map: &Map, timer: &mut Timer<'_>) -> Partitioning

source

pub fn transfer_blocks( +

source

pub fn is_empty(&self) -> bool

source

pub fn seed_using_heuristics(map: &Map, timer: &mut Timer<'_>) -> Partitioning

source

pub fn transfer_blocks( &mut self, map: &Map, add_all: Vec<BlockID>, diff --git a/rustdoc/ltn/logic/shortcuts/struct.Shortcuts.html b/rustdoc/ltn/logic/shortcuts/struct.Shortcuts.html index a65c269759..5a3810da0a 100644 --- a/rustdoc/ltn/logic/shortcuts/struct.Shortcuts.html +++ b/rustdoc/ltn/logic/shortcuts/struct.Shortcuts.html @@ -1,11 +1,11 @@ Shortcuts in ltn::logic::shortcuts - Rust

Struct ltn::logic::shortcuts::Shortcuts

source ·
pub struct Shortcuts {
     pub paths: Vec<PathV2>,
-    pub count_per_road: Counter<RoadID>,
-    pub count_per_intersection: Counter<IntersectionID>,
-}

Fields§

§paths: Vec<PathV2>§count_per_road: Counter<RoadID>§count_per_intersection: Counter<IntersectionID>

Implementations§

source§

impl Shortcuts

source

pub fn empty() -> Self

source

pub fn new( + pub count_per_road: Counter<RoadID>, + pub count_per_intersection: Counter<IntersectionID>, +}

Fields§

§paths: Vec<PathV2>§count_per_road: Counter<RoadID>§count_per_intersection: Counter<IntersectionID>

Implementations§

source§

impl Shortcuts

source

pub fn empty() -> Self

source

pub fn new( map: &Map, neighbourhood: &Neighbourhood, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

source

pub fn from_paths(neighbourhood: &Neighbourhood, paths: Vec<PathV2>) -> Self

source

pub fn quiet_and_total_streets( &self, neighbourhood: &Neighbourhood diff --git a/rustdoc/ltn/logic/struct.Partitioning.html b/rustdoc/ltn/logic/struct.Partitioning.html index 8cd1501c62..72f43216e5 100644 --- a/rustdoc/ltn/logic/struct.Partitioning.html +++ b/rustdoc/ltn/logic/struct.Partitioning.html @@ -7,7 +7,7 @@ pub broken: bool, pub custom_boundaries: BTreeMap<NeighbourhoodID, CustomBoundary>, }

Fields§

§map: MapName§neighbourhoods: BTreeMap<NeighbourhoodID, NeighbourhoodInfo>§single_blocks: Vec<Block>§neighbourhood_id_counter: usize§block_to_neighbourhood: BTreeMap<BlockID, NeighbourhoodID>§broken: bool§custom_boundaries: BTreeMap<NeighbourhoodID, CustomBoundary>

Implementations§

source§

impl Partitioning

source

pub fn empty() -> Partitioning

Only valid before the LTN tool has been activated this session

-
source

pub fn is_empty(&self) -> bool

source

pub fn seed_using_heuristics(map: &Map, timer: &mut Timer<'_>) -> Partitioning

source

pub fn transfer_blocks( +

source

pub fn is_empty(&self) -> bool

source

pub fn seed_using_heuristics(map: &Map, timer: &mut Timer<'_>) -> Partitioning

source

pub fn transfer_blocks( &mut self, map: &Map, add_all: Vec<BlockID>, diff --git a/rustdoc/ltn/logic/struct.Shortcuts.html b/rustdoc/ltn/logic/struct.Shortcuts.html index 037a50fa91..ffbf4f400f 100644 --- a/rustdoc/ltn/logic/struct.Shortcuts.html +++ b/rustdoc/ltn/logic/struct.Shortcuts.html @@ -1,11 +1,11 @@ Shortcuts in ltn::logic - Rust

Struct ltn::logic::Shortcuts

source ·
pub struct Shortcuts {
     pub paths: Vec<PathV2>,
-    pub count_per_road: Counter<RoadID>,
-    pub count_per_intersection: Counter<IntersectionID>,
-}

Fields§

§paths: Vec<PathV2>§count_per_road: Counter<RoadID>§count_per_intersection: Counter<IntersectionID>

Implementations§

source§

impl Shortcuts

source

pub fn empty() -> Self

source

pub fn new( + pub count_per_road: Counter<RoadID>, + pub count_per_intersection: Counter<IntersectionID>, +}

Fields§

§paths: Vec<PathV2>§count_per_road: Counter<RoadID>§count_per_intersection: Counter<IntersectionID>

Implementations§

source§

impl Shortcuts

source

pub fn empty() -> Self

source

pub fn new( map: &Map, neighbourhood: &Neighbourhood, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

source

pub fn from_paths(neighbourhood: &Neighbourhood, paths: Vec<PathV2>) -> Self

source

pub fn quiet_and_total_streets( &self, neighbourhood: &Neighbourhood diff --git a/rustdoc/ltn/pages/about/struct.About.html b/rustdoc/ltn/pages/about/struct.About.html index 5bc468f7d7..4aed4d9258 100644 --- a/rustdoc/ltn/pages/about/struct.About.html +++ b/rustdoc/ltn/pages/about/struct.About.html @@ -9,7 +9,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/ltn/pages/per_resident_impact/struct.PerResidentImpact.html b/rustdoc/ltn/pages/per_resident_impact/struct.PerResidentImpact.html index 0d58071c41..0074b9af6d 100644 --- a/rustdoc/ltn/pages/per_resident_impact/struct.PerResidentImpact.html +++ b/rustdoc/ltn/pages/per_resident_impact/struct.PerResidentImpact.html @@ -18,7 +18,7 @@ app: &App, id: NeighbourhoodID, current_target: Option<BuildingID> -) -> Box<dyn State<App>>

source

fn update(&mut self, ctx: &mut EventCtx<'_>, app: &App)

source

fn recalculate_times(&mut self, app: &App, timer: &mut Timer<'_>)

source

fn compare_routes( +) -> Box<dyn State<App>>

source

fn update(&mut self, ctx: &mut EventCtx<'_>, app: &App)

source

fn recalculate_times(&mut self, app: &App, timer: &mut Timer<'_>)

source

fn compare_routes( &self, ctx: &EventCtx<'_>, app: &App, diff --git a/rustdoc/ltn/pages/struct.About.html b/rustdoc/ltn/pages/struct.About.html index cce93714cc..336260c655 100644 --- a/rustdoc/ltn/pages/struct.About.html +++ b/rustdoc/ltn/pages/struct.About.html @@ -9,7 +9,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/ltn/pages/struct.PerResidentImpact.html b/rustdoc/ltn/pages/struct.PerResidentImpact.html index 18cd6cde90..6b8020dd5a 100644 --- a/rustdoc/ltn/pages/struct.PerResidentImpact.html +++ b/rustdoc/ltn/pages/struct.PerResidentImpact.html @@ -18,7 +18,7 @@ app: &App, id: NeighbourhoodID, current_target: Option<BuildingID> -) -> Box<dyn State<App>>

source

fn update(&mut self, ctx: &mut EventCtx<'_>, app: &App)

source

fn recalculate_times(&mut self, app: &App, timer: &mut Timer<'_>)

source

fn compare_routes( +) -> Box<dyn State<App>>

source

fn update(&mut self, ctx: &mut EventCtx<'_>, app: &App)

source

fn recalculate_times(&mut self, app: &App, timer: &mut Timer<'_>)

source

fn compare_routes( &self, ctx: &EventCtx<'_>, app: &App, diff --git a/rustdoc/ltn/save/share/struct.ShareProposal.html b/rustdoc/ltn/save/share/struct.ShareProposal.html index 682b7b7083..f1f0bf5ccf 100644 --- a/rustdoc/ltn/save/share/struct.ShareProposal.html +++ b/rustdoc/ltn/save/share/struct.ShareProposal.html @@ -11,7 +11,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/ltn/save/struct.Proposals.html b/rustdoc/ltn/save/struct.Proposals.html index 680cfa5bf5..e4d0db73d7 100644 --- a/rustdoc/ltn/save/struct.Proposals.html +++ b/rustdoc/ltn/save/struct.Proposals.html @@ -6,7 +6,7 @@ app: &mut App, preserve_state: &PreserveState, action: &str -) -> Option<Transition>

source§

impl Proposals

source

pub fn new(map: &Map, timer: &mut Timer<'_>) -> Self

source

pub fn get_current(&self) -> &Proposal

source

pub fn force_current_to_basemap(&mut self)

source

pub fn before_edit(&mut self, edits: MapEdits)

Call before making any changes

+) -> Option<Transition>

source§

impl Proposals

source

pub fn new(map: &Map, timer: &mut Timer<'_>) -> Self

source

pub fn get_current(&self) -> &Proposal

source

pub fn force_current_to_basemap(&mut self)

source

pub fn before_edit(&mut self, edits: MapEdits)

Call before making any changes

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/ltn/struct.App.html b/rustdoc/ltn/struct.App.html index ca3c88e84a..28edc2738c 100644 --- a/rustdoc/ltn/struct.App.html +++ b/rustdoc/ltn/struct.App.html @@ -18,7 +18,7 @@ &mut self, ctx: &mut EventCtx<'_>, map: Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, _l: DrawOptions)

source§

fn make_warper( &mut self, ctx: &EventCtx<'_>, @@ -44,7 +44,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, @@ -64,7 +64,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/ltn/struct.PerMap.html b/rustdoc/ltn/struct.PerMap.html index 51b83802e9..71efab8fd0 100644 --- a/rustdoc/ltn/struct.PerMap.html +++ b/rustdoc/ltn/struct.PerMap.html @@ -19,7 +19,7 @@ map: Map, opts: &Options, cs: &ColorScheme, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Auto Trait Implementations§

§

impl !Freeze for PerMap

§

impl !RefUnwindSafe for PerMap

§

impl !Send for PerMap

§

impl !Sync for PerMap

§

impl Unpin for PerMap

§

impl !UnwindSafe for PerMap

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/map_editor/app/struct.App.html b/rustdoc/map_editor/app/struct.App.html index 43b8f440ac..aa4787b1c2 100644 --- a/rustdoc/map_editor/app/struct.App.html +++ b/rustdoc/map_editor/app/struct.App.html @@ -23,7 +23,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn on_mouseover(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Called when the mouse has moved.
source§

impl State<App> for MainState

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, app: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving the State-specific state appropriately.
source§

impl State<App> for PickMap

source§

fn event(&mut self, ctx: &mut EventCtx<'_>, app: &mut App) -> Transition<App>

Respond to a UI event, such as input or time passing.
source§

fn draw(&self, g: &mut GfxCtx<'_>, _: &App)

Draw
§

fn draw_baselayer(&self) -> DrawBaselayer

Specifies what to draw before draw()
§

fn on_destroy(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Before this state is popped or replaced, call this.
§

fn recreate(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Box<dyn State<A>>

Respond to Transition::Recreate by assuming state in the app has changed, but preserving diff --git a/rustdoc/map_editor/edit/struct.EditRoad.html b/rustdoc/map_editor/edit/struct.EditRoad.html index 0807ce705c..cadc38a942 100644 --- a/rustdoc/map_editor/edit/struct.EditRoad.html +++ b/rustdoc/map_editor/edit/struct.EditRoad.html @@ -27,7 +27,7 @@ call this to handle all other events.
&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn on_mouseover(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Called when the mouse has moved.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/map_editor/model/fn.dump_to_osm.html b/rustdoc/map_editor/model/fn.dump_to_osm.html index 3be0cb8f3a..6a7f22d73c 100644 --- a/rustdoc/map_editor/model/fn.dump_to_osm.html +++ b/rustdoc/map_editor/model/fn.dump_to_osm.html @@ -1,4 +1,4 @@ -dump_to_osm in map_editor::model - Rust

Function map_editor::model::dump_to_osm

source ·
fn dump_to_osm(map: &RawMap) -> Result<(), Error>
Expand description

Express a RawMap as a .osm file. Why not just save the RawMap? The format may change over time, +dump_to_osm in map_editor::model - Rust

Function map_editor::model::dump_to_osm

source ·
fn dump_to_osm(map: &RawMap) -> Result<(), Error>
Expand description

Express a RawMap as a .osm file. Why not just save the RawMap? The format may change over time, and even if a RawMap is saved as JSON, manually updating it is annoying. This is used to create synthetic maps that will never go bad – there will always be a pipeline to import a .osm file, so actually, .osm is a stable-over-time format.

diff --git a/rustdoc/map_editor/model/struct.Model.html b/rustdoc/map_editor/model/struct.Model.html index 2a14cf80cc..372457bf75 100644 --- a/rustdoc/map_editor/model/struct.Model.html +++ b/rustdoc/map_editor/model/struct.Model.html @@ -1,15 +1,15 @@ Model in map_editor::model - Rust

Struct map_editor::model::Model

source ·
pub struct Model {
-    pub map: RawMap,
+    pub map: RawMap,
     showing_pts: Option<RoadID>,
     pub world: World<ID>,
     pub include_bldgs: bool,
     pub intersection_geom: bool,
-}

Fields§

§map: RawMap§showing_pts: Option<RoadID>§world: World<ID>§include_bldgs: bool§intersection_geom: bool

Implementations§

source§

impl Model

source

pub fn blank() -> Model

source

pub fn from_map( +}

Fields§

§map: RawMap§showing_pts: Option<RoadID>§world: World<ID>§include_bldgs: bool§intersection_geom: bool

Implementations§

source§

impl Model

source

pub fn blank() -> Model

source

pub fn from_map( ctx: &EventCtx<'_>, - map: RawMap, + map: RawMap, include_bldgs: bool, - timer: &mut Timer<'_> -) -> Model

source

pub fn recreate_world(&mut self, ctx: &EventCtx<'_>, timer: &mut Timer<'_>)

source§

impl Model

source

pub fn export_to_osm(&mut self)

source

pub fn set_boundary( + timer: &mut Timer<'_> +) -> Model

source

pub fn recreate_world(&mut self, ctx: &EventCtx<'_>, timer: &mut Timer<'_>)

source§

impl Model

source

pub fn export_to_osm(&mut self)

source

pub fn set_boundary( &mut self, ctx: &EventCtx<'_>, top_left: Pt2D, diff --git a/rustdoc/map_gui/render/map/struct.DrawMap.html b/rustdoc/map_gui/render/map/struct.DrawMap.html index a2b7efd74a..55a4b3ee29 100644 --- a/rustdoc/map_gui/render/map/struct.DrawMap.html +++ b/rustdoc/map_gui/render/map/struct.DrawMap.html @@ -19,13 +19,13 @@ map: &Map, opts: &Options, cs: &ColorScheme, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> DrawMap

source

pub fn regenerate_buildings( ctx: &EventCtx<'_>, map: &Map, cs: &ColorScheme, opts: &Options, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (Vec<DrawBuilding>, Drawable, Drawable)

source

pub fn regenerate_parking_lots( ctx: &EventCtx<'_>, map: &Map, @@ -36,7 +36,7 @@ map: &Map, cs: &ColorScheme, opts: &Options, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Drawable

source

pub fn get_r(&self, id: RoadID) -> &DrawRoad

source

pub fn get_l(&self, id: LaneID) -> &DrawLane

source

pub fn get_i(&self, id: IntersectionID) -> &DrawIntersection

source

pub fn get_b(&self, id: BuildingID) -> &DrawBuilding

source

pub fn get_pl(&self, id: ParkingLotID) -> &DrawParkingLot

source

pub fn get_ts(&self, id: TransitStopID) -> &DrawTransitStop

source

pub fn get_a(&self, id: AreaID) -> &DrawArea

source

pub fn get_obj<'a>(&self, id: ID) -> &dyn Renderable

source

pub fn get_matching_objects(&self, bounds: Bounds) -> Vec<ID>

Unsorted, unexpanded, raw result.

source

pub fn get_renderables_back_to_front( &self, diff --git a/rustdoc/map_gui/render/struct.DrawMap.html b/rustdoc/map_gui/render/struct.DrawMap.html index 4be82272a7..1092b254ef 100644 --- a/rustdoc/map_gui/render/struct.DrawMap.html +++ b/rustdoc/map_gui/render/struct.DrawMap.html @@ -19,13 +19,13 @@ map: &Map, opts: &Options, cs: &ColorScheme, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> DrawMap

source

pub fn regenerate_buildings( ctx: &EventCtx<'_>, map: &Map, cs: &ColorScheme, opts: &Options, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (Vec<DrawBuilding>, Drawable, Drawable)

source

pub fn regenerate_parking_lots( ctx: &EventCtx<'_>, map: &Map, @@ -36,7 +36,7 @@ map: &Map, cs: &ColorScheme, opts: &Options, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Drawable

source

pub fn get_r(&self, id: RoadID) -> &DrawRoad

source

pub fn get_l(&self, id: LaneID) -> &DrawLane

source

pub fn get_i(&self, id: IntersectionID) -> &DrawIntersection

source

pub fn get_b(&self, id: BuildingID) -> &DrawBuilding

source

pub fn get_pl(&self, id: ParkingLotID) -> &DrawParkingLot

source

pub fn get_ts(&self, id: TransitStopID) -> &DrawTransitStop

source

pub fn get_a(&self, id: AreaID) -> &DrawArea

source

pub fn get_obj<'a>(&self, id: ID) -> &dyn Renderable

source

pub fn get_matching_objects(&self, bounds: Bounds) -> Vec<ID>

Unsorted, unexpanded, raw result.

source

pub fn get_renderables_back_to_front( &self, diff --git a/rustdoc/map_gui/simple_app/struct.SimpleApp.html b/rustdoc/map_gui/simple_app/struct.SimpleApp.html index 886c04501f..6fc67f35d1 100644 --- a/rustdoc/map_gui/simple_app/struct.SimpleApp.html +++ b/rustdoc/map_gui/simple_app/struct.SimpleApp.html @@ -30,7 +30,7 @@ &mut self, ctx: &mut EventCtx<'_>, map: Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

source§

fn make_warper( &mut self, ctx: &EventCtx<'_>, diff --git a/rustdoc/map_gui/struct.SimpleApp.html b/rustdoc/map_gui/struct.SimpleApp.html index 1a8104ae8f..93a1385648 100644 --- a/rustdoc/map_gui/struct.SimpleApp.html +++ b/rustdoc/map_gui/struct.SimpleApp.html @@ -30,7 +30,7 @@ &mut self, ctx: &mut EventCtx<'_>, map: Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

source§

fn make_warper( &mut self, ctx: &EventCtx<'_>, diff --git a/rustdoc/map_gui/tools/colors/struct.ColorNetwork.html b/rustdoc/map_gui/tools/colors/struct.ColorNetwork.html index a644e66c80..8d0af5877e 100644 --- a/rustdoc/map_gui/tools/colors/struct.ColorNetwork.html +++ b/rustdoc/map_gui/tools/colors/struct.ColorNetwork.html @@ -1,13 +1,13 @@ ColorNetwork in map_gui::tools::colors - Rust

Struct map_gui::tools::colors::ColorNetwork

source ·
pub struct ColorNetwork<'a> {
     map: &'a Map,
     pub draw: ToggleZoomedBuilder,
-}

Fields§

§map: &'a Map§draw: ToggleZoomedBuilder

Implementations§

source§

impl<'a> ColorNetwork<'a>

source

pub fn new(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn no_fading(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn add_l(&mut self, l: LaneID, color: Color)

source

pub fn add_r(&mut self, r: RoadID, color: Color)

source

pub fn add_i(&mut self, i: IntersectionID, color: Color)

source

pub fn add_b(&mut self, b: BuildingID, color: Color)

source

pub fn add_pl(&mut self, pl: ParkingLotID, color: Color)

source

pub fn ranked_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn ranked_intersections( +}

Fields§

§map: &'a Map§draw: ToggleZoomedBuilder

Implementations§

source§

impl<'a> ColorNetwork<'a>

source

pub fn new(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn no_fading(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn add_l(&mut self, l: LaneID, color: Color)

source

pub fn add_r(&mut self, r: RoadID, color: Color)

source

pub fn add_i(&mut self, i: IntersectionID, color: Color)

source

pub fn add_b(&mut self, b: BuildingID, color: Color)

source

pub fn add_pl(&mut self, pl: ParkingLotID, color: Color)

source

pub fn ranked_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn ranked_intersections( &mut self, - counter: Counter<IntersectionID>, + counter: Counter<IntersectionID>, scale: &ColorScale -)

source

pub fn pct_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn pct_intersections( +)

source

pub fn pct_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn pct_intersections( &mut self, - counter: Counter<IntersectionID>, + counter: Counter<IntersectionID>, scale: &ColorScale )

source

pub fn build(self, ctx: &EventCtx<'_>) -> ToggleZoomed

Auto Trait Implementations§

§

impl<'a> Freeze for ColorNetwork<'a>

§

impl<'a> RefUnwindSafe for ColorNetwork<'a>

§

impl<'a> Send for ColorNetwork<'a>

§

impl<'a> Sync for ColorNetwork<'a>

§

impl<'a> Unpin for ColorNetwork<'a>

§

impl<'a> UnwindSafe for ColorNetwork<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/map_gui/tools/labels/struct.DrawSimpleRoadLabels.html b/rustdoc/map_gui/tools/labels/struct.DrawSimpleRoadLabels.html index b31984ac84..f479925204 100644 --- a/rustdoc/map_gui/tools/labels/struct.DrawSimpleRoadLabels.html +++ b/rustdoc/map_gui/tools/labels/struct.DrawSimpleRoadLabels.html @@ -24,7 +24,7 @@ labels are only meant to be legible when zoomed in.

&mut self, ctx: &mut EventCtx<'_>, app: &dyn AppLike, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/map_gui/tools/struct.ColorNetwork.html b/rustdoc/map_gui/tools/struct.ColorNetwork.html index b54d7c3541..090802ca7e 100644 --- a/rustdoc/map_gui/tools/struct.ColorNetwork.html +++ b/rustdoc/map_gui/tools/struct.ColorNetwork.html @@ -1,13 +1,13 @@ ColorNetwork in map_gui::tools - Rust

Struct map_gui::tools::ColorNetwork

source ·
pub struct ColorNetwork<'a> {
     map: &'a Map,
     pub draw: ToggleZoomedBuilder,
-}

Fields§

§map: &'a Map§draw: ToggleZoomedBuilder

Implementations§

source§

impl<'a> ColorNetwork<'a>

source

pub fn new(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn no_fading(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn add_l(&mut self, l: LaneID, color: Color)

source

pub fn add_r(&mut self, r: RoadID, color: Color)

source

pub fn add_i(&mut self, i: IntersectionID, color: Color)

source

pub fn add_b(&mut self, b: BuildingID, color: Color)

source

pub fn add_pl(&mut self, pl: ParkingLotID, color: Color)

source

pub fn ranked_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn ranked_intersections( +}

Fields§

§map: &'a Map§draw: ToggleZoomedBuilder

Implementations§

source§

impl<'a> ColorNetwork<'a>

source

pub fn new(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn no_fading(app: &'a dyn AppLike) -> ColorNetwork<'_>

source

pub fn add_l(&mut self, l: LaneID, color: Color)

source

pub fn add_r(&mut self, r: RoadID, color: Color)

source

pub fn add_i(&mut self, i: IntersectionID, color: Color)

source

pub fn add_b(&mut self, b: BuildingID, color: Color)

source

pub fn add_pl(&mut self, pl: ParkingLotID, color: Color)

source

pub fn ranked_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn ranked_intersections( &mut self, - counter: Counter<IntersectionID>, + counter: Counter<IntersectionID>, scale: &ColorScale -)

source

pub fn pct_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn pct_intersections( +)

source

pub fn pct_roads(&mut self, counter: Counter<RoadID>, scale: &ColorScale)

source

pub fn pct_intersections( &mut self, - counter: Counter<IntersectionID>, + counter: Counter<IntersectionID>, scale: &ColorScale )

source

pub fn build(self, ctx: &EventCtx<'_>) -> ToggleZoomed

Auto Trait Implementations§

§

impl<'a> Freeze for ColorNetwork<'a>

§

impl<'a> RefUnwindSafe for ColorNetwork<'a>

§

impl<'a> Send for ColorNetwork<'a>

§

impl<'a> Sync for ColorNetwork<'a>

§

impl<'a> Unpin for ColorNetwork<'a>

§

impl<'a> UnwindSafe for ColorNetwork<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/map_gui/tools/struct.DrawSimpleRoadLabels.html b/rustdoc/map_gui/tools/struct.DrawSimpleRoadLabels.html index 6bdb9bfcdd..2184f3507a 100644 --- a/rustdoc/map_gui/tools/struct.DrawSimpleRoadLabels.html +++ b/rustdoc/map_gui/tools/struct.DrawSimpleRoadLabels.html @@ -24,7 +24,7 @@ labels are only meant to be legible when zoomed in.

&mut self, ctx: &mut EventCtx<'_>, app: &dyn AppLike, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/map_gui/tools/struct.TitleScreen.html b/rustdoc/map_gui/tools/struct.TitleScreen.html index 24b9bac146..3f69161b2d 100644 --- a/rustdoc/map_gui/tools/struct.TitleScreen.html +++ b/rustdoc/map_gui/tools/struct.TitleScreen.html @@ -24,7 +24,7 @@ the fallback case can just use unreachable!().

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/map_gui/tools/title_screen/built_info/constant.BUILT_TIME_UTC.html b/rustdoc/map_gui/tools/title_screen/built_info/constant.BUILT_TIME_UTC.html index 2cd0b8c6be..a9f0e09e64 100644 --- a/rustdoc/map_gui/tools/title_screen/built_info/constant.BUILT_TIME_UTC.html +++ b/rustdoc/map_gui/tools/title_screen/built_info/constant.BUILT_TIME_UTC.html @@ -1,2 +1,2 @@ -BUILT_TIME_UTC in map_gui::tools::title_screen::built_info - Rust

Constant map_gui::tools::title_screen::built_info::BUILT_TIME_UTC

source ·
pub const BUILT_TIME_UTC: &str = r"Tue, 9 Jul 2024 20:04:52 +0000";
Expand description

The build time in RFC2822, UTC.

+BUILT_TIME_UTC in map_gui::tools::title_screen::built_info - Rust

Constant map_gui::tools::title_screen::built_info::BUILT_TIME_UTC

source ·
pub const BUILT_TIME_UTC: &str = r"Tue, 9 Jul 2024 20:15:38 +0000";
Expand description

The build time in RFC2822, UTC.

\ No newline at end of file diff --git a/rustdoc/map_gui/tools/title_screen/struct.TitleScreen.html b/rustdoc/map_gui/tools/title_screen/struct.TitleScreen.html index 92be13dfcf..13a8097659 100644 --- a/rustdoc/map_gui/tools/title_screen/struct.TitleScreen.html +++ b/rustdoc/map_gui/tools/title_screen/struct.TitleScreen.html @@ -24,7 +24,7 @@ the fallback case can just use unreachable!().
&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/map_gui/tools/trip_files/struct.RenameTrip.html b/rustdoc/map_gui/tools/trip_files/struct.RenameTrip.html index e117157f4e..bf325722cf 100644 --- a/rustdoc/map_gui/tools/trip_files/struct.RenameTrip.html +++ b/rustdoc/map_gui/tools/trip_files/struct.RenameTrip.html @@ -24,7 +24,7 @@ the event and immediately apply the transition.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn on_mouseover(&mut self, _: &mut EventCtx<'_>, _: &mut A)

Called when the mouse has moved.
§

fn other_event(&mut self, _: &mut EventCtx<'_>, _: &mut A) -> Transition<A>

If a panel on_click event didn’t occur and panel_changed didn’t return transition, then call this to handle all other events.
§

fn draw_baselayer(&self) -> DrawBaselayer

Auto Trait Implementations§

§

impl<A, S> Freeze for RenameTrip<A, S>

§

impl<A, S> !RefUnwindSafe for RenameTrip<A, S>

§

impl<A, S> !Send for RenameTrip<A, S>

§

impl<A, S> !Sync for RenameTrip<A, S>

§

impl<A, S> !Unpin for RenameTrip<A, S>

§

impl<A, S> !UnwindSafe for RenameTrip<A, S>

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/map_gui/trait.AppLike.html b/rustdoc/map_gui/trait.AppLike.html index 77b583b834..065054f7c6 100644 --- a/rustdoc/map_gui/trait.AppLike.html +++ b/rustdoc/map_gui/trait.AppLike.html @@ -11,7 +11,7 @@ &mut self, ctx: &mut EventCtx<'_>, map: Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ); fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions); fn make_warper( @@ -41,7 +41,7 @@ implements widgetry::SharedAppState, so that the tools here can acc &mut self, ctx: &mut EventCtx<'_>, map: Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

source

fn make_warper( &mut self, ctx: &EventCtx<'_>, diff --git a/rustdoc/map_model/city/struct.City.html b/rustdoc/map_model/city/struct.City.html index a0c73c494a..7fda2872d1 100644 --- a/rustdoc/map_model/city/struct.City.html +++ b/rustdoc/map_model/city/struct.City.html @@ -7,7 +7,7 @@ ballard, downtown, etc). The load map screen uses this struct to display the entire city.

Fields§

§name: CityName§boundary: Polygon§areas: Vec<(AreaType, Polygon)>§districts: Vec<(MapName, Polygon)>

The individual maps

Implementations§

source§

impl City

source

pub fn from_huge_map(huge_map: &Map) -> City

If there’s a single map covering all the smaller maps, use this.

-
source

pub fn from_individual_maps(city_name: &CityName, timer: &mut Timer<'_>) -> City

Generate a city from a bunch of smaller, individual maps. The boundaries of those maps +

source

pub fn from_individual_maps(city_name: &CityName, timer: &mut Timer<'_>) -> City

Generate a city from a bunch of smaller, individual maps. The boundaries of those maps may overlap and may have gaps between them.

Trait Implementations§

source§

impl<'de> Deserialize<'de> for City

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for City

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where diff --git a/rustdoc/map_model/edits/struct.MapEdits.html b/rustdoc/map_model/edits/struct.MapEdits.html index e9f122476a..81dd3c821f 100644 --- a/rustdoc/map_model/edits/struct.MapEdits.html +++ b/rustdoc/map_model/edits/struct.MapEdits.html @@ -17,7 +17,7 @@ proposals.” They require a description and may have a link to a write-up.

source§

impl MapEdits

source

pub(crate) fn new() -> MapEdits

source

pub fn load_from_file( map: &Map, path: String, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Result<MapEdits>

Load map edits from a JSON file. Strip out any commands that’re broken because they don’t match the current map. If the resulting edits are totally empty, consider that a failure – the edits likely don’t cover this map at all.

diff --git a/rustdoc/map_model/make/bridges/fn.find_bridges.html b/rustdoc/map_model/make/bridges/fn.find_bridges.html index 0d1638df06..127ddf37d1 100644 --- a/rustdoc/map_model/make/bridges/fn.find_bridges.html +++ b/rustdoc/map_model/make/bridges/fn.find_bridges.html @@ -1,3 +1,3 @@ -find_bridges in map_model::make::bridges - Rust

Function map_model::make::bridges::find_bridges

source ·
pub fn find_bridges(roads: &mut Vec<Road>, timer: &mut Timer<'_>)
Expand description

Look for roads underneath bridges, then lower their z-order. OSM tags bridges and tunnels, but +find_bridges in map_model::make::bridges - Rust

Function map_model::make::bridges::find_bridges

source ·
pub fn find_bridges(roads: &mut Vec<Road>, timer: &mut Timer<'_>)
Expand description

Look for roads underneath bridges, then lower their z-order. OSM tags bridges and tunnels, but not the roads that pass under bridges.

\ No newline at end of file diff --git a/rustdoc/map_model/make/buildings/fn.classify_bldg.html b/rustdoc/map_model/make/buildings/fn.classify_bldg.html index 4504a16da9..647632a478 100644 --- a/rustdoc/map_model/make/buildings/fn.classify_bldg.html +++ b/rustdoc/map_model/make/buildings/fn.classify_bldg.html @@ -1,5 +1,5 @@ classify_bldg in map_model::make::buildings - Rust

Function map_model::make::buildings::classify_bldg

source ·
fn classify_bldg(
-    tags: &Tags,
+    tags: &Tags,
     amenities: &[Amenity],
     levels: f64,
     ground_area_sq_meters: f64,
diff --git a/rustdoc/map_model/make/buildings/fn.get_address.html b/rustdoc/map_model/make/buildings/fn.get_address.html
index 04122263eb..6d4fbe8b60 100644
--- a/rustdoc/map_model/make/buildings/fn.get_address.html
+++ b/rustdoc/map_model/make/buildings/fn.get_address.html
@@ -1 +1 @@
-get_address in map_model::make::buildings - Rust

Function map_model::make::buildings::get_address

source ·
fn get_address(tags: &Tags, sidewalk: LaneID, map: &Map) -> String
\ No newline at end of file +get_address in map_model::make::buildings - Rust

Function map_model::make::buildings::get_address

source ·
fn get_address(tags: &Tags, sidewalk: LaneID, map: &Map) -> String
\ No newline at end of file diff --git a/rustdoc/map_model/make/buildings/fn.make_all_buildings.html b/rustdoc/map_model/make/buildings/fn.make_all_buildings.html index 3d98337d4a..453979ccce 100644 --- a/rustdoc/map_model/make/buildings/fn.make_all_buildings.html +++ b/rustdoc/map_model/make/buildings/fn.make_all_buildings.html @@ -2,6 +2,6 @@ input: &BTreeMap<OsmID, RawBuilding>, map: &Map, keep_bldg_tags: bool, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Vec<Building>
Expand description

Finalize importing of buildings, mostly by matching them to the nearest sidewalk.

\ No newline at end of file diff --git a/rustdoc/map_model/make/fn.match_points_to_lanes.html b/rustdoc/map_model/make/fn.match_points_to_lanes.html index 48f406391a..df39c600ee 100644 --- a/rustdoc/map_model/make/fn.match_points_to_lanes.html +++ b/rustdoc/map_model/make/fn.match_points_to_lanes.html @@ -4,7 +4,7 @@ filter: F, buffer: Distance, max_dist_away: Distance, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> HashMap<HashablePt2D, Position>
Expand description

Snap points to an exact Position along the nearest lane. If the result doesn’t contain a requested point, then there was no matching lane close enough.

\ No newline at end of file diff --git a/rustdoc/map_model/make/parking_lots/fn.make_all_parking_lots.html b/rustdoc/map_model/make/parking_lots/fn.make_all_parking_lots.html index 7725e8b5c6..0ac16014ed 100644 --- a/rustdoc/map_model/make/parking_lots/fn.make_all_parking_lots.html +++ b/rustdoc/map_model/make/parking_lots/fn.make_all_parking_lots.html @@ -2,7 +2,7 @@ input: &[RawParkingLot], aisles: &[(WayID, Vec<Pt2D>)], map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Vec<ParkingLot>
Expand description

Take in parking lots from OSM and all parking aisle roads. Match parking lots to the nearest sidewalk + driving lane, then automatically generate individual parking spots perpendicular to the aisles.

diff --git a/rustdoc/map_model/make/transit/fn.finalize_transit.html b/rustdoc/map_model/make/transit/fn.finalize_transit.html index 73247a7e0d..44949dfa7b 100644 --- a/rustdoc/map_model/make/transit/fn.finalize_transit.html +++ b/rustdoc/map_model/make/transit/fn.finalize_transit.html @@ -1 +1 @@ -finalize_transit in map_model::make::transit - Rust

Function map_model::make::transit::finalize_transit

source ·
pub fn finalize_transit(map: &mut Map, raw: &RawMap, timer: &mut Timer<'_>)
\ No newline at end of file +finalize_transit in map_model::make::transit - Rust

Function map_model::make::transit::finalize_transit

source ·
pub fn finalize_transit(map: &mut Map, raw: &RawMap, timer: &mut Timer<'_>)
\ No newline at end of file diff --git a/rustdoc/map_model/objects/area/struct.Area.html b/rustdoc/map_model/objects/area/struct.Area.html index 43ebe9bacf..7014849d73 100644 --- a/rustdoc/map_model/objects/area/struct.Area.html +++ b/rustdoc/map_model/objects/area/struct.Area.html @@ -2,10 +2,10 @@ pub id: AreaID, pub area_type: AreaType, pub polygon: Polygon, - pub osm_tags: Tags, + pub osm_tags: Tags, pub osm_id: Option<OsmID>, }
Expand description

Areas are just used for drawing.

-

Fields§

§id: AreaID§area_type: AreaType§polygon: Polygon§osm_tags: Tags§osm_id: Option<OsmID>

The importing process also automatically creates some areas, so they don’t come from OSM.

+

Fields§

§id: AreaID§area_type: AreaType§polygon: Polygon§osm_tags: Tags§osm_id: Option<OsmID>

The importing process also automatically creates some areas, so they don’t come from OSM.

Trait Implementations§

source§

impl Clone for Area

source§

fn clone(&self) -> Area

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Area

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Area

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Area

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Area

§

impl RefUnwindSafe for Area

§

impl Send for Area

§

impl Sync for Area

§

impl Unpin for Area

§

impl UnwindSafe for Area

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/map_model/objects/building/struct.Building.html b/rustdoc/map_model/objects/building/struct.Building.html index 1f6570d42f..cbf57dd05d 100644 --- a/rustdoc/map_model/objects/building/struct.Building.html +++ b/rustdoc/map_model/objects/building/struct.Building.html @@ -9,14 +9,14 @@ pub amenities: Vec<Amenity>, pub bldg_type: BuildingType, pub parking: OffstreetParking, - pub osm_tags: Tags, + pub osm_tags: Tags, pub sidewalk_pos: Position, pub driveway_geom: PolyLine,

}
Expand description

A building has connections to the road and sidewalk, may contain commercial amenities, and have off-street parking.

Fields§

§id: BuildingID§polygon: Polygon§levels: f64§address: String§name: Option<NamePerLanguage>§orig_id: OsmID§label_center: Pt2D

Where a text label should be centered to have the best chances of being contained within the polygon.

-
§amenities: Vec<Amenity>§bldg_type: BuildingType§parking: OffstreetParking§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

+
§amenities: Vec<Amenity>§bldg_type: BuildingType§parking: OffstreetParking§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

§sidewalk_pos: Position

The building’s connection for any agent can change based on map edits. Just store the one for pedestrians and lazily calculate the others.

§driveway_geom: PolyLine

Goes from building to sidewalk

diff --git a/rustdoc/map_model/objects/road/struct.Road.html b/rustdoc/map_model/objects/road/struct.Road.html index 5d8ccc231c..5f844275cd 100644 --- a/rustdoc/map_model/objects/road/struct.Road.html +++ b/rustdoc/map_model/objects/road/struct.Road.html @@ -1,6 +1,6 @@ Road in map_model::objects::road - Rust

Struct map_model::objects::road::Road

source ·
pub struct Road {
Show 23 fields pub id: RoadID, - pub osm_tags: Tags, + pub osm_tags: Tags, pub turn_restrictions: Vec<(RestrictionType, RoadID)>, pub complicated_turn_restrictions: Vec<(RoadID, RoadID)>, pub orig_id: OriginalRoad, @@ -23,7 +23,7 @@ pub crossing_nodes: Vec<(Distance, CrossingType)>, pub crossings: Vec<Crossing>,
}
Expand description

A Road represents a segment between exactly two Intersections. It contains Lanes as children.

-

Fields§

§id: RoadID§osm_tags: Tags§turn_restrictions: Vec<(RestrictionType, RoadID)>

self is ‘from’

+

Fields§

§id: RoadID§osm_tags: Tags§turn_restrictions: Vec<(RestrictionType, RoadID)>

self is ‘from’

§complicated_turn_restrictions: Vec<(RoadID, RoadID)>

self is ‘from’. (via, to). Only BanTurns.

§orig_id: OriginalRoad§speed_limit: Speed§access_restrictions: AccessRestrictions§zorder: isize§percent_incline: f64

[-1.0, 1.0] theoretically, but in practice, about [-0.25, 0.25]. 0 is flat, positive is uphill from src_i -> dst_i, negative is downhill.

diff --git a/rustdoc/map_model/pathfind/pathfinder/struct.Pathfinder.html b/rustdoc/map_model/pathfind/pathfinder/struct.Pathfinder.html index b80253e5fd..b73d66cc3f 100644 --- a/rustdoc/map_model/pathfind/pathfinder/struct.Pathfinder.html +++ b/rustdoc/map_model/pathfind/pathfinder/struct.Pathfinder.html @@ -6,26 +6,26 @@ walking_graph: SidewalkPathfinder, walking_with_transit_graph: SidewalkPathfinder, params: RoutingParams, - cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>, -}

Fields§

§car_graph: VehiclePathfinder§bike_graph: VehiclePathfinder§bus_graph: VehiclePathfinder§train_graph: VehiclePathfinder§walking_graph: SidewalkPathfinder§walking_with_transit_graph: SidewalkPathfinder§params: RoutingParams§cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>

Implementations§

source§

impl Pathfinder

source

pub fn empty() -> Pathfinder

Quickly create an invalid pathfinder, just to make borrow checking / initialization order + cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>, +}

Fields§

§car_graph: VehiclePathfinder§bike_graph: VehiclePathfinder§bus_graph: VehiclePathfinder§train_graph: VehiclePathfinder§walking_graph: SidewalkPathfinder§walking_with_transit_graph: SidewalkPathfinder§params: RoutingParams§cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>

Implementations§

source§

impl Pathfinder

source

pub fn empty() -> Pathfinder

Quickly create an invalid pathfinder, just to make borrow checking / initialization order work.

source

pub(crate) fn new( map: &Map, params: RoutingParams, engine: &CreateEngine<'_>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Pathfinder

source

pub fn new_dijkstra( map: &Map, params: RoutingParams, modes: Vec<PathConstraints>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Create a new Pathfinder with custom routing params that can only serve some modes. Fast to create, slow to use.

source

pub fn new_ch( map: &Map, params: RoutingParams, modes: Vec<PathConstraints>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Create a new Pathfinder with custom routing params that can only serve some modes. Slow to create, fast to use. Doesn’t re-use the node ordering when building the CH.

source

pub(crate) fn new_limited( @@ -33,7 +33,7 @@ create, fast to use. Doesn’t re-use the node ordering when building the CH.

RoutingParams, engine: CreateEngine<'_>, modes: Vec<PathConstraints>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Pathfinder

Create a new Pathfinder with custom routing params that can only serve some modes.

source

pub(crate) fn finalize_transit(&mut self, map: &Map, engine: &CreateEngine<'_>)

source

pub fn pathfind(&self, req: PathRequest, map: &Map) -> Option<PathV2>

Finds a path from a start to an end for a certain type of agent.

source

pub fn pathfind_v2(&self, req: PathRequest, map: &Map) -> Option<PathV2>

Finds a path from a start to an end for a certain type of agent. Uses the RoutingParams @@ -56,7 +56,7 @@ intermediate graph is saved to speed up future calls with the same routing param map: &Map, start: Position, end: Position -) -> Option<(TransitStopID, Option<TransitStopID>, TransitRouteID)>

source

pub(crate) fn apply_edits(&mut self, map: &Map, timer: &mut Timer<'_>)

Trait Implementations§

source§

impl Clone for Pathfinder

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for Pathfinder

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>

source

pub(crate) fn apply_edits(&mut self, map: &Map, timer: &mut Timer<'_>)

Trait Implementations§

source§

impl Clone for Pathfinder

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for Pathfinder

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Pathfinder

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/map_model/pathfind/pathfinder/struct.PathfinderCache.html b/rustdoc/map_model/pathfind/pathfinder/struct.PathfinderCache.html index 48832c883d..55cf04ffe5 100644 --- a/rustdoc/map_model/pathfind/pathfinder/struct.PathfinderCache.html +++ b/rustdoc/map_model/pathfind/pathfinder/struct.PathfinderCache.html @@ -1,8 +1,8 @@ PathfinderCache in map_model::pathfind::pathfinder - Rust

Struct map_model::pathfind::pathfinder::PathfinderCache

source ·
pub struct PathfinderCache {
-    cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>,
+    cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>,
 }
Expand description

For callers needing to request paths with a variety of RoutingParams. The caller is in charge of the lifetime, so they can clear it out when appropriate.

-

Fields§

§cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>

Implementations§

source§

impl PathfinderCache

source

pub fn new() -> Self

source

pub fn pathfind_with_params( +

Fields§

§cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>

Implementations§

source§

impl PathfinderCache

source

pub fn new() -> Self

source

pub fn pathfind_with_params( &mut self, map: &Map, req: PathRequest, diff --git a/rustdoc/map_model/struct.Amenity.html b/rustdoc/map_model/struct.Amenity.html index b3a0cbc88d..ac7e0c46cf 100644 --- a/rustdoc/map_model/struct.Amenity.html +++ b/rustdoc/map_model/struct.Amenity.html @@ -1,10 +1,10 @@ Amenity in map_model - Rust

Struct map_model::Amenity

source ·
pub struct Amenity {
     pub names: NamePerLanguage,
     pub amenity_type: String,
-    pub osm_tags: Tags,
+    pub osm_tags: Tags,
 }
Expand description

A business located inside a building.

Fields§

§names: NamePerLanguage§amenity_type: String

This is the specific amenity listed in OSM, not the more general AmenityType category.

-
§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

+
§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

Trait Implementations§

source§

impl Clone for Amenity

source§

fn clone(&self) -> Amenity

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Amenity

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Amenity

source§

fn deserialize<__D>( __deserializer: __D ) -> Result<Amenity, <__D as Deserializer<'de>>::Error>
where diff --git a/rustdoc/map_model/struct.Area.html b/rustdoc/map_model/struct.Area.html index 1929c4c679..25ad504b6a 100644 --- a/rustdoc/map_model/struct.Area.html +++ b/rustdoc/map_model/struct.Area.html @@ -2,10 +2,10 @@ pub id: AreaID, pub area_type: AreaType, pub polygon: Polygon, - pub osm_tags: Tags, + pub osm_tags: Tags, pub osm_id: Option<OsmID>, }
Expand description

Areas are just used for drawing.

-

Fields§

§id: AreaID§area_type: AreaType§polygon: Polygon§osm_tags: Tags§osm_id: Option<OsmID>

The importing process also automatically creates some areas, so they don’t come from OSM.

+

Fields§

§id: AreaID§area_type: AreaType§polygon: Polygon§osm_tags: Tags§osm_id: Option<OsmID>

The importing process also automatically creates some areas, so they don’t come from OSM.

Trait Implementations§

source§

impl Clone for Area

source§

fn clone(&self) -> Area

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Area

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Area

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Area

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Area

§

impl RefUnwindSafe for Area

§

impl Send for Area

§

impl Sync for Area

§

impl Unpin for Area

§

impl UnwindSafe for Area

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/map_model/struct.Building.html b/rustdoc/map_model/struct.Building.html index 27a5461deb..5f7149a18a 100644 --- a/rustdoc/map_model/struct.Building.html +++ b/rustdoc/map_model/struct.Building.html @@ -9,14 +9,14 @@ pub amenities: Vec<Amenity>, pub bldg_type: BuildingType, pub parking: OffstreetParking, - pub osm_tags: Tags, + pub osm_tags: Tags, pub sidewalk_pos: Position, pub driveway_geom: PolyLine,

}
Expand description

A building has connections to the road and sidewalk, may contain commercial amenities, and have off-street parking.

Fields§

§id: BuildingID§polygon: Polygon§levels: f64§address: String§name: Option<NamePerLanguage>§orig_id: OsmID§label_center: Pt2D

Where a text label should be centered to have the best chances of being contained within the polygon.

-
§amenities: Vec<Amenity>§bldg_type: BuildingType§parking: OffstreetParking§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

+
§amenities: Vec<Amenity>§bldg_type: BuildingType§parking: OffstreetParking§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

§sidewalk_pos: Position

The building’s connection for any agent can change based on map edits. Just store the one for pedestrians and lazily calculate the others.

§driveway_geom: PolyLine

Goes from building to sidewalk

diff --git a/rustdoc/map_model/struct.City.html b/rustdoc/map_model/struct.City.html index fe66cdba9a..e694d31954 100644 --- a/rustdoc/map_model/struct.City.html +++ b/rustdoc/map_model/struct.City.html @@ -7,7 +7,7 @@ ballard, downtown, etc). The load map screen uses this struct to display the entire city.

Fields§

§name: CityName§boundary: Polygon§areas: Vec<(AreaType, Polygon)>§districts: Vec<(MapName, Polygon)>

The individual maps

Implementations§

source§

impl City

source

pub fn from_huge_map(huge_map: &Map) -> City

If there’s a single map covering all the smaller maps, use this.

-
source

pub fn from_individual_maps(city_name: &CityName, timer: &mut Timer<'_>) -> City

Generate a city from a bunch of smaller, individual maps. The boundaries of those maps +

source

pub fn from_individual_maps(city_name: &CityName, timer: &mut Timer<'_>) -> City

Generate a city from a bunch of smaller, individual maps. The boundaries of those maps may overlap and may have gaps between them.

Trait Implementations§

source§

impl<'de> Deserialize<'de> for City

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for City

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where diff --git a/rustdoc/map_model/struct.Map.html b/rustdoc/map_model/struct.Map.html index 67270cc6bb..58343a7550 100644 --- a/rustdoc/map_model/struct.Map.html +++ b/rustdoc/map_model/struct.Map.html @@ -10,7 +10,7 @@ pub(crate) boundary_polygon: Polygon, pub(crate) stop_signs: BTreeMap<IntersectionID, ControlStopSign>, pub(crate) traffic_signals: BTreeMap<IntersectionID, ControlTrafficSignal>, - pub(crate) bus_routes_on_roads: MultiMap<WayID, String>, + pub(crate) bus_routes_on_roads: MultiMap<WayID, String>, pub(crate) gps_bounds: GPSBounds, pub(crate) bounds: Bounds, pub(crate) config: MapConfig, @@ -23,20 +23,20 @@ pub(crate) name: MapName, pub(crate) edits: MapEdits, pub(crate) edits_generation: usize, - pub(crate) road_to_buildings: MultiMap<RoadID, BuildingID>, -

}

Fields§

§roads: Vec<Road>§intersections: Vec<Intersection>§intersection_quad_tree: Arc<RwLock<Option<FindClosest<IntersectionID>>>>§buildings: Vec<Building>§transit_stops: BTreeMap<TransitStopID, TransitStop>§transit_routes: Vec<TransitRoute>§areas: Vec<Area>§parking_lots: Vec<ParkingLot>§boundary_polygon: Polygon§stop_signs: BTreeMap<IntersectionID, ControlStopSign>§traffic_signals: BTreeMap<IntersectionID, ControlTrafficSignal>§bus_routes_on_roads: MultiMap<WayID, String>§gps_bounds: GPSBounds§bounds: Bounds§config: MapConfig§pathfinder: Pathfinder§pathfinder_dirty: bool§routing_params: RoutingParams§zones: Vec<Zone>§census_zones: Vec<(Polygon, CensusZone)>§extra_pois: Vec<ExtraPOI>§name: MapName§edits: MapEdits§edits_generation: usize§road_to_buildings: MultiMap<RoadID, BuildingID>

Implementations§

source§

impl Map

source

pub fn must_apply_edits( + pub(crate) road_to_buildings: MultiMap<RoadID, BuildingID>, +

}

Fields§

§roads: Vec<Road>§intersections: Vec<Intersection>§intersection_quad_tree: Arc<RwLock<Option<FindClosest<IntersectionID>>>>§buildings: Vec<Building>§transit_stops: BTreeMap<TransitStopID, TransitStop>§transit_routes: Vec<TransitRoute>§areas: Vec<Area>§parking_lots: Vec<ParkingLot>§boundary_polygon: Polygon§stop_signs: BTreeMap<IntersectionID, ControlStopSign>§traffic_signals: BTreeMap<IntersectionID, ControlTrafficSignal>§bus_routes_on_roads: MultiMap<WayID, String>§gps_bounds: GPSBounds§bounds: Bounds§config: MapConfig§pathfinder: Pathfinder§pathfinder_dirty: bool§routing_params: RoutingParams§zones: Vec<Zone>§census_zones: Vec<(Polygon, CensusZone)>§extra_pois: Vec<ExtraPOI>§name: MapName§edits: MapEdits§edits_generation: usize§road_to_buildings: MultiMap<RoadID, BuildingID>

Implementations§

source§

impl Map

source

pub fn must_apply_edits( &mut self, new_edits: MapEdits, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> EditEffects

Returns (changed_roads, deleted_lanes, deleted_turns, added_turns, changed_intersections)

-
source

pub fn try_apply_edits(&mut self, new_edits: MapEdits, timer: &mut Timer<'_>)

source

pub fn treat_edits_as_basemap(&mut self)

Whatever edits have been applied, treat as the basemap. This erases all commands and +

source

pub fn try_apply_edits(&mut self, new_edits: MapEdits, timer: &mut Timer<'_>)

source

pub fn treat_edits_as_basemap(&mut self)

Whatever edits have been applied, treat as the basemap. This erases all commands and knowledge of what roads/intersections/etc looked like before.

source

fn apply_edits( &mut self, new_edits: MapEdits, enforce_valid: bool, - timer: &mut Timer<'_> -) -> EditEffects

source

pub fn recalculate_pathfinding_after_edits(&mut self, timer: &mut Timer<'_>)

This can expensive, so don’t constantly do it while editing in the UI. But this must happen + timer: &mut Timer<'_> +) -> EditEffects

source

pub fn recalculate_pathfinding_after_edits(&mut self, timer: &mut Timer<'_>)

This can expensive, so don’t constantly do it while editing in the UI. But this must happen before the simulation resumes.

source§

impl Map

source

pub fn new_edits(&self) -> MapEdits

source

pub fn get_edits(&self) -> &MapEdits

source

pub fn unsaved_edits(&self) -> bool

source

pub fn get_r_edit(&self, r: RoadID) -> EditRoad

source

pub fn edit_road_cmd<F: FnOnce(&mut EditRoad)>( &self, @@ -52,10 +52,10 @@ the entire apply_edits flow.

source§

impl Map

source

pub fn create_from_raw( raw: RawMap, opts: RawToMapOptions, - timer: &mut Timer<'_> -) -> Map

source§

impl Map

source

pub fn load_synchronously(path: String, timer: &mut Timer<'_>) -> Map

Load a map from a local serialized Map or RawMap. Note this won’t work on web. This should + timer: &mut Timer<'_> +) -> Map

source§

impl Map

source

pub fn load_synchronously(path: String, timer: &mut Timer<'_>) -> Map

Load a map from a local serialized Map or RawMap. Note this won’t work on web. This should only be used by non-UI tools.

-
source

pub fn map_loaded_directly(&mut self, timer: &mut Timer<'_>)

After deserializing a map directly, call this after.

+
source

pub fn map_loaded_directly(&mut self, timer: &mut Timer<'_>)

After deserializing a map directly, call this after.

source

pub fn blank() -> Map

Just for temporary std::mem::replace tricks.

source

pub fn almost_blank() -> Self

A dummy map that won’t crash UIs, but has almost nothing in it.

source

pub fn all_roads(&self) -> &Vec<Road>

source

pub fn all_roads_with_modal_filter( @@ -132,7 +132,7 @@ route wasn’t chosen.

&mut self, area_type: AreaType, polygon: Polygon, - osm_tags: Tags + osm_tags: Tags )

source

pub fn keep_pathfinder_despite_edits(&mut self)

Normally after applying edits, you must call recalculate_pathfinding_after_edits. Alternatively, you can keep the old pathfinder exactly as it is. Use with caution – the pathfinder and the map may be out-of-sync in arbitrary ways.

@@ -155,7 +155,7 @@ last step can be on any road connected to the intersection.

source

pub fn routing_params_respecting_modal_filters(&self) -> RoutingParams

Adjusts the routing params baked into the map by accounting for any modal filters created since. TODO It’s weird that these don’t already take effect!

-
source

pub fn road_to_buildings(&self, r: RoadID) -> &BTreeSet<BuildingID>

source

pub(crate) fn recalculate_road_to_buildings(&mut self)

source

pub(crate) fn recalculate_all_movements(&mut self, timer: &mut Timer<'_>)

source

pub fn find_road_between( +

source

pub fn road_to_buildings(&self, r: RoadID) -> &BTreeSet<BuildingID>

source

pub(crate) fn recalculate_road_to_buildings(&mut self)

source

pub(crate) fn recalculate_all_movements(&mut self, timer: &mut Timer<'_>)

source

pub fn find_road_between( &self, i1: IntersectionID, i2: IntersectionID @@ -169,8 +169,8 @@ TODO It’s weird that these don’t already take effect!

) -> bool

Does a turn at a stop sign go from a smaller to a larger road? (Note this doesn’t look at unprotected movements in traffic signals, since we don’t yet have good heuristics for when those exist)

-
source

pub fn minify(&mut self, timer: &mut Timer<'_>)

Modifies the map in-place, removing parts not essential for the bike network tool.

-
source

pub fn minify_buildings(&mut self, timer: &mut Timer<'_>)

Modifies the map in-place, removing buildings.

+
source

pub fn minify(&mut self, timer: &mut Timer<'_>)

Modifies the map in-place, removing parts not essential for the bike network tool.

+
source

pub fn minify_buildings(&mut self, timer: &mut Timer<'_>)

Modifies the map in-place, removing buildings.

source

pub fn export_geometry(&self) -> GeoJson

Export all road and intersection geometry to GeoJSON, transforming to WGS84

source

pub fn get_bus_routes_on_road(&self, r: RoadID) -> &BTreeSet<String>

What’re the names of bus routes along a road? Note this is best effort, not robust to edits or transformations.

diff --git a/rustdoc/map_model/struct.MapEdits.html b/rustdoc/map_model/struct.MapEdits.html index 529ab1cef3..19c3e3645c 100644 --- a/rustdoc/map_model/struct.MapEdits.html +++ b/rustdoc/map_model/struct.MapEdits.html @@ -17,7 +17,7 @@ proposals.” They require a description and may have a link to a write-up.

source§

impl MapEdits

source

pub(crate) fn new() -> MapEdits

source

pub fn load_from_file( map: &Map, path: String, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Result<MapEdits>

Load map edits from a JSON file. Strip out any commands that’re broken because they don’t match the current map. If the resulting edits are totally empty, consider that a failure – the edits likely don’t cover this map at all.

diff --git a/rustdoc/map_model/struct.NamePerLanguage.html b/rustdoc/map_model/struct.NamePerLanguage.html index 44fcd371f7..c4d875bc0b 100644 --- a/rustdoc/map_model/struct.NamePerLanguage.html +++ b/rustdoc/map_model/struct.NamePerLanguage.html @@ -1,5 +1,5 @@ NamePerLanguage in map_model - Rust

Struct map_model::NamePerLanguage

pub struct NamePerLanguage(pub(crate) BTreeMap<Option<String>, String>);
Expand description

None corresponds to the native name

-

Tuple Fields§

§0: BTreeMap<Option<String>, String>

Implementations§

§

impl NamePerLanguage

pub fn get(&self, lang: Option<&String>) -> &String

pub fn new(tags: &Tags) -> Option<NamePerLanguage>

pub fn unnamed() -> NamePerLanguage

pub fn languages(&self) -> Vec<&String>

Trait Implementations§

§

impl Clone for NamePerLanguage

§

fn clone(&self) -> NamePerLanguage

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for NamePerLanguage

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for NamePerLanguage

§

fn deserialize<__D>( +

Tuple Fields§

§0: BTreeMap<Option<String>, String>

Implementations§

§

impl NamePerLanguage

pub fn get(&self, lang: Option<&String>) -> &String

pub fn new(tags: &Tags) -> Option<NamePerLanguage>

pub fn unnamed() -> NamePerLanguage

pub fn languages(&self) -> Vec<&String>

Trait Implementations§

§

impl Clone for NamePerLanguage

§

fn clone(&self) -> NamePerLanguage

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for NamePerLanguage

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for NamePerLanguage

§

fn deserialize<__D>( __deserializer: __D ) -> Result<NamePerLanguage, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
§

impl Ord for NamePerLanguage

§

fn cmp(&self, other: &NamePerLanguage) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where diff --git a/rustdoc/map_model/struct.Pathfinder.html b/rustdoc/map_model/struct.Pathfinder.html index f41f1963c8..2f12895aff 100644 --- a/rustdoc/map_model/struct.Pathfinder.html +++ b/rustdoc/map_model/struct.Pathfinder.html @@ -6,26 +6,26 @@ walking_graph: SidewalkPathfinder, walking_with_transit_graph: SidewalkPathfinder, params: RoutingParams, - cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>, -}

Fields§

§car_graph: VehiclePathfinder§bike_graph: VehiclePathfinder§bus_graph: VehiclePathfinder§train_graph: VehiclePathfinder§walking_graph: SidewalkPathfinder§walking_with_transit_graph: SidewalkPathfinder§params: RoutingParams§cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>

Implementations§

source§

impl Pathfinder

source

pub fn empty() -> Pathfinder

Quickly create an invalid pathfinder, just to make borrow checking / initialization order + cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>, +}

Fields§

§car_graph: VehiclePathfinder§bike_graph: VehiclePathfinder§bus_graph: VehiclePathfinder§train_graph: VehiclePathfinder§walking_graph: SidewalkPathfinder§walking_with_transit_graph: SidewalkPathfinder§params: RoutingParams§cached_alternatives: ThreadLocal<RefCell<VecMap<(PathConstraints, RoutingParams), Pathfinder>>>

Implementations§

source§

impl Pathfinder

source

pub fn empty() -> Pathfinder

Quickly create an invalid pathfinder, just to make borrow checking / initialization order work.

source

pub(crate) fn new( map: &Map, params: RoutingParams, engine: &CreateEngine<'_>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Pathfinder

source

pub fn new_dijkstra( map: &Map, params: RoutingParams, modes: Vec<PathConstraints>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Create a new Pathfinder with custom routing params that can only serve some modes. Fast to create, slow to use.

source

pub fn new_ch( map: &Map, params: RoutingParams, modes: Vec<PathConstraints>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Create a new Pathfinder with custom routing params that can only serve some modes. Slow to create, fast to use. Doesn’t re-use the node ordering when building the CH.

source

pub(crate) fn new_limited( @@ -33,7 +33,7 @@ create, fast to use. Doesn’t re-use the node ordering when building the CH.

RoutingParams, engine: CreateEngine<'_>, modes: Vec<PathConstraints>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Pathfinder

Create a new Pathfinder with custom routing params that can only serve some modes.

source

pub(crate) fn finalize_transit(&mut self, map: &Map, engine: &CreateEngine<'_>)

source

pub fn pathfind(&self, req: PathRequest, map: &Map) -> Option<PathV2>

Finds a path from a start to an end for a certain type of agent.

source

pub fn pathfind_v2(&self, req: PathRequest, map: &Map) -> Option<PathV2>

Finds a path from a start to an end for a certain type of agent. Uses the RoutingParams @@ -56,7 +56,7 @@ intermediate graph is saved to speed up future calls with the same routing param map: &Map, start: Position, end: Position -) -> Option<(TransitStopID, Option<TransitStopID>, TransitRouteID)>

source

pub(crate) fn apply_edits(&mut self, map: &Map, timer: &mut Timer<'_>)

Trait Implementations§

source§

impl Clone for Pathfinder

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for Pathfinder

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>

source

pub(crate) fn apply_edits(&mut self, map: &Map, timer: &mut Timer<'_>)

Trait Implementations§

source§

impl Clone for Pathfinder

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for Pathfinder

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Pathfinder

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/map_model/struct.PathfinderCache.html b/rustdoc/map_model/struct.PathfinderCache.html index 52b3fdb1cb..f76091700b 100644 --- a/rustdoc/map_model/struct.PathfinderCache.html +++ b/rustdoc/map_model/struct.PathfinderCache.html @@ -1,8 +1,8 @@ PathfinderCache in map_model - Rust

Struct map_model::PathfinderCache

source ·
pub struct PathfinderCache {
-    cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>,
+    cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>,
 }
Expand description

For callers needing to request paths with a variety of RoutingParams. The caller is in charge of the lifetime, so they can clear it out when appropriate.

-

Fields§

§cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>

Implementations§

source§

impl PathfinderCache

source

pub fn new() -> Self

source

pub fn pathfind_with_params( +

Fields§

§cache: VecMap<(PathConstraints, RoutingParams), Pathfinder>

Implementations§

source§

impl PathfinderCache

source

pub fn new() -> Self

source

pub fn pathfind_with_params( &mut self, map: &Map, req: PathRequest, diff --git a/rustdoc/map_model/struct.Road.html b/rustdoc/map_model/struct.Road.html index 6783fe905b..6123e0ea4e 100644 --- a/rustdoc/map_model/struct.Road.html +++ b/rustdoc/map_model/struct.Road.html @@ -1,6 +1,6 @@ Road in map_model - Rust

Struct map_model::Road

source ·
pub struct Road {
Show 23 fields pub id: RoadID, - pub osm_tags: Tags, + pub osm_tags: Tags, pub turn_restrictions: Vec<(RestrictionType, RoadID)>, pub complicated_turn_restrictions: Vec<(RoadID, RoadID)>, pub orig_id: OriginalRoad, @@ -23,7 +23,7 @@ pub crossing_nodes: Vec<(Distance, CrossingType)>, pub crossings: Vec<Crossing>,
}
Expand description

A Road represents a segment between exactly two Intersections. It contains Lanes as children.

-

Fields§

§id: RoadID§osm_tags: Tags§turn_restrictions: Vec<(RestrictionType, RoadID)>

self is ‘from’

+

Fields§

§id: RoadID§osm_tags: Tags§turn_restrictions: Vec<(RestrictionType, RoadID)>

self is ‘from’

§complicated_turn_restrictions: Vec<(RoadID, RoadID)>

self is ‘from’. (via, to). Only BanTurns.

§orig_id: OriginalRoad§speed_limit: Speed§access_restrictions: AccessRestrictions§zorder: isize§percent_incline: f64

[-1.0, 1.0] theoretically, but in practice, about [-0.25, 0.25]. 0 is flat, positive is uphill from src_i -> dst_i, negative is downhill.

diff --git a/rustdoc/osm_viewer/viewer/struct.BusinessSearch.html b/rustdoc/osm_viewer/viewer/struct.BusinessSearch.html index 7a970122aa..567c8490a1 100644 --- a/rustdoc/osm_viewer/viewer/struct.BusinessSearch.html +++ b/rustdoc/osm_viewer/viewer/struct.BusinessSearch.html @@ -1,9 +1,9 @@ BusinessSearch in osm_viewer::viewer - Rust

Struct osm_viewer::viewer::BusinessSearch

source ·
struct BusinessSearch {
-    counts: Counter<String>,
+    counts: Counter<String>,
     show: BTreeSet<String>,
     highlight: Drawable,
     hovering_on_amenity: Option<(String, Drawable)>,
-}

Fields§

§counts: Counter<String>§show: BTreeSet<String>§highlight: Drawable§hovering_on_amenity: Option<(String, Drawable)>

Implementations§

source§

impl BusinessSearch

source

fn new(ctx: &mut EventCtx<'_>, app: &SimpleApp<()>) -> BusinessSearch

source

fn update(&mut self, ctx: &mut EventCtx<'_>, app: &SimpleApp<()>)

source

fn hovering_on_amenity( +}

Fields§

§counts: Counter<String>§show: BTreeSet<String>§highlight: Drawable§hovering_on_amenity: Option<(String, Drawable)>

Implementations§

source§

impl BusinessSearch

source

fn new(ctx: &mut EventCtx<'_>, app: &SimpleApp<()>) -> BusinessSearch

source

fn update(&mut self, ctx: &mut EventCtx<'_>, app: &SimpleApp<()>)

source

fn hovering_on_amenity( &mut self, ctx: &mut EventCtx<'_>, app: &SimpleApp<()>, diff --git a/rustdoc/parking_mapper/mapper/fn.find_overlapping_stuff.html b/rustdoc/parking_mapper/mapper/fn.find_overlapping_stuff.html index 5f3e449973..7d8a23cc9c 100644 --- a/rustdoc/parking_mapper/mapper/fn.find_overlapping_stuff.html +++ b/rustdoc/parking_mapper/mapper/fn.find_overlapping_stuff.html @@ -1,4 +1,4 @@ find_overlapping_stuff in parking_mapper::mapper - Rust

Function parking_mapper::mapper::find_overlapping_stuff

source ·
fn find_overlapping_stuff(
     app: &SimpleApp<()>,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Vec<Polygon>
\ No newline at end of file diff --git a/rustdoc/parking_mapper/mapper/fn.generate_osmc.html b/rustdoc/parking_mapper/mapper/fn.generate_osmc.html index 01c791ea7a..13b9e7a2f1 100644 --- a/rustdoc/parking_mapper/mapper/fn.generate_osmc.html +++ b/rustdoc/parking_mapper/mapper/fn.generate_osmc.html @@ -1,5 +1,5 @@ generate_osmc in parking_mapper::mapper - Rust

Function parking_mapper::mapper::generate_osmc

source ·
fn generate_osmc(
     data: &BTreeMap<WayID, Value>,
     in_seattle: bool,
-    timer: &mut Timer<'_>
+    timer: &mut Timer<'_>
 ) -> Result<()>
\ No newline at end of file diff --git a/rustdoc/popdat/make_person/fn.make_people.html b/rustdoc/popdat/make_person/fn.make_people.html index c622565ae5..bdcb09c0fd 100644 --- a/rustdoc/popdat/make_person/fn.make_people.html +++ b/rustdoc/popdat/make_person/fn.make_people.html @@ -1,7 +1,7 @@ make_people in popdat::make_person - Rust

Function popdat::make_person::make_people

source ·
pub fn make_people(
     people: Vec<CensusPerson>,
     map: &Map,
-    timer: &mut Timer<'_>,
+    timer: &mut Timer<'_>,
     rng: &mut XorShiftRng,
     config: &Config
 ) -> Vec<PersonSpec>
\ No newline at end of file diff --git a/rustdoc/popdat/od/fn.create_zones.html b/rustdoc/popdat/od/fn.create_zones.html index abad5284f6..43ebe36d90 100644 --- a/rustdoc/popdat/od/fn.create_zones.html +++ b/rustdoc/popdat/od/fn.create_zones.html @@ -2,5 +2,5 @@ map: &Map, input: HashMap<String, Polygon>, include_zones: IncludeZonePolicy, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> HashMap<String, Zone>

\ No newline at end of file diff --git a/rustdoc/popdat/od/fn.disaggregate.html b/rustdoc/popdat/od/fn.disaggregate.html index 9966529d07..001733b06f 100644 --- a/rustdoc/popdat/od/fn.disaggregate.html +++ b/rustdoc/popdat/od/fn.disaggregate.html @@ -4,7 +4,7 @@ desire_lines: Vec<DesireLine>, opts: Options, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Vec<PersonSpec>
Expand description

Generates a scenario from aggregated origin/destination data (DesireLines). The input describes an exact number of people, who live in one zone and work in another (possibly the same) and commute using some mode. For each of them, we just need to pick a specific home and workplace diff --git a/rustdoc/raw_map/struct.Amenity.html b/rustdoc/raw_map/struct.Amenity.html index 584396c7e6..6f0990db22 100644 --- a/rustdoc/raw_map/struct.Amenity.html +++ b/rustdoc/raw_map/struct.Amenity.html @@ -1,10 +1,10 @@ Amenity in raw_map - Rust

Struct raw_map::Amenity

source ·
pub struct Amenity {
     pub names: NamePerLanguage,
     pub amenity_type: String,
-    pub osm_tags: Tags,
+    pub osm_tags: Tags,
 }
Expand description

A business located inside a building.

Fields§

§names: NamePerLanguage§amenity_type: String

This is the specific amenity listed in OSM, not the more general AmenityType category.

-
§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

+
§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

Trait Implementations§

source§

impl Clone for Amenity

source§

fn clone(&self) -> Amenity

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Amenity

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Amenity

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Amenity

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/raw_map/struct.RawArea.html b/rustdoc/raw_map/struct.RawArea.html index a9e99e6de5..9392c32a56 100644 --- a/rustdoc/raw_map/struct.RawArea.html +++ b/rustdoc/raw_map/struct.RawArea.html @@ -1,9 +1,9 @@ RawArea in raw_map - Rust

Struct raw_map::RawArea

source ·
pub struct RawArea {
     pub area_type: AreaType,
     pub polygon: Polygon,
-    pub osm_tags: Tags,
+    pub osm_tags: Tags,
     pub osm_id: OsmID,
-}

Fields§

§area_type: AreaType§polygon: Polygon§osm_tags: Tags§osm_id: OsmID

Trait Implementations§

source§

impl Clone for RawArea

source§

fn clone(&self) -> RawArea

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RawArea

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for RawArea

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where +}

Fields§

§area_type: AreaType§polygon: Polygon§osm_tags: Tags§osm_id: OsmID

Trait Implementations§

source§

impl Clone for RawArea

source§

fn clone(&self) -> RawArea

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RawArea

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for RawArea

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for RawArea

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/raw_map/struct.RawBuilding.html b/rustdoc/raw_map/struct.RawBuilding.html index dc7d89aef6..873cc53f93 100644 --- a/rustdoc/raw_map/struct.RawBuilding.html +++ b/rustdoc/raw_map/struct.RawBuilding.html @@ -1,10 +1,10 @@ RawBuilding in raw_map - Rust

Struct raw_map::RawBuilding

source ·
pub struct RawBuilding {
     pub polygon: Polygon,
-    pub osm_tags: Tags,
+    pub osm_tags: Tags,
     pub public_garage_name: Option<String>,
     pub num_parking_spots: usize,
     pub amenities: Vec<Amenity>,
-}

Fields§

§polygon: Polygon§osm_tags: Tags§public_garage_name: Option<String>§num_parking_spots: usize§amenities: Vec<Amenity>

Trait Implementations§

source§

impl Clone for RawBuilding

source§

fn clone(&self) -> RawBuilding

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RawBuilding

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for RawBuilding

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where +}

Fields§

§polygon: Polygon§osm_tags: Tags§public_garage_name: Option<String>§num_parking_spots: usize§amenities: Vec<Amenity>

Trait Implementations§

source§

impl Clone for RawBuilding

source§

fn clone(&self) -> RawBuilding

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RawBuilding

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for RawBuilding

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for RawBuilding

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/raw_map/struct.RawMap.html b/rustdoc/raw_map/struct.RawMap.html index dd4fcbed39..eadf6521bc 100644 --- a/rustdoc/raw_map/struct.RawMap.html +++ b/rustdoc/raw_map/struct.RawMap.html @@ -6,18 +6,18 @@ pub parking_lots: Vec<RawParkingLot>, pub parking_aisles: Vec<(WayID, Vec<Pt2D>)>, pub transit_routes: Vec<RawTransitRoute>, - pub census_zones: Vec<(Polygon, CensusZone)>, + pub census_zones: Vec<(Polygon, CensusZone)>, pub transit_stops: BTreeMap<String, RawTransitStop>, - pub bus_routes_on_roads: MultiMap<WayID, String>, - pub osm_tags: BTreeMap<WayID, Tags>, + pub bus_routes_on_roads: MultiMap<WayID, String>, + pub osm_tags: BTreeMap<WayID, Tags>, pub extra_road_data: BTreeMap<RoadID, ExtraRoadData>, pub elevation_per_intersection: BTreeMap<IntersectionID, Distance>, pub extra_pois: Vec<ExtraPOI>, -

}

Fields§

§name: MapName§streets: StreetNetwork§buildings: BTreeMap<OsmID, RawBuilding>§areas: Vec<RawArea>§parking_lots: Vec<RawParkingLot>§parking_aisles: Vec<(WayID, Vec<Pt2D>)>§transit_routes: Vec<RawTransitRoute>§census_zones: Vec<(Polygon, CensusZone)>§transit_stops: BTreeMap<String, RawTransitStop>§bus_routes_on_roads: MultiMap<WayID, String>

Per road, what bus routes run along it?

+

}

Fields§

§name: MapName§streets: StreetNetwork§buildings: BTreeMap<OsmID, RawBuilding>§areas: Vec<RawArea>§parking_lots: Vec<RawParkingLot>§parking_aisles: Vec<(WayID, Vec<Pt2D>)>§transit_routes: Vec<RawTransitRoute>§census_zones: Vec<(Polygon, CensusZone)>§transit_stops: BTreeMap<String, RawTransitStop>§bus_routes_on_roads: MultiMap<WayID, String>

Per road, what bus routes run along it?

This is scraped from OSM relations for every map, unlike the more detailed transit_routes above, which come from GTFS only for a few maps. This is used only to identify roads part of bus routes. It’s best-effort and not robust to edits or transformations.

-
§osm_tags: BTreeMap<WayID, Tags>§extra_road_data: BTreeMap<RoadID, ExtraRoadData>§elevation_per_intersection: BTreeMap<IntersectionID, Distance>§extra_pois: Vec<ExtraPOI>

Implementations§

source§

impl RawMap

source

pub fn blank(name: MapName) -> RawMap

source

pub fn save(&self)

source

pub fn get_city_name(&self) -> &CityName

source

pub fn road_to_osm_tags(&self, id: RoadID) -> Option<&Tags>

Trait Implementations§

source§

impl<'de> Deserialize<'de> for RawMap

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where +
§osm_tags: BTreeMap<WayID, Tags>§extra_road_data: BTreeMap<RoadID, ExtraRoadData>§elevation_per_intersection: BTreeMap<IntersectionID, Distance>§extra_pois: Vec<ExtraPOI>

Implementations§

source§

impl RawMap

source

pub fn blank(name: MapName) -> RawMap

source

pub fn save(&self)

source

pub fn get_city_name(&self) -> &CityName

source

pub fn road_to_osm_tags(&self, id: RoadID) -> Option<&Tags>

Trait Implementations§

source§

impl<'de> Deserialize<'de> for RawMap

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for RawMap

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for RawMap

§

impl RefUnwindSafe for RawMap

§

impl Send for RawMap

§

impl Sync for RawMap

§

impl Unpin for RawMap

§

impl UnwindSafe for RawMap

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/raw_map/struct.RawParkingLot.html b/rustdoc/raw_map/struct.RawParkingLot.html index 76c0d49067..16c8685c55 100644 --- a/rustdoc/raw_map/struct.RawParkingLot.html +++ b/rustdoc/raw_map/struct.RawParkingLot.html @@ -1,8 +1,8 @@ RawParkingLot in raw_map - Rust

Struct raw_map::RawParkingLot

source ·
pub struct RawParkingLot {
     pub osm_id: OsmID,
     pub polygon: Polygon,
-    pub osm_tags: Tags,
-}

Fields§

§osm_id: OsmID§polygon: Polygon§osm_tags: Tags

Trait Implementations§

source§

impl Clone for RawParkingLot

source§

fn clone(&self) -> RawParkingLot

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RawParkingLot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for RawParkingLot

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + pub osm_tags: Tags, +}

Fields§

§osm_id: OsmID§polygon: Polygon§osm_tags: Tags

Trait Implementations§

source§

impl Clone for RawParkingLot

source§

fn clone(&self) -> RawParkingLot

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RawParkingLot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for RawParkingLot

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for RawParkingLot

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where diff --git a/rustdoc/raw_map/types/struct.Amenity.html b/rustdoc/raw_map/types/struct.Amenity.html index ab2ddd7440..de81ebc21c 100644 --- a/rustdoc/raw_map/types/struct.Amenity.html +++ b/rustdoc/raw_map/types/struct.Amenity.html @@ -1,10 +1,10 @@ Amenity in raw_map::types - Rust

Struct raw_map::types::Amenity

source ·
pub struct Amenity {
     pub names: NamePerLanguage,
     pub amenity_type: String,
-    pub osm_tags: Tags,
+    pub osm_tags: Tags,
 }
Expand description

A business located inside a building.

Fields§

§names: NamePerLanguage§amenity_type: String

This is the specific amenity listed in OSM, not the more general AmenityType category.

-
§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

+
§osm_tags: Tags

Depending on options while importing, these might be empty, to save file space.

Trait Implementations§

source§

impl Clone for Amenity

source§

fn clone(&self) -> Amenity

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Amenity

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Amenity

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Amenity

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/santa/after_level/struct.Results.html b/rustdoc/santa/after_level/struct.Results.html index c16812f357..38669799d4 100644 --- a/rustdoc/santa/after_level/struct.Results.html +++ b/rustdoc/santa/after_level/struct.Results.html @@ -19,7 +19,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/santa/after_level/struct.Strategize.html b/rustdoc/santa/after_level/struct.Strategize.html index 69a1e5428f..7b1e1da231 100644 --- a/rustdoc/santa/after_level/struct.Strategize.html +++ b/rustdoc/santa/after_level/struct.Strategize.html @@ -24,7 +24,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/santa/session/struct.Session.html b/rustdoc/santa/session/struct.Session.html index a2bb7f75ca..14859b8969 100644 --- a/rustdoc/santa/session/struct.Session.html +++ b/rustdoc/santa/session/struct.Session.html @@ -8,13 +8,13 @@ pub vehicles_unlocked: BTreeSet<String>, pub upzones_unlocked: usize, pub upzones_explained: bool, - pub upzones_per_level: MultiMap<String, BuildingID>, + pub upzones_per_level: MultiMap<String, BuildingID>, pub music: Music, pub play_music: bool, }
Expand description

Persistent state that lasts across levels.

Fields§

§levels: Vec<Level>§enable_modding: bool

Enable this to use the levels, instead of overwriting them with the version in the code.

§colors: ColorScheme§high_scores: HashMap<String, Vec<usize>>

Level title -> the top 3 scores

-
§levels_unlocked: usize§current_vehicle: String§vehicles_unlocked: BTreeSet<String>§upzones_unlocked: usize§upzones_explained: bool§upzones_per_level: MultiMap<String, BuildingID>§music: Music§play_music: bool

Implementations§

source§

impl Session

§levels_unlocked: usize§current_vehicle: String§vehicles_unlocked: BTreeSet<String>§upzones_unlocked: usize§upzones_explained: bool§upzones_per_level: MultiMap<String, BuildingID>§music: Music§play_music: bool

Implementations§

source§

impl Session

source

pub fn load() -> Session

source

pub fn record_score( &mut self, level: String, score: usize diff --git a/rustdoc/santa/title/struct.Credits.html b/rustdoc/santa/title/struct.Credits.html index 960103acc4..53b1b72590 100644 --- a/rustdoc/santa/title/struct.Credits.html +++ b/rustdoc/santa/title/struct.Credits.html @@ -14,7 +14,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/santa/title/struct.TitleScreen.html b/rustdoc/santa/title/struct.TitleScreen.html index 5583c86d2e..85a2c41eda 100644 --- a/rustdoc/santa/title/struct.TitleScreen.html +++ b/rustdoc/santa/title/struct.TitleScreen.html @@ -17,7 +17,7 @@ call this to handle all other events.

&mut A, - _action: Box<dyn CloneableAny>, + _action: Box<dyn CloneableAny>, _panel: &mut Panel ) -> Transition<A>

Called when something on the panel has been clicked.
§

fn panel_changed( &mut self, diff --git a/rustdoc/sim/analytics/struct.Analytics.html b/rustdoc/sim/analytics/struct.Analytics.html index 54f291a0f0..0d670c12c5 100644 --- a/rustdoc/sim/analytics/struct.Analytics.html +++ b/rustdoc/sim/analytics/struct.Analytics.html @@ -7,7 +7,7 @@ pub passengers_boarding: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID, Duration)>>, pub passengers_alighting: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID)>>, pub started_trips: BTreeMap<TripID, Time>, - pub finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>, + pub finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>, pub problems_per_trip: BTreeMap<TripID, Vec<(Time, Problem)>>, pub trip_log: Vec<(Time, TripID, Option<PathRequest>, TripPhaseType)>, pub intersection_delays: BTreeMap<IntersectionID, Vec<(u8, Time, Duration, AgentType)>>, @@ -25,7 +25,7 @@ running the simulation, and compare the live Analytics to the prebaked baseline

Fields§

§road_thruput: TimeSeriesCount<RoadID>§intersection_thruput: TimeSeriesCount<IntersectionID>§traffic_signal_thruput: TimeSeriesCount<CompressedMovementID>§demand: BTreeMap<MovementID, usize>

Most fields in Analytics are cumulative over time, but this is just for the current moment in time.

§bus_arrivals: Vec<(Time, CarID, TransitRouteID, TransitStopID)>§passengers_boarding: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID, Duration)>>

For each passenger boarding, how long did they wait at the stop?

-
§passengers_alighting: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID)>>§started_trips: BTreeMap<TripID, Time>§finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>

Finish time, ID, mode, trip duration if successful (or None if cancelled)

+
§passengers_alighting: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID)>>§started_trips: BTreeMap<TripID, Time>§finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>

Finish time, ID, mode, trip duration if successful (or None if cancelled)

§problems_per_trip: BTreeMap<TripID, Vec<(Time, Problem)>>

Record different problems that each trip encounters.

§trip_log: Vec<(Time, TripID, Option<PathRequest>, TripPhaseType)>§intersection_delays: BTreeMap<IntersectionID, Vec<(u8, Time, Duration, AgentType)>>

Only for traffic signals. The u8 is the movement index from a CompressedMovementID.

§parking_lane_changes: BTreeMap<LaneID, Vec<(Time, bool)>>

Per parking lane or lot, when does a spot become filled (true) or free (false)

@@ -35,7 +35,7 @@ in time.

&self, now: Time, before: &Analytics -) -> Vec<(TripID, Duration, Duration, TripMode)>

Returns pairs of trip times for finished trips in both worlds. (ID, before, after, mode)

+) -> Vec<(TripID, Duration, Duration, TripMode)>

Returns pairs of trip times for finished trips in both worlds. (ID, before, after, mode)

source

pub fn get_trip_phases(&self, trip: TripID, map: &Map) -> Vec<TripPhase>

If calling on prebaked Analytics, be careful to pass in an unedited map, to match how the simulation was originally run. Otherwise the paths may be nonsense.

source

pub fn get_all_trip_phases(&self) -> BTreeMap<TripID, Vec<TripPhase>>

source

pub fn active_agents(&self, now: Time) -> Vec<(Time, usize)>

source

pub fn parking_lane_availability( diff --git a/rustdoc/sim/analytics/struct.TimeSeriesCount.html b/rustdoc/sim/analytics/struct.TimeSeriesCount.html index 0a5c1bee3f..74e1aa7595 100644 --- a/rustdoc/sim/analytics/struct.TimeSeriesCount.html +++ b/rustdoc/sim/analytics/struct.TimeSeriesCount.html @@ -9,7 +9,7 @@ representations better than the hour count above.

&self, id: X, agent_types: BTreeSet<AgentType> -) -> usize

source

pub fn total_for_by_time(&self, id: X, now: Time) -> usize

source

pub fn all_total_counts(&self, agent_types: &BTreeSet<AgentType>) -> Counter<X>

source

pub fn count_per_hour( +) -> usize

source

pub fn total_for_by_time(&self, id: X, now: Time) -> usize

source

pub fn all_total_counts(&self, agent_types: &BTreeSet<AgentType>) -> Counter<X>

source

pub fn count_per_hour( &self, id: X, time: Time diff --git a/rustdoc/sim/events/enum.Event.html b/rustdoc/sim/events/enum.Event.html index 9dd3528dbc..93930bc16f 100644 --- a/rustdoc/sim/events/enum.Event.html +++ b/rustdoc/sim/events/enum.Event.html @@ -16,11 +16,11 @@ IntersectionDelayMeasured(TripID, TurnID, AgentID, Duration), TripFinished { trip: TripID, - mode: TripMode, + mode: TripMode, total_time: Duration, blocked_time: Duration, }, - TripCancelled(TripID, TripMode), + TripCancelled(TripID, TripMode), TripPhaseStarting(TripID, PersonID, Option<PathRequest>, TripPhaseType), PathAmended(Path), Alert(AlertLocation, String), @@ -35,7 +35,7 @@ has no performance impact.

§

PersonEntersMap(PersonID, AgentID, IntersectionID)

§

PedReachedParkingSpot(PedestrianID, ParkingSpot)

§

BikeStoppedAtSidewalk(CarID, LaneID)

§

ProblemEncountered(TripID, Problem)

§

AgentEntersTraversable(AgentID, Option<TripID>, Traversable, Option<usize>)

If the agent is a transit vehicle, then include a count of how many passengers are on board.

§

IntersectionDelayMeasured(TripID, TurnID, AgentID, Duration)

TripID, TurnID (Where the delay was encountered), Time spent waiting at that turn

-
§

TripFinished

Fields

§trip: TripID
§mode: TripMode
§total_time: Duration
§blocked_time: Duration
§

TripCancelled(TripID, TripMode)

§

TripPhaseStarting(TripID, PersonID, Option<PathRequest>, TripPhaseType)

§

PathAmended(Path)

Just use for parking replanning. Not happy about copying the full path in here, but the way +

§

TripFinished

Fields

§trip: TripID
§total_time: Duration
§blocked_time: Duration
§

TripCancelled(TripID, TripMode)

§

TripPhaseStarting(TripID, PersonID, Option<PathRequest>, TripPhaseType)

§

PathAmended(Path)

Just use for parking replanning. Not happy about copying the full path in here, but the way to plumb info into Analytics is Event.

§

Alert(AlertLocation, String)

Trait Implementations§

source§

impl Clone for Event

source§

fn clone(&self) -> Event

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Event

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Event

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl PartialEq for Event

source§

fn eq(&self, other: &Event) -> bool

This method tests for self and other values to be equal, and is used diff --git a/rustdoc/sim/fn.count_parked_cars_per_bldg.html b/rustdoc/sim/fn.count_parked_cars_per_bldg.html index 1d3dc11286..cc5f1c166d 100644 --- a/rustdoc/sim/fn.count_parked_cars_per_bldg.html +++ b/rustdoc/sim/fn.count_parked_cars_per_bldg.html @@ -1 +1 @@ -count_parked_cars_per_bldg in sim - Rust

Function sim::count_parked_cars_per_bldg

source ·
pub fn count_parked_cars_per_bldg(scenario: &Scenario) -> Counter<BuildingID>
\ No newline at end of file +count_parked_cars_per_bldg in sim - Rust

Function sim::count_parked_cars_per_bldg

source ·
pub fn count_parked_cars_per_bldg(scenario: &Scenario) -> Counter<BuildingID>
\ No newline at end of file diff --git a/rustdoc/sim/fn.fork_rng.html b/rustdoc/sim/fn.fork_rng.html index 762160099d..6e03539a85 100644 --- a/rustdoc/sim/fn.fork_rng.html +++ b/rustdoc/sim/fn.fork_rng.html @@ -1,3 +1,3 @@ -fork_rng in sim - Rust

Function sim::fork_rng

pub fn fork_rng(base_rng: &mut XorShiftRng) -> XorShiftRng
Expand description

Need to explain this trick – basically keeps consistency between two different simulations when +fork_rng in sim - Rust

Function sim::fork_rng

source ·
pub fn fork_rng(base_rng: &mut XorShiftRng) -> XorShiftRng
Expand description

Need to explain this trick – basically keeps consistency between two different simulations when each one might make slightly different sequences of calls to the RNG.

\ No newline at end of file diff --git a/rustdoc/sim/make/load/fn.parse_modifiers.html b/rustdoc/sim/make/load/fn.parse_modifiers.html index 918096286a..9fc3b7b4a5 100644 --- a/rustdoc/sim/make/load/fn.parse_modifiers.html +++ b/rustdoc/sim/make/load/fn.parse_modifiers.html @@ -1 +1 @@ -parse_modifiers in sim::make::load - Rust

Function sim::make::load::parse_modifiers

source ·
fn parse_modifiers(x: &str) -> Result<Vec<ScenarioModifier>>
\ No newline at end of file +parse_modifiers in sim::make::load - Rust

Function sim::make::load::parse_modifiers

source ·
fn parse_modifiers(x: &str) -> Result<Vec<ScenarioModifier>>
\ No newline at end of file diff --git a/rustdoc/sim/make/load/struct.SimFlags.html b/rustdoc/sim/make/load/struct.SimFlags.html index 91cbf4b6c0..53b153ac9a 100644 --- a/rustdoc/sim/make/load/struct.SimFlags.html +++ b/rustdoc/sim/make/load/struct.SimFlags.html @@ -1,7 +1,7 @@ SimFlags in sim::make::load - Rust

Struct sim::make::load::SimFlags

source ·
pub struct SimFlags {
     load_path: Option<String>,
     pub load: String,
-    pub scenario_modifiers: Vec<ScenarioModifier>,
+    pub scenario_modifiers: Vec<ScenarioModifier>,
     pub rng_seed: u64,
     pub opts: SimOptions,
 }
Expand description

SimFlags specifies a simulation to setup. After parsing from structopt, you must call @@ -14,12 +14,12 @@

§load: String

The same as load_path, but with a default value filled out. Call initialize to set this up.

-
§scenario_modifiers: Vec<ScenarioModifier>

A JSON list of modifiers to transform the scenario. These can be generated with the GUI.

+
§scenario_modifiers: Vec<ScenarioModifier>

A JSON list of modifiers to transform the scenario. These can be generated with the GUI.

§rng_seed: u64

An arbitrary number to seed the random number generator. This is input to the deterministic simulation, so different values affect results.

§opts: SimOptions

Implementations§

source§

impl SimFlags

source

pub const RNG_SEED: u64 = 42u64

source

pub fn initialize(&mut self)

source

pub fn for_test(run_name: &str) -> SimFlags

source

pub fn make_rng(&self) -> XorShiftRng

source

pub fn load_synchronously( &self, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (Map, Sim, XorShiftRng)

Loads a map and simulation. Not appropriate for use in the UI or on web.

Trait Implementations§

source§

impl Clone for SimFlags

source§

fn clone(&self) -> SimFlags

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl StructOpt for SimFlags

source§

fn clap<'a, 'b>() -> App<'a, 'b>

Returns clap::App corresponding to the struct.
source§

fn from_clap(matches: &ArgMatches<'_>) -> Self

Builds the struct from clap::ArgMatches. It’s guaranteed to succeed if matches originates from an App generated by [StructOpt::clap] called on diff --git a/rustdoc/sim/make/load/type.ModifierList.html b/rustdoc/sim/make/load/type.ModifierList.html index 12f7f96686..19e309b9fa 100644 --- a/rustdoc/sim/make/load/type.ModifierList.html +++ b/rustdoc/sim/make/load/type.ModifierList.html @@ -1,4 +1,4 @@ -ModifierList in sim::make::load - Rust

Type Alias sim::make::load::ModifierList

source ·
type ModifierList = Vec<ScenarioModifier>;

Aliased Type§

struct ModifierList {
-    buf: RawVec<ScenarioModifier>,
+ModifierList in sim::make::load - Rust

Type Alias sim::make::load::ModifierList

source ·
type ModifierList = Vec<ScenarioModifier>;

Aliased Type§

struct ModifierList {
+    buf: RawVec<ScenarioModifier>,
     len: usize,
-}

Fields§

§buf: RawVec<ScenarioModifier>§len: usize
\ No newline at end of file +}

Fields§

§buf: RawVec<ScenarioModifier>§len: usize
\ No newline at end of file diff --git a/rustdoc/sim/make/spawner/enum.TripSpec.html b/rustdoc/sim/make/spawner/enum.TripSpec.html index 86364f6271..5afa8e7dbf 100644 --- a/rustdoc/sim/make/spawner/enum.TripSpec.html +++ b/rustdoc/sim/make/spawner/enum.TripSpec.html @@ -35,9 +35,9 @@
§retry_if_no_room: bool
§

SpawningFailure

Something went wrong spawning the trip.

Fields

§use_vehicle: Option<CarID>
§error: String
§

UsingParkedCar

Fields

§car: CarID

This must be a currently parked vehicle owned by the person.

§start_bldg: BuildingID
§

JustWalking

Fields

§

UsingBike

Fields

§bike: CarID
§start: BuildingID
§

UsingTransit

Fields

§route: TransitRouteID
§stop1: TransitStopID
§maybe_stop2: Option<TransitStopID>

Implementations§

source§

impl TripSpec

source

pub fn into_plan(self, map: &Map) -> (TripSpec, Vec<TripLeg>)

source

pub fn maybe_new( - from: TripEndpoint, - to: TripEndpoint, - mode: TripMode, + from: TripEndpoint, + to: TripEndpoint, + mode: TripMode, use_vehicle: Option<CarID>, retry_if_no_room: bool, map: &Map diff --git a/rustdoc/sim/make/spawner/fn.driving_goal.html b/rustdoc/sim/make/spawner/fn.driving_goal.html index 7f587dec27..9d379010ee 100644 --- a/rustdoc/sim/make/spawner/fn.driving_goal.html +++ b/rustdoc/sim/make/spawner/fn.driving_goal.html @@ -1,5 +1,5 @@ driving_goal in sim::make::spawner - Rust

Function sim::make::spawner::driving_goal

source ·
fn driving_goal(
-    endpt: TripEndpoint,
+    endpt: TripEndpoint,
     constraints: PathConstraints,
     map: &Map
 ) -> Result<DrivingGoal>
\ No newline at end of file diff --git a/rustdoc/sim/make/spawner/fn.end_sidewalk_spot.html b/rustdoc/sim/make/spawner/fn.end_sidewalk_spot.html index 18a3d89792..4262b54114 100644 --- a/rustdoc/sim/make/spawner/fn.end_sidewalk_spot.html +++ b/rustdoc/sim/make/spawner/fn.end_sidewalk_spot.html @@ -1 +1 @@ -end_sidewalk_spot in sim::make::spawner - Rust

Function sim::make::spawner::end_sidewalk_spot

source ·
fn end_sidewalk_spot(endpt: TripEndpoint, map: &Map) -> Result<SidewalkSpot>
\ No newline at end of file +end_sidewalk_spot in sim::make::spawner - Rust

Function sim::make::spawner::end_sidewalk_spot

source ·
fn end_sidewalk_spot(endpt: TripEndpoint, map: &Map) -> Result<SidewalkSpot>
\ No newline at end of file diff --git a/rustdoc/sim/make/spawner/fn.start_sidewalk_spot.html b/rustdoc/sim/make/spawner/fn.start_sidewalk_spot.html index 335b35d545..c6d1eefb61 100644 --- a/rustdoc/sim/make/spawner/fn.start_sidewalk_spot.html +++ b/rustdoc/sim/make/spawner/fn.start_sidewalk_spot.html @@ -1 +1 @@ -start_sidewalk_spot in sim::make::spawner - Rust

Function sim::make::spawner::start_sidewalk_spot

source ·
fn start_sidewalk_spot(endpt: TripEndpoint, map: &Map) -> Result<SidewalkSpot>
\ No newline at end of file +start_sidewalk_spot in sim::make::spawner - Rust

Function sim::make::spawner::start_sidewalk_spot

source ·
fn start_sidewalk_spot(endpt: TripEndpoint, map: &Map) -> Result<SidewalkSpot>
\ No newline at end of file diff --git a/rustdoc/sim/mechanics/driving/struct.DrivingSimState.html b/rustdoc/sim/mechanics/driving/struct.DrivingSimState.html index 104af2fa99..235849ca3c 100644 --- a/rustdoc/sim/mechanics/driving/struct.DrivingSimState.html +++ b/rustdoc/sim/mechanics/driving/struct.DrivingSimState.html @@ -1,5 +1,5 @@ DrivingSimState in sim::mechanics::driving - Rust

Struct sim::mechanics::driving::DrivingSimState

source ·
pub(crate) struct DrivingSimState {
-    cars: FixedMap<CarID, Car>,
+    cars: FixedMap<CarID, Car>,
     queues: HashMap<Traversable, Queue>,
     events: Vec<Event>,
     waiting_to_spawn: BTreeMap<CarID, (Position, Option<PersonID>)>,
@@ -10,7 +10,7 @@
     time_to_unpark_offstreet: Duration,
     time_to_park_offstreet: Duration,
 }
Expand description

Simulates vehicles!

-

Fields§

§cars: FixedMap<CarID, Car>§queues: HashMap<Traversable, Queue>§events: Vec<Event>§waiting_to_spawn: BTreeMap<CarID, (Position, Option<PersonID>)>§recalc_lanechanging: bool§handle_uber_turns: bool§time_to_unpark_onstreet: Duration§time_to_park_onstreet: Duration§time_to_unpark_offstreet: Duration§time_to_park_offstreet: Duration

Implementations§

source§

impl DrivingSimState

source

pub fn new(map: &Map, opts: &SimOptions) -> DrivingSimState

source

pub fn start_car_on_lane( +

Fields§

§cars: FixedMap<CarID, Car>§queues: HashMap<Traversable, Queue>§events: Vec<Event>§waiting_to_spawn: BTreeMap<CarID, (Position, Option<PersonID>)>§recalc_lanechanging: bool§handle_uber_turns: bool§time_to_unpark_onstreet: Duration§time_to_park_onstreet: Duration§time_to_unpark_offstreet: Duration§time_to_park_offstreet: Duration

Implementations§

source§

impl DrivingSimState

source

pub fn new(map: &Map, opts: &SimOptions) -> DrivingSimState

source

pub fn start_car_on_lane( &mut self, now: Time, params: CreateCar, diff --git a/rustdoc/sim/mechanics/intersection/struct.IntersectionSimState.html b/rustdoc/sim/mechanics/intersection/struct.IntersectionSimState.html index c063b34e06..c9fd0c1268 100644 --- a/rustdoc/sim/mechanics/intersection/struct.IntersectionSimState.html +++ b/rustdoc/sim/mechanics/intersection/struct.IntersectionSimState.html @@ -59,7 +59,7 @@ turn.

now: Time, map: &Map, scheduler: &mut Scheduler, - maybe_cars_and_queues: Option<(&Car, &FixedMap<CarID, Car>, &mut HashMap<Traversable, Queue>)> + maybe_cars_and_queues: Option<(&Car, &FixedMap<CarID, Car>, &mut HashMap<Traversable, Queue>)> ) -> bool

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 @@ -89,7 +89,7 @@ so the longest delayed intersection is first.

now: Time, graph: &mut BTreeMap<AgentID, (Duration, DelayCause)>, map: &Map, - cars: &FixedMap<CarID, Car>, + cars: &FixedMap<CarID, Car>, queues: &HashMap<Traversable, Queue> )

source

fn check_for_conflicts_before_uber_turn( &self, @@ -117,12 +117,12 @@ check for room on the queues.

&mut self, req: &Request, map: &Map, - maybe_cars_and_queues: Option<(&FixedMap<CarID, Car>, &HashMap<Traversable, Queue>)>, + maybe_cars_and_queues: Option<(&FixedMap<CarID, Car>, &HashMap<Traversable, Queue>)>, wakeup_stuck_cycle: Option<(Time, &mut Scheduler)> ) -> bool

source

fn detect_conflict_cycle( &self, car: CarID, - pair: (&FixedMap<CarID, Car>, &HashMap<Traversable, Queue>) + pair: (&FixedMap<CarID, Car>, &HashMap<Traversable, Queue>) ) -> Option<HashSet<CarID>>

Trait Implementations§

source§

impl Clone for IntersectionSimState

source§

fn clone(&self) -> IntersectionSimState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for IntersectionSimState

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for IntersectionSimState

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/sim/mechanics/parking/enum.ParkingSimState.html b/rustdoc/sim/mechanics/parking/enum.ParkingSimState.html index b85b7192c5..826fa78ee2 100644 --- a/rustdoc/sim/mechanics/parking/enum.ParkingSimState.html +++ b/rustdoc/sim/mechanics/parking/enum.ParkingSimState.html @@ -1,13 +1,13 @@ ParkingSimState in sim::mechanics::parking - Rust

Enum sim::mechanics::parking::ParkingSimState

source ·
pub enum ParkingSimState {
     Normal(NormalParkingSimState),
     Infinite(InfiniteParkingSimState),
-}

Variants§

Implementations§

source§

impl ParkingSimState

source

pub fn new(map: &Map, infinite: bool, timer: &mut Timer<'_>) -> ParkingSimState

Counterintuitive: any spots located in blackholes are just not represented here. If somebody +}

Variants§

Implementations§

source§

impl ParkingSimState

source

pub fn new(map: &Map, infinite: bool, timer: &mut Timer<'_>) -> ParkingSimState

Counterintuitive: any spots located in blackholes are just not represented here. If somebody tries to drive from a blackholed spot, they couldn’t reach most places.

source

pub fn is_infinite(&self) -> bool

Trait Implementations§

source§

impl Clone for ParkingSimState

source§

fn clone(&self) -> ParkingSimState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for ParkingSimState

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<InfiniteParkingSimState> for ParkingSimState

source§

fn from(v: InfiniteParkingSimState) -> ParkingSimState

Converts to this type from the input type.
source§

impl From<NormalParkingSimState> for ParkingSimState

source§

fn from(v: NormalParkingSimState) -> ParkingSimState

Converts to this type from the input type.
source§

impl ParkingSim for ParkingSimState

source§

fn handle_live_edits( &mut self, __enum_dispatch_arg_0: &Map, - __enum_dispatch_arg_1: &mut Timer<'_> + __enum_dispatch_arg_1: &mut Timer<'_> ) -> (Vec<ParkedCar>, Vec<CarID>)

Returns any cars that got very abruptly evicted from existence, and also cars actively moving into a deleted spot.

source§

fn unreserve_spot(&mut self, __enum_dispatch_arg_0: CarID)

Needed when abruptly deleting a car, in case they’re being deleted during their last step.

diff --git a/rustdoc/sim/mechanics/parking/struct.InfiniteParkingSimState.html b/rustdoc/sim/mechanics/parking/struct.InfiniteParkingSimState.html index 5dfb987717..f62c6bb1f5 100644 --- a/rustdoc/sim/mechanics/parking/struct.InfiniteParkingSimState.html +++ b/rustdoc/sim/mechanics/parking/struct.InfiniteParkingSimState.html @@ -2,7 +2,7 @@ parked_cars: BTreeMap<CarID, ParkedCar>, occupants: BTreeMap<ParkingSpot, CarID>, reserved_spots: BTreeMap<ParkingSpot, CarID>, - driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>, + driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>, blackholed_building_redirects: BTreeMap<BuildingID, BuildingID>, num_occupants_per_offstreet: BTreeMap<BuildingID, usize>, events: Vec<Event>, @@ -10,11 +10,11 @@ disables the simulation of parking entirely, making driving trips just go directly between buildings. Useful for maps without good parking data (which is currently all of them) and experiments where parking contention skews results and just gets in the way.

-

Fields§

§parked_cars: BTreeMap<CarID, ParkedCar>§occupants: BTreeMap<ParkingSpot, CarID>§reserved_spots: BTreeMap<ParkingSpot, CarID>§driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>§blackholed_building_redirects: BTreeMap<BuildingID, BuildingID>§num_occupants_per_offstreet: BTreeMap<BuildingID, usize>§events: Vec<Event>

Implementations§

Trait Implementations§

source§

impl Clone for InfiniteParkingSimState

source§

fn clone(&self) -> InfiniteParkingSimState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for InfiniteParkingSimState

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where +

Fields§

§parked_cars: BTreeMap<CarID, ParkedCar>§occupants: BTreeMap<ParkingSpot, CarID>§reserved_spots: BTreeMap<ParkingSpot, CarID>§driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>§blackholed_building_redirects: BTreeMap<BuildingID, BuildingID>§num_occupants_per_offstreet: BTreeMap<BuildingID, usize>§events: Vec<Event>

Implementations§

Trait Implementations§

source§

impl Clone for InfiniteParkingSimState

source§

fn clone(&self) -> InfiniteParkingSimState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for InfiniteParkingSimState

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<InfiniteParkingSimState> for ParkingSimState

source§

fn from(v: InfiniteParkingSimState) -> ParkingSimState

Converts to this type from the input type.
source§

impl ParkingSim for InfiniteParkingSimState

source§

fn handle_live_edits( &mut self, map: &Map, - _: &mut Timer<'_> + _: &mut Timer<'_> ) -> (Vec<ParkedCar>, Vec<CarID>)

Returns any cars that got very abruptly evicted from existence, and also cars actively moving into a deleted spot.
source§

fn get_free_onstreet_spots(&self, _: LaneID) -> Vec<ParkingSpot>

source§

fn get_free_offstreet_spots(&self, b: BuildingID) -> Vec<ParkingSpot>

source§

fn get_free_lot_spots(&self, _: ParkingLotID) -> Vec<ParkingSpot>

source§

fn reserve_spot(&mut self, spot: ParkingSpot, car: CarID)

source§

fn unreserve_spot(&mut self, car: CarID)

Needed when abruptly deleting a car, in case they’re being deleted during their last step.
source§

fn remove_parked_car(&mut self, p: ParkedCar)

source§

fn add_parked_car(&mut self, p: ParkedCar)

source§

fn get_draw_cars(&self, _: LaneID, _: &Map) -> Vec<DrawCarInput>

source§

fn get_draw_cars_in_lots(&self, _: LaneID, _: &Map) -> Vec<DrawCarInput>

source§

fn get_draw_car(&self, _: CarID, _: &Map) -> Option<DrawCarInput>

source§

fn canonical_pt(&self, id: CarID, map: &Map) -> Option<Pt2D>

There’s no DrawCarInput for cars parked offstreet, so we need this.
source§

fn get_all_draw_cars(&self, _: &Map) -> Vec<DrawCarInput>

source§

fn is_free(&self, spot: ParkingSpot) -> bool

source§

fn get_car_at_spot(&self, spot: ParkingSpot) -> Option<&ParkedCar>

source§

fn get_all_free_spots( &self, diff --git a/rustdoc/sim/mechanics/parking/struct.NormalParkingSimState.html b/rustdoc/sim/mechanics/parking/struct.NormalParkingSimState.html index 58212d55b3..3383eab40a 100644 --- a/rustdoc/sim/mechanics/parking/struct.NormalParkingSimState.html +++ b/rustdoc/sim/mechanics/parking/struct.NormalParkingSimState.html @@ -3,17 +3,17 @@ occupants: BTreeMap<ParkingSpot, CarID>, reserved_spots: BTreeMap<ParkingSpot, CarID>, onstreet_lanes: BTreeMap<LaneID, ParkingLane>, - driving_to_parking_lanes: MultiMap<LaneID, LaneID>, + driving_to_parking_lanes: MultiMap<LaneID, LaneID>, num_spots_per_offstreet: BTreeMap<BuildingID, usize>, - driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>, + driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>, num_spots_per_lot: BTreeMap<ParkingLotID, usize>, - driving_to_lots: MultiMap<LaneID, ParkingLotID>, + driving_to_lots: MultiMap<LaneID, ParkingLotID>, events: Vec<Event>, -}

Fields§

§parked_cars: BTreeMap<CarID, ParkedCar>§occupants: BTreeMap<ParkingSpot, CarID>§reserved_spots: BTreeMap<ParkingSpot, CarID>§onstreet_lanes: BTreeMap<LaneID, ParkingLane>§driving_to_parking_lanes: MultiMap<LaneID, LaneID>§num_spots_per_offstreet: BTreeMap<BuildingID, usize>§driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>§num_spots_per_lot: BTreeMap<ParkingLotID, usize>§driving_to_lots: MultiMap<LaneID, ParkingLotID>§events: Vec<Event>

Implementations§

source§

impl NormalParkingSimState

source

fn new(map: &Map, timer: &mut Timer<'_>) -> NormalParkingSimState

Trait Implementations§

source§

impl Clone for NormalParkingSimState

source§

fn clone(&self) -> NormalParkingSimState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for NormalParkingSimState

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where +}

Fields§

§parked_cars: BTreeMap<CarID, ParkedCar>§occupants: BTreeMap<ParkingSpot, CarID>§reserved_spots: BTreeMap<ParkingSpot, CarID>§onstreet_lanes: BTreeMap<LaneID, ParkingLane>§driving_to_parking_lanes: MultiMap<LaneID, LaneID>§num_spots_per_offstreet: BTreeMap<BuildingID, usize>§driving_to_offstreet: MultiMap<LaneID, (BuildingID, Distance)>§num_spots_per_lot: BTreeMap<ParkingLotID, usize>§driving_to_lots: MultiMap<LaneID, ParkingLotID>§events: Vec<Event>

Implementations§

Trait Implementations§

source§

impl Clone for NormalParkingSimState

source§

fn clone(&self) -> NormalParkingSimState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for NormalParkingSimState

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<NormalParkingSimState> for ParkingSimState

source§

fn from(v: NormalParkingSimState) -> ParkingSimState

Converts to this type from the input type.
source§

impl ParkingSim for NormalParkingSimState

source§

fn handle_live_edits( &mut self, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (Vec<ParkedCar>, Vec<CarID>)

Returns any cars that got very abruptly evicted from existence, and also cars actively moving into a deleted spot.
source§

fn get_free_onstreet_spots(&self, l: LaneID) -> Vec<ParkingSpot>

source§

fn get_free_offstreet_spots(&self, b: BuildingID) -> Vec<ParkingSpot>

source§

fn get_free_lot_spots(&self, pl: ParkingLotID) -> Vec<ParkingSpot>

source§

fn reserve_spot(&mut self, spot: ParkingSpot, car: CarID)

source§

fn unreserve_spot(&mut self, car: CarID)

Needed when abruptly deleting a car, in case they’re being deleted during their last step.
source§

fn remove_parked_car(&mut self, p: ParkedCar)

source§

fn add_parked_car(&mut self, p: ParkedCar)

source§

fn get_draw_cars(&self, id: LaneID, map: &Map) -> Vec<DrawCarInput>

source§

fn get_draw_cars_in_lots(&self, id: LaneID, map: &Map) -> Vec<DrawCarInput>

source§

fn get_draw_car(&self, id: CarID, map: &Map) -> Option<DrawCarInput>

source§

fn canonical_pt(&self, id: CarID, map: &Map) -> Option<Pt2D>

There’s no DrawCarInput for cars parked offstreet, so we need this.
source§

fn get_all_draw_cars(&self, map: &Map) -> Vec<DrawCarInput>

source§

fn is_free(&self, spot: ParkingSpot) -> bool

source§

fn get_car_at_spot(&self, spot: ParkingSpot) -> Option<&ParkedCar>

source§

fn get_all_free_spots( &self, diff --git a/rustdoc/sim/mechanics/parking/trait.ParkingSim.html b/rustdoc/sim/mechanics/parking/trait.ParkingSim.html index 44134dbbb1..53220b73f0 100644 --- a/rustdoc/sim/mechanics/parking/trait.ParkingSim.html +++ b/rustdoc/sim/mechanics/parking/trait.ParkingSim.html @@ -3,7 +3,7 @@ fn handle_live_edits( &mut self, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (Vec<ParkedCar>, Vec<CarID>); fn get_free_onstreet_spots(&self, l: LaneID) -> Vec<ParkingSpot>; fn get_free_offstreet_spots(&self, b: BuildingID) -> Vec<ParkingSpot>; @@ -55,7 +55,7 @@ ignored

Required Methods§

source

fn handle_live_edits( &mut self, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (Vec<ParkedCar>, Vec<CarID>)

Returns any cars that got very abruptly evicted from existence, and also cars actively moving into a deleted spot.

source

fn get_free_onstreet_spots(&self, l: LaneID) -> Vec<ParkingSpot>

source

fn get_free_offstreet_spots(&self, b: BuildingID) -> Vec<ParkingSpot>

source

fn get_free_lot_spots(&self, pl: ParkingLotID) -> Vec<ParkingSpot>

source

fn reserve_spot(&mut self, spot: ParkingSpot, car: CarID)

source

fn unreserve_spot(&mut self, car: CarID)

Needed when abruptly deleting a car, in case they’re being deleted during their last step.

diff --git a/rustdoc/sim/mechanics/queue/fn.dump_cars.html b/rustdoc/sim/mechanics/queue/fn.dump_cars.html index 53307b0b03..faffcaaa45 100644 --- a/rustdoc/sim/mechanics/queue/fn.dump_cars.html +++ b/rustdoc/sim/mechanics/queue/fn.dump_cars.html @@ -1,6 +1,6 @@ dump_cars in sim::mechanics::queue - Rust

Function sim::mechanics::queue::dump_cars

source ·
fn dump_cars(
     dists: &[QueueEntry],
-    cars: &FixedMap<CarID, Car>,
+    cars: &FixedMap<CarID, Car>,
     id: Traversable,
     now: Time
 )
\ No newline at end of file diff --git a/rustdoc/sim/mechanics/queue/fn.validate_positions.html b/rustdoc/sim/mechanics/queue/fn.validate_positions.html index 6e58664e86..2ef7b9103c 100644 --- a/rustdoc/sim/mechanics/queue/fn.validate_positions.html +++ b/rustdoc/sim/mechanics/queue/fn.validate_positions.html @@ -1,6 +1,6 @@ validate_positions in sim::mechanics::queue - Rust

Function sim::mechanics::queue::validate_positions

source ·
fn validate_positions(
     dists: &[QueueEntry],
-    cars: &FixedMap<CarID, Car>,
+    cars: &FixedMap<CarID, Car>,
     now: Time,
     id: Traversable
 )
\ No newline at end of file diff --git a/rustdoc/sim/mechanics/queue/struct.Queue.html b/rustdoc/sim/mechanics/queue/struct.Queue.html index 542e50de96..bc9d2c7af9 100644 --- a/rustdoc/sim/mechanics/queue/struct.Queue.html +++ b/rustdoc/sim/mechanics/queue/struct.Queue.html @@ -32,19 +32,19 @@ this length first. This is unused for turns themselves. This value can exceed ge

Implementations§

source§

impl Queue

source

pub fn new(id: Traversable, map: &Map) -> Queue

source

pub fn get_last_car_position( &self, now: Time, - cars: &FixedMap<CarID, Car>, + cars: &FixedMap<CarID, Car>, queues: &HashMap<Traversable, Queue> ) -> Option<(CarID, Distance)>

Get the front of the last car in the queue.

source

pub fn get_car_positions( &self, now: Time, - cars: &FixedMap<CarID, Car>, + cars: &FixedMap<CarID, Car>, queues: &HashMap<Traversable, Queue> ) -> Vec<QueueEntry>

Return the exact position of each member of the queue. The farthest along (greatest distance) is first.

source

fn inner_get_last_car_position( &self, now: Time, - cars: &FixedMap<CarID, Car>, + cars: &FixedMap<CarID, Car>, queues: &HashMap<Traversable, Queue>, recursed_queues: &mut BTreeSet<Traversable>, intermediate_results: Option<&mut Vec<QueueEntry>> @@ -54,7 +54,7 @@ this length first. This is unused for turns themselves. This value can exceed ge start_dist: Distance, vehicle_len: Distance, now: Time, - cars: &FixedMap<CarID, Car>, + cars: &FixedMap<CarID, Car>, queues: &HashMap<Traversable, Queue> ) -> Option<usize>

If the specified car can appear in the queue, return the position in the queue to do so.

source

pub fn insert_car_at_idx(&mut self, idx: usize, car: &Car)

Record that a car has entered a queue at a position. This must match get_idx_to_insert_car @@ -90,7 +90,7 @@ the index from can_block_from_driveway.

pos: &Position, vehicle_len: Distance, now: Time, - cars: &FixedMap<CarID, Car>, + cars: &FixedMap<CarID, Car>, queues: &HashMap<Traversable, Queue> ) -> Option<usize>

True if a static blockage can be inserted into the queue without anything already there intersecting it. Returns the index if so. The position represents the front of the diff --git a/rustdoc/sim/mechanics/walking/fn.crowdedness_penalty.html b/rustdoc/sim/mechanics/walking/fn.crowdedness_penalty.html index b82e85e5b2..7ca2a96a54 100644 --- a/rustdoc/sim/mechanics/walking/fn.crowdedness_penalty.html +++ b/rustdoc/sim/mechanics/walking/fn.crowdedness_penalty.html @@ -1,7 +1,7 @@ crowdedness_penalty in sim::mechanics::walking - Rust

Function sim::mechanics::walking::crowdedness_penalty

source ·
fn crowdedness_penalty(
     map: &Map,
     traversable: Traversable,
-    peds_per_traversable: &MultiMap<Traversable, PedestrianID>
+    peds_per_traversable: &MultiMap<Traversable, PedestrianID>
 ) -> f64
Expand description

Returns a number in (0, 1] to multiply speed by to account for current crowdedness.

We could get really fancy here and slow people down only when they’re part of a crowd, or passing people going the opposite direction. But start simple – keep a fixed speed for the diff --git a/rustdoc/sim/mechanics/walking/struct.Pedestrian.html b/rustdoc/sim/mechanics/walking/struct.Pedestrian.html index b3c71d273d..f32597eaaf 100644 --- a/rustdoc/sim/mechanics/walking/struct.Pedestrian.html +++ b/rustdoc/sim/mechanics/walking/struct.Pedestrian.html @@ -11,7 +11,7 @@ person: PersonID, }

Fields§

§id: PedestrianID§state: PedState§speed: Speed§total_blocked_time: Duration§started_at: Time§path: Path§start: SidewalkSpot§goal: SidewalkSpot§trip: TripID§person: PersonID

Implementations§

source§

impl Pedestrian

source

fn crossing_state( &self, - peds_per_traversable: &MultiMap<Traversable, PedestrianID>, + peds_per_traversable: &MultiMap<Traversable, PedestrianID>, start_dist: Distance, start_time: Time, map: &Map, @@ -21,7 +21,7 @@ now: Time, map: &Map, intersections: &mut IntersectionSimState, - peds_per_traversable: &mut MultiMap<Traversable, PedestrianID>, + peds_per_traversable: &mut MultiMap<Traversable, PedestrianID>, events: &mut Vec<Event>, scheduler: &mut Scheduler ) -> bool

Trait Implementations§

source§

impl Clone for Pedestrian

source§

fn clone(&self) -> Pedestrian

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for Pedestrian

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where diff --git a/rustdoc/sim/mechanics/walking/struct.WalkingSimState.html b/rustdoc/sim/mechanics/walking/struct.WalkingSimState.html index 548ca9be7b..9483f81b7a 100644 --- a/rustdoc/sim/mechanics/walking/struct.WalkingSimState.html +++ b/rustdoc/sim/mechanics/walking/struct.WalkingSimState.html @@ -1,11 +1,11 @@ WalkingSimState in sim::mechanics::walking - Rust

Struct sim::mechanics::walking::WalkingSimState

source ·
pub(crate) struct WalkingSimState {
-    peds: FixedMap<PedestrianID, Pedestrian>,
-    peds_per_traversable: MultiMap<Traversable, PedestrianID>,
+    peds: FixedMap<PedestrianID, Pedestrian>,
+    peds_per_traversable: MultiMap<Traversable, PedestrianID>,
     events: Vec<Event>,
 }
Expand description

Simulates pedestrians. Unlike vehicles, pedestrians can move bidirectionally on sidewalks and just “ghost” through each other. There’s no queueing or slowdown when many people are overlapping. They’re simply grouped together into a DrawPedCrowdInput for rendering.

-

Fields§

§peds: FixedMap<PedestrianID, Pedestrian>§peds_per_traversable: MultiMap<Traversable, PedestrianID>§events: Vec<Event>

Implementations§

source§

impl WalkingSimState

Fields§

§peds: FixedMap<PedestrianID, Pedestrian>§peds_per_traversable: MultiMap<Traversable, PedestrianID>§events: Vec<Event>

Implementations§

source§

impl WalkingSimState

source

pub fn new() -> WalkingSimState

source

pub fn spawn_ped( &mut self, now: Time, params: CreatePedestrian, diff --git a/rustdoc/sim/prebake/fn.prebake.html b/rustdoc/sim/prebake/fn.prebake.html index 6011aace79..5eecac745f 100644 --- a/rustdoc/sim/prebake/fn.prebake.html +++ b/rustdoc/sim/prebake/fn.prebake.html @@ -1,7 +1,7 @@ prebake in sim::prebake - Rust

Function sim::prebake::prebake

source ·
pub fn prebake(
     map: &Map,
-    scenario: Scenario,
-    timer: &mut Timer<'_>
+    scenario: Scenario,
+    timer: &mut Timer<'_>
 ) -> PrebakeSummary
Expand description

Simulate a curated list of scenarios to completion, and save the analytics as “prebaked results,” to later compare simulation metrics against the baseline without map edits.

\ No newline at end of file diff --git a/rustdoc/sim/prebake/struct.PrebakeSummary.html b/rustdoc/sim/prebake/struct.PrebakeSummary.html index 2cd5bc23cc..b1af43d1dc 100644 --- a/rustdoc/sim/prebake/struct.PrebakeSummary.html +++ b/rustdoc/sim/prebake/struct.PrebakeSummary.html @@ -4,7 +4,7 @@ pub finished_trips: usize, pub cancelled_trips: usize, pub total_trip_duration_seconds: f64, -}

Fields§

§map: String§scenario: String§finished_trips: usize§cancelled_trips: usize§total_trip_duration_seconds: f64

Implementations§

source§

impl PrebakeSummary

source

pub fn new(sim: &Sim, scenario: &Scenario) -> Self

Trait Implementations§

source§

impl Debug for PrebakeSummary

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Serialize for PrebakeSummary

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where +}

Fields§

§map: String§scenario: String§finished_trips: usize§cancelled_trips: usize§total_trip_duration_seconds: f64

Implementations§

source§

impl PrebakeSummary

source

pub fn new(sim: &Sim, scenario: &Scenario) -> Self

Trait Implementations§

source§

impl Debug for PrebakeSummary

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Serialize for PrebakeSummary

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where diff --git a/rustdoc/sim/recorder/struct.TrafficRecorder.html b/rustdoc/sim/recorder/struct.TrafficRecorder.html index 8f6085f741..835e391b08 100644 --- a/rustdoc/sim/recorder/struct.TrafficRecorder.html +++ b/rustdoc/sim/recorder/struct.TrafficRecorder.html @@ -1,11 +1,11 @@ TrafficRecorder in sim::recorder - Rust

Struct sim::recorder::TrafficRecorder

source ·
pub(crate) struct TrafficRecorder {
     capture_points: BTreeSet<IntersectionID>,
-    trips: Vec<IndividTrip>,
+    trips: Vec<IndividTrip>,
     seen_trips: BTreeSet<TripID>,
 }
Expand description

Records trips beginning and ending at a specified set of intersections. This can be used to capture and reproduce behavior in a gridlock-prone chunk of the map, without simulating everything.

-

Fields§

§capture_points: BTreeSet<IntersectionID>§trips: Vec<IndividTrip>§seen_trips: BTreeSet<TripID>

Implementations§

source§

impl TrafficRecorder

source

pub fn new(capture_points: BTreeSet<IntersectionID>) -> TrafficRecorder

source

pub fn handle_event( +

Fields§

§capture_points: BTreeSet<IntersectionID>§trips: Vec<IndividTrip>§seen_trips: BTreeSet<TripID>

Implementations§

source§

impl TrafficRecorder

source

pub fn new(capture_points: BTreeSet<IntersectionID>) -> TrafficRecorder

source

pub fn handle_event( &mut self, time: Time, ev: &Event, diff --git a/rustdoc/sim/scheduler/struct.Scheduler.html b/rustdoc/sim/scheduler/struct.Scheduler.html index 027273a682..fd8c1ae804 100644 --- a/rustdoc/sim/scheduler/struct.Scheduler.html +++ b/rustdoc/sim/scheduler/struct.Scheduler.html @@ -1,14 +1,14 @@ Scheduler in sim::scheduler - Rust

Struct sim::scheduler::Scheduler

source ·
pub(crate) struct Scheduler {
-    items: BinaryHeap<PriorityQueueItem<Time, CommandType>>,
+    items: BinaryHeap<PriorityQueueItem<Time, CommandType>>,
     queued_commands: HashMap<CommandType, (Command, Time)>,
     latest_time: Time,
     last_time: Time,
     delta_times: Histogram<Duration>,
-    cmd_type_counts: Counter<SimpleCommandType>,
+    cmd_type_counts: Counter<SimpleCommandType>,
 }
Expand description

The priority queue driving the discrete event simulation. Different pieces of the simulation schedule Commands to happen at a specific time, and the Scheduler hands out the commands in order.

-

Fields§

§items: BinaryHeap<PriorityQueueItem<Time, CommandType>>§queued_commands: HashMap<CommandType, (Command, Time)>§latest_time: Time§last_time: Time§delta_times: Histogram<Duration>§cmd_type_counts: Counter<SimpleCommandType>

Implementations§

source§

impl Scheduler

source

pub fn new() -> Scheduler

source

pub fn push(&mut self, time: Time, cmd: Command)

source

pub fn update(&mut self, new_time: Time, cmd: Command)

source

pub fn cancel(&mut self, cmd: Command)

source

pub fn peek_next_time(&self) -> Option<Time>

This next command might’ve actually been rescheduled to a later time; the caller won’t know +

Fields§

§items: BinaryHeap<PriorityQueueItem<Time, CommandType>>§queued_commands: HashMap<CommandType, (Command, Time)>§latest_time: Time§last_time: Time§delta_times: Histogram<Duration>§cmd_type_counts: Counter<SimpleCommandType>

Implementations§

source§

impl Scheduler

source

pub fn new() -> Scheduler

source

pub fn push(&mut self, time: Time, cmd: Command)

source

pub fn update(&mut self, new_time: Time, cmd: Command)

source

pub fn cancel(&mut self, cmd: Command)

source

pub fn peek_next_time(&self) -> Option<Time>

This next command might’ve actually been rescheduled to a later time; the caller won’t know that here.

source

pub fn get_last_time(&self) -> Time

source

pub fn get_next(&mut self) -> Option<Command>

This API is safer than handing out a batch of items at a time, because while processing one item, we might change the priority of other items or add new items. Don’t make the caller diff --git a/rustdoc/sim/sim/scenario/fn.count_parked_cars_per_bldg.html b/rustdoc/sim/sim/scenario/fn.count_parked_cars_per_bldg.html index 685d4017cc..a04fc43511 100644 --- a/rustdoc/sim/sim/scenario/fn.count_parked_cars_per_bldg.html +++ b/rustdoc/sim/sim/scenario/fn.count_parked_cars_per_bldg.html @@ -1 +1 @@ -count_parked_cars_per_bldg in sim::sim::scenario - Rust

Function sim::sim::scenario::count_parked_cars_per_bldg

source ·
pub fn count_parked_cars_per_bldg(scenario: &Scenario) -> Counter<BuildingID>
\ No newline at end of file +count_parked_cars_per_bldg in sim::sim::scenario - Rust

Function sim::sim::scenario::count_parked_cars_per_bldg

source ·
pub fn count_parked_cars_per_bldg(scenario: &Scenario) -> Counter<BuildingID>
\ No newline at end of file diff --git a/rustdoc/sim/sim/scenario/fn.get_vehicles.html b/rustdoc/sim/sim/scenario/fn.get_vehicles.html index babefeeaa8..eb53478c72 100644 --- a/rustdoc/sim/sim/scenario/fn.get_vehicles.html +++ b/rustdoc/sim/sim/scenario/fn.get_vehicles.html @@ -1,4 +1,4 @@ get_vehicles in sim::sim::scenario - Rust

Function sim::sim::scenario::get_vehicles

source ·
fn get_vehicles(
-    person: &PersonSpec,
+    person: &PersonSpec,
     rng: &mut XorShiftRng
 ) -> (Vec<VehicleSpec>, Vec<(usize, BuildingID)>, Vec<Option<usize>>)
\ No newline at end of file diff --git a/rustdoc/sim/sim/scenario/fn.seed_parked_cars.html b/rustdoc/sim/sim/scenario/fn.seed_parked_cars.html index 914331726f..14c548336b 100644 --- a/rustdoc/sim/sim/scenario/fn.seed_parked_cars.html +++ b/rustdoc/sim/sim/scenario/fn.seed_parked_cars.html @@ -3,5 +3,5 @@ sim: &mut Sim, map: &Map, base_rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )
\ No newline at end of file diff --git a/rustdoc/sim/sim/struct.Sim.html b/rustdoc/sim/sim/struct.Sim.html index 4aebd4e960..402255e68b 100644 --- a/rustdoc/sim/sim/struct.Sim.html +++ b/rustdoc/sim/sim/struct.Sim.html @@ -18,7 +18,7 @@ alerts: AlertHandler,

}
Expand description

The Sim ties together all the pieces of the simulation. Its main property is the current time.

Fields§

§driving: DrivingSimState§parking: ParkingSimState§walking: WalkingSimState§intersections: IntersectionSimState§transit: TransitSimState§trips: TripManager§pandemic: Option<PandemicModel>§scheduler: Scheduler§time: Time§map_name: MapName§edits_name: String§run_name: String§step_count: usize§highlighted_people: Option<BTreeSet<PersonID>>§analytics: Analytics§recorder: Option<TrafficRecorder>§alerts: AlertHandler

Implementations§

source§

impl Sim

source

pub fn time(&self) -> Time

source

pub fn is_done(&self) -> bool

source

pub fn is_empty(&self) -> bool

source

pub fn num_trips(&self) -> (usize, usize)

(number of finished trips, number of unfinished trips)

-
source

pub fn num_agents(&self) -> Counter<AgentType>

source

pub fn num_commuters_vehicles(&self) -> CommutersVehiclesCounts

source

pub fn num_ppl(&self) -> (usize, usize, usize)

(total number of people, just in buildings, just off map)

+
source

pub fn num_agents(&self) -> Counter<AgentType>

source

pub fn num_commuters_vehicles(&self) -> CommutersVehiclesCounts

source

pub fn num_ppl(&self) -> (usize, usize, usize)

(total number of people, just in buildings, just off map)

source

pub fn debug_ped(&self, id: PedestrianID)

source

pub fn debug_car(&self, id: CarID)

source

pub fn debug_car_ui(&self, id: CarID) -> String

Return a short string to debug a car in the UI.

source

pub fn debug_agent_json(&self, id: AgentID) -> String

source

pub fn debug_intersection_json(&self, id: IntersectionID, map: &Map) -> String

source

pub fn debug_lane(&self, id: LaneID)

source

pub fn agent_properties(&self, map: &Map, id: AgentID) -> AgentProperties

Only call for active agents, will panic otherwise

source

pub fn num_transit_passengers(&self, car: CarID) -> usize

source

pub fn bus_route_id(&self, maybe_bus: CarID) -> Option<TransitRouteID>

source

pub fn active_agents(&self) -> Vec<AgentID>

source

pub fn num_active_agents(&self) -> usize

source

pub fn agent_to_trip(&self, id: AgentID) -> Option<TripID>

source

pub fn trip_to_agent(&self, id: TripID) -> TripResult<AgentID>

source

pub fn trip_info(&self, id: TripID) -> TripInfo

source

pub fn all_trip_info(&self) -> Vec<(TripID, TripInfo)>

source

pub fn finished_trip_details( @@ -26,7 +26,7 @@ id: TripID ) -> Option<(Duration, Duration, Distance)>

If trip is finished, returns (total time, total waiting time, total distance)

source

pub fn trip_blocked_time(&self, id: TripID) -> Duration

source

pub fn trip_to_person(&self, id: TripID) -> Option<PersonID>

source

pub fn agent_to_person(&self, id: AgentID) -> Option<PersonID>

source

pub fn person_to_agent(&self, id: PersonID) -> Option<AgentID>

source

pub fn get_owner_of_car(&self, id: CarID) -> Option<PersonID>

source

pub fn lookup_parked_car(&self, id: CarID) -> Option<&ParkedCar>

source

pub fn all_parked_car_positions(&self, map: &Map) -> Vec<(Position, Position)>

For every parked car, (position of parking spot, position of owner)

-
source

pub fn lookup_person(&self, id: PersonID) -> Option<&Person>

source

pub fn get_person(&self, id: PersonID) -> &Person

source

pub fn find_person_by_orig_id(&self, id: OrigPersonID) -> Option<PersonID>

source

pub fn get_all_people(&self) -> &Vec<Person>

source

pub fn lookup_car_id(&self, idx: usize) -> Option<CarID>

source

pub fn get_path(&self, id: AgentID) -> Option<&Path>

source

pub fn get_all_driving_paths(&self) -> Vec<&Path>

source

pub fn trace_route(&self, id: AgentID, map: &Map) -> Option<PolyLine>

source

pub fn get_canonical_pt_per_trip( +

source

pub fn lookup_person(&self, id: PersonID) -> Option<&Person>

source

pub fn get_person(&self, id: PersonID) -> &Person

source

pub fn find_person_by_orig_id(&self, id: OrigPersonID) -> Option<PersonID>

source

pub fn get_all_people(&self) -> &Vec<Person>

source

pub fn lookup_car_id(&self, idx: usize) -> Option<CarID>

source

pub fn get_path(&self, id: AgentID) -> Option<&Path>

source

pub fn get_all_driving_paths(&self) -> Vec<&Path>

source

pub fn trace_route(&self, id: AgentID, map: &Map) -> Option<PolyLine>

source

pub fn get_canonical_pt_per_trip( &self, trip: TripID, map: &Map @@ -62,7 +62,7 @@ waiting. Sorted by earliest waiting (likely the root cause of gridlock).

source

pub fn get_people_waiting_at_stop( &self, at: TransitStopID -) -> &Vec<(PedestrianID, TransitRouteID, Option<TransitStopID>, Time)>

source

pub fn generate_scenario(&self, map: &Map, name: String) -> Scenario

source

pub fn infinite_parking(&self) -> bool

source

pub fn all_waiting_people(&self) -> BTreeMap<PersonID, Duration>

source

pub fn describe_internal_stats(&self) -> Vec<String>

source

pub fn debug_queue_lengths(&self, l: LaneID) -> Option<(Distance, Distance)>

source

pub fn get_trip_time_lower_bound( +) -> &Vec<(PedestrianID, TransitRouteID, Option<TransitStopID>, Time)>

source

pub fn generate_scenario(&self, map: &Map, name: String) -> Scenario

source

pub fn infinite_parking(&self) -> bool

source

pub fn all_waiting_people(&self) -> BTreeMap<PersonID, Duration>

source

pub fn describe_internal_stats(&self) -> Vec<String>

source

pub fn debug_queue_lengths(&self, l: LaneID) -> Option<(Distance, Distance)>

source

pub fn get_trip_time_lower_bound( &self, map: &Map, id: TripID @@ -86,24 +86,24 @@ found. Assumes the TripID exists.

rendering ones don’t.

source

pub fn get_unzoomed_transit_riders(&self, map: &Map) -> Vec<UnzoomedAgent>

source§

impl Sim

source

pub fn instantiate( &mut self, - scenario: &Scenario, + scenario: &Scenario, map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

pub fn instantiate_without_retries( &mut self, - scenario: &Scenario, + scenario: &Scenario, map: &Map, rng: &mut XorShiftRng, retry_if_no_room: bool, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

If retry_if_no_room is false, any vehicles that fail to spawn because of something else in the way will just wind up as cancelled trips.

source§

impl Sim

source

pub fn new(map: &Map, opts: SimOptions) -> Sim

source

pub(crate) fn spawn_trips( &mut self, input: Vec<(PersonID, TripInfo, StartTripArgs)>, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

pub fn get_free_onstreet_spots(&self, l: LaneID) -> Vec<ParkingSpot>

source

pub fn get_free_offstreet_spots(&self, b: BuildingID) -> Vec<ParkingSpot>

source

pub fn get_free_lot_spots(&self, pl: ParkingLotID) -> Vec<ParkingSpot>

source

pub fn get_all_parking_spots(&self) -> (Vec<ParkingSpot>, Vec<ParkingSpot>)

(Filled, available)

source

pub fn bldg_to_parked_cars(&self, b: BuildingID) -> Vec<CarID>

source

pub fn walking_path_to_nearest_parking_spot( &self, @@ -111,7 +111,7 @@ the way will just wind up as cancelled trips.

b: BuildingID ) -> Option<Path>

source

pub(crate) fn new_person( &mut self, - orig_id: Option<OrigPersonID>, + orig_id: Option<OrigPersonID>, ped_speed: Speed, vehicle_specs: Vec<VehicleSpec> ) -> &Person

source

pub(crate) fn seed_parked_car(&mut self, vehicle: Vehicle, spot: ParkingSpot)

source

pub(crate) fn seed_bus_route(&mut self, route: &TransitRoute)

source

fn start_bus(&mut self, route: &TransitRoute, map: &Map)

source

pub fn set_run_name(&mut self, name: String)

source

pub fn get_run_name(&self) -> &String

source§

impl Sim

source

fn minimal_step( @@ -130,7 +130,7 @@ the way will just wind up as cancelled trips.

map: &Map, dt: Duration, maybe_cb: &mut Option<Box<dyn SimCallback>>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

pub fn tiny_step( &mut self, map: &Map, @@ -141,16 +141,16 @@ the way will just wind up as cancelled trips.

dt: Duration, real_time_limit: Duration, maybe_cb: &mut Option<Box<dyn SimCallback>> -)

source

pub fn dump_before_abort(&self)

source§

impl Sim

source

pub fn save_dir(&self) -> String

source

fn save_path(&self, base_time: Time) -> String

source

pub fn save(&mut self) -> String

source

pub fn find_previous_savestate(&self, base_time: Time) -> Option<String>

source

pub fn find_next_savestate(&self, base_time: Time) -> Option<String>

source

pub fn load_savestate(path: String, timer: &mut Timer<'_>) -> Result<Sim>

source§

impl Sim

source§

impl Sim

source

pub fn save_dir(&self) -> String

source

fn save_path(&self, base_time: Time) -> String

source

pub fn save(&mut self) -> String

source

pub fn find_previous_savestate(&self, base_time: Time) -> Option<String>

source

pub fn find_next_savestate(&self, base_time: Time) -> Option<String>

source

pub fn load_savestate(path: String, timer: &mut Timer<'_>) -> Result<Sim>

source§

impl Sim

source

pub fn handle_live_edited_traffic_signals(&mut self, map: &Map)

source

pub fn handle_live_edits( &mut self, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (usize, usize)

Respond to arbitrary map edits without resetting the simulation. Returns the number of (trips cancelled, parked cars displaced).

source

fn find_trips_affected_by_live_edits( &mut self, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (BTreeSet<(AgentID, TripID)>, usize)

Returns (trips affected, number of parked cars displaced)

source§

impl Sim

source

pub fn delete_car(&mut self, id: CarID, map: &Map)

source

pub fn clear_alerts(&mut self) -> Vec<(Time, AlertLocation, String)>

source§

impl Sim

source

pub fn set_periodic_callback(&mut self, frequency: Duration)

Only one at a time supported.

source

pub fn unset_periodic_callback(&mut self)

source§

impl Sim

source

pub fn record_traffic_for(&mut self, intersections: BTreeSet<IntersectionID>)

source

pub fn num_recorded_trips(&self) -> Option<usize>

source

pub fn save_recorded_traffic(&mut self, map: &Map)

source§

impl Sim

source

pub fn set_highlighted_people(&mut self, people: BTreeSet<PersonID>)

Trait Implementations§

source§

impl Clone for Sim

source§

fn clone(&self) -> Sim

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for Sim

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where diff --git a/rustdoc/sim/struct.Analytics.html b/rustdoc/sim/struct.Analytics.html index eb78877fa0..a50001bb9b 100644 --- a/rustdoc/sim/struct.Analytics.html +++ b/rustdoc/sim/struct.Analytics.html @@ -7,7 +7,7 @@ pub passengers_boarding: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID, Duration)>>, pub passengers_alighting: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID)>>, pub started_trips: BTreeMap<TripID, Time>, - pub finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>, + pub finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>, pub problems_per_trip: BTreeMap<TripID, Vec<(Time, Problem)>>, pub trip_log: Vec<(Time, TripID, Option<PathRequest>, TripPhaseType)>, pub intersection_delays: BTreeMap<IntersectionID, Vec<(u8, Time, Duration, AgentType)>>, @@ -25,7 +25,7 @@ running the simulation, and compare the live Analytics to the prebaked baseline

Fields§

§road_thruput: TimeSeriesCount<RoadID>§intersection_thruput: TimeSeriesCount<IntersectionID>§traffic_signal_thruput: TimeSeriesCount<CompressedMovementID>§demand: BTreeMap<MovementID, usize>

Most fields in Analytics are cumulative over time, but this is just for the current moment in time.

§bus_arrivals: Vec<(Time, CarID, TransitRouteID, TransitStopID)>§passengers_boarding: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID, Duration)>>

For each passenger boarding, how long did they wait at the stop?

-
§passengers_alighting: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID)>>§started_trips: BTreeMap<TripID, Time>§finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>

Finish time, ID, mode, trip duration if successful (or None if cancelled)

+
§passengers_alighting: BTreeMap<TransitStopID, Vec<(Time, TransitRouteID)>>§started_trips: BTreeMap<TripID, Time>§finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>

Finish time, ID, mode, trip duration if successful (or None if cancelled)

§problems_per_trip: BTreeMap<TripID, Vec<(Time, Problem)>>

Record different problems that each trip encounters.

§trip_log: Vec<(Time, TripID, Option<PathRequest>, TripPhaseType)>§intersection_delays: BTreeMap<IntersectionID, Vec<(u8, Time, Duration, AgentType)>>

Only for traffic signals. The u8 is the movement index from a CompressedMovementID.

§parking_lane_changes: BTreeMap<LaneID, Vec<(Time, bool)>>

Per parking lane or lot, when does a spot become filled (true) or free (false)

@@ -35,7 +35,7 @@ in time.

&self, now: Time, before: &Analytics -) -> Vec<(TripID, Duration, Duration, TripMode)>

Returns pairs of trip times for finished trips in both worlds. (ID, before, after, mode)

+) -> Vec<(TripID, Duration, Duration, TripMode)>

Returns pairs of trip times for finished trips in both worlds. (ID, before, after, mode)

source

pub fn get_trip_phases(&self, trip: TripID, map: &Map) -> Vec<TripPhase>

If calling on prebaked Analytics, be careful to pass in an unedited map, to match how the simulation was originally run. Otherwise the paths may be nonsense.

source

pub fn get_all_trip_phases(&self) -> BTreeMap<TripID, Vec<TripPhase>>

source

pub fn active_agents(&self, now: Time) -> Vec<(Time, usize)>

source

pub fn parking_lane_availability( diff --git a/rustdoc/sim/struct.BorderSpawnOverTime.html b/rustdoc/sim/struct.BorderSpawnOverTime.html index e55d35264c..1798629166 100644 --- a/rustdoc/sim/struct.BorderSpawnOverTime.html +++ b/rustdoc/sim/struct.BorderSpawnOverTime.html @@ -1,4 +1,4 @@ -BorderSpawnOverTime in sim - Rust

Struct sim::BorderSpawnOverTime

pub struct BorderSpawnOverTime {
+BorderSpawnOverTime in sim - Rust

Struct sim::BorderSpawnOverTime

source ·
pub struct BorderSpawnOverTime {
     pub num_peds: usize,
     pub num_cars: usize,
     pub num_bikes: usize,
@@ -6,11 +6,11 @@
     pub start_time: Time,
     pub stop_time: Time,
     pub start_from_border: IntersectionID,
-    pub goal: Option<TripEndpoint>,
-}

Fields§

§num_peds: usize§num_cars: usize§num_bikes: usize§percent_use_transit: f64§start_time: Time§stop_time: Time§start_from_border: IntersectionID§goal: Option<TripEndpoint>

Trait Implementations§

§

impl Clone for BorderSpawnOverTime

§

fn clone(&self) -> BorderSpawnOverTime

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for BorderSpawnOverTime

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for BorderSpawnOverTime

§

fn deserialize<__D>( + pub goal: Option<TripEndpoint>, +}

Fields§

§num_peds: usize§num_cars: usize§num_bikes: usize§percent_use_transit: f64§start_time: Time§stop_time: Time§start_from_border: IntersectionID§goal: Option<TripEndpoint>

Trait Implementations§

source§

impl Clone for BorderSpawnOverTime

source§

fn clone(&self) -> BorderSpawnOverTime

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BorderSpawnOverTime

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BorderSpawnOverTime

source§

fn deserialize<__D>( __deserializer: __D ) -> Result<BorderSpawnOverTime, <__D as Deserializer<'de>>::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
§

impl Serialize for BorderSpawnOverTime

§

fn serialize<__S>( + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for BorderSpawnOverTime

source§

fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where diff --git a/rustdoc/sim/struct.CarID.html b/rustdoc/sim/struct.CarID.html index 7a57cc0fd4..cc93cff4a4 100644 --- a/rustdoc/sim/struct.CarID.html +++ b/rustdoc/sim/struct.CarID.html @@ -6,7 +6,7 @@

Trait Implementations§

source§

impl Clone for CarID

source§

fn clone(&self) -> CarID

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CarID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CarID

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CarID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CarID

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl IndexableKey for CarID

source§

fn index(&self) -> usize

source§

impl Ord for CarID

source§

fn cmp(&self, other: &CarID) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl IndexableKey for CarID

source§

fn index(&self) -> usize

source§

impl Ord for CarID

source§

fn cmp(&self, other: &CarID) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for CarID

source§

fn eq(&self, other: &CarID) -> bool

This method tests for self and other values to be equal, and is used diff --git a/rustdoc/sim/struct.PedestrianID.html b/rustdoc/sim/struct.PedestrianID.html index 3f21a1aa36..ae2b66c7eb 100644 --- a/rustdoc/sim/struct.PedestrianID.html +++ b/rustdoc/sim/struct.PedestrianID.html @@ -1,7 +1,7 @@ PedestrianID in sim - Rust

Struct sim::PedestrianID

source ·
pub struct PedestrianID(pub usize);

Tuple Fields§

§0: usize

Trait Implementations§

source§

impl Clone for PedestrianID

source§

fn clone(&self) -> PedestrianID

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PedestrianID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for PedestrianID

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for PedestrianID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for PedestrianID

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl IndexableKey for PedestrianID

source§

fn index(&self) -> usize

source§

impl Ord for PedestrianID

source§

fn cmp(&self, other: &PedestrianID) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl IndexableKey for PedestrianID

source§

fn index(&self) -> usize

source§

impl Ord for PedestrianID

source§

fn cmp(&self, other: &PedestrianID) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for PedestrianID

source§

fn eq(&self, other: &PedestrianID) -> bool

This method tests for self and other values to be equal, and is used diff --git a/rustdoc/sim/struct.Person.html b/rustdoc/sim/struct.Person.html index 8aaef38788..4d73f44f19 100644 --- a/rustdoc/sim/struct.Person.html +++ b/rustdoc/sim/struct.Person.html @@ -1,6 +1,6 @@ Person in sim - Rust

Struct sim::Person

source ·
pub struct Person {
     pub id: PersonID,
-    pub orig_id: Option<OrigPersonID>,
+    pub orig_id: Option<OrigPersonID>,
     pub trips: Vec<TripID>,
     pub state: PersonState,
     pub ped: PedestrianID,
@@ -8,7 +8,7 @@
     pub vehicles: Vec<Vehicle>,
     delayed_trips: Vec<(TripID, StartTripArgs)>,
     on_bus: Option<CarID>,
-}

Fields§

§id: PersonID§orig_id: Option<OrigPersonID>§trips: Vec<TripID>§state: PersonState§ped: PedestrianID§ped_speed: Speed§vehicles: Vec<Vehicle>

Both cars and bikes

+}

Fields§

§id: PersonID§orig_id: Option<OrigPersonID>§trips: Vec<TripID>§state: PersonState§ped: PedestrianID§ped_speed: Speed§vehicles: Vec<Vehicle>

Both cars and bikes

§delayed_trips: Vec<(TripID, StartTripArgs)>§on_bus: Option<CarID>

Implementations§

Trait Implementations§

source§

impl Clone for Person

source§

fn clone(&self) -> Person

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Person

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Person

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Person

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Person

§

impl RefUnwindSafe for Person

§

impl Send for Person

§

impl Sync for Person

§

impl Unpin for Person

§

impl UnwindSafe for Person

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/sim/struct.ScenarioGenerator.html b/rustdoc/sim/struct.ScenarioGenerator.html index 9477456375..bffd76b7aa 100644 --- a/rustdoc/sim/struct.ScenarioGenerator.html +++ b/rustdoc/sim/struct.ScenarioGenerator.html @@ -1,22 +1,22 @@ -ScenarioGenerator in sim - Rust

Struct sim::ScenarioGenerator

pub struct ScenarioGenerator {
+ScenarioGenerator in sim - Rust

Struct sim::ScenarioGenerator

source ·
pub struct ScenarioGenerator {
     pub scenario_name: String,
     pub only_seed_buses: Option<BTreeSet<String>>,
     pub spawn_over_time: Vec<SpawnOverTime>,
     pub border_spawn_over_time: Vec<BorderSpawnOverTime>,
-}

Fields§

§scenario_name: String§only_seed_buses: Option<BTreeSet<String>>§spawn_over_time: Vec<SpawnOverTime>§border_spawn_over_time: Vec<BorderSpawnOverTime>

Implementations§

Fields§

§scenario_name: String§only_seed_buses: Option<BTreeSet<String>>§spawn_over_time: Vec<SpawnOverTime>§border_spawn_over_time: Vec<BorderSpawnOverTime>

Implementations§

source§

impl ScenarioGenerator

source

pub fn proletariat_robot( map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> -) -> Scenario

Designed in https://github.com/a-b-street/abstreet/issues/154

-
§

impl ScenarioGenerator

pub fn generate( + timer: &mut Timer<'_> +) -> Scenario

Designed in https://github.com/a-b-street/abstreet/issues/154

+
source§

impl ScenarioGenerator

source

pub fn generate( &self, map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> -) -> Scenario

pub fn small_run(map: &Map) -> ScenarioGenerator

pub fn empty(name: &str) -> ScenarioGenerator

Trait Implementations§

§

impl Clone for ScenarioGenerator

§

fn clone(&self) -> ScenarioGenerator

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for ScenarioGenerator

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for ScenarioGenerator

§

fn deserialize<__D>( + timer: &mut Timer<'_> +) -> Scenario

source

pub fn small_run(map: &Map) -> ScenarioGenerator

source

pub fn empty(name: &str) -> ScenarioGenerator

Trait Implementations§

source§

impl Clone for ScenarioGenerator

source§

fn clone(&self) -> ScenarioGenerator

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ScenarioGenerator

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for ScenarioGenerator

source§

fn deserialize<__D>( __deserializer: __D ) -> Result<ScenarioGenerator, <__D as Deserializer<'de>>::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
§

impl Serialize for ScenarioGenerator

§

fn serialize<__S>( + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for ScenarioGenerator

source§

fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where diff --git a/rustdoc/sim/struct.Sim.html b/rustdoc/sim/struct.Sim.html index 6637345b51..5092527f6d 100644 --- a/rustdoc/sim/struct.Sim.html +++ b/rustdoc/sim/struct.Sim.html @@ -18,7 +18,7 @@ alerts: AlertHandler,

}
Expand description

The Sim ties together all the pieces of the simulation. Its main property is the current time.

Fields§

§driving: DrivingSimState§parking: ParkingSimState§walking: WalkingSimState§intersections: IntersectionSimState§transit: TransitSimState§trips: TripManager§pandemic: Option<PandemicModel>§scheduler: Scheduler§time: Time§map_name: MapName§edits_name: String§run_name: String§step_count: usize§highlighted_people: Option<BTreeSet<PersonID>>§analytics: Analytics§recorder: Option<TrafficRecorder>§alerts: AlertHandler

Implementations§

source§

impl Sim

source

pub fn time(&self) -> Time

source

pub fn is_done(&self) -> bool

source

pub fn is_empty(&self) -> bool

source

pub fn num_trips(&self) -> (usize, usize)

(number of finished trips, number of unfinished trips)

-
source

pub fn num_agents(&self) -> Counter<AgentType>

source

pub fn num_commuters_vehicles(&self) -> CommutersVehiclesCounts

source

pub fn num_ppl(&self) -> (usize, usize, usize)

(total number of people, just in buildings, just off map)

+
source

pub fn num_agents(&self) -> Counter<AgentType>

source

pub fn num_commuters_vehicles(&self) -> CommutersVehiclesCounts

source

pub fn num_ppl(&self) -> (usize, usize, usize)

(total number of people, just in buildings, just off map)

source

pub fn debug_ped(&self, id: PedestrianID)

source

pub fn debug_car(&self, id: CarID)

source

pub fn debug_car_ui(&self, id: CarID) -> String

Return a short string to debug a car in the UI.

source

pub fn debug_agent_json(&self, id: AgentID) -> String

source

pub fn debug_intersection_json(&self, id: IntersectionID, map: &Map) -> String

source

pub fn debug_lane(&self, id: LaneID)

source

pub fn agent_properties(&self, map: &Map, id: AgentID) -> AgentProperties

Only call for active agents, will panic otherwise

source

pub fn num_transit_passengers(&self, car: CarID) -> usize

source

pub fn bus_route_id(&self, maybe_bus: CarID) -> Option<TransitRouteID>

source

pub fn active_agents(&self) -> Vec<AgentID>

source

pub fn num_active_agents(&self) -> usize

source

pub fn agent_to_trip(&self, id: AgentID) -> Option<TripID>

source

pub fn trip_to_agent(&self, id: TripID) -> TripResult<AgentID>

source

pub fn trip_info(&self, id: TripID) -> TripInfo

source

pub fn all_trip_info(&self) -> Vec<(TripID, TripInfo)>

source

pub fn finished_trip_details( @@ -26,7 +26,7 @@ id: TripID ) -> Option<(Duration, Duration, Distance)>

If trip is finished, returns (total time, total waiting time, total distance)

source

pub fn trip_blocked_time(&self, id: TripID) -> Duration

source

pub fn trip_to_person(&self, id: TripID) -> Option<PersonID>

source

pub fn agent_to_person(&self, id: AgentID) -> Option<PersonID>

source

pub fn person_to_agent(&self, id: PersonID) -> Option<AgentID>

source

pub fn get_owner_of_car(&self, id: CarID) -> Option<PersonID>

source

pub fn lookup_parked_car(&self, id: CarID) -> Option<&ParkedCar>

source

pub fn all_parked_car_positions(&self, map: &Map) -> Vec<(Position, Position)>

For every parked car, (position of parking spot, position of owner)

-
source

pub fn lookup_person(&self, id: PersonID) -> Option<&Person>

source

pub fn get_person(&self, id: PersonID) -> &Person

source

pub fn find_person_by_orig_id(&self, id: OrigPersonID) -> Option<PersonID>

source

pub fn get_all_people(&self) -> &Vec<Person>

source

pub fn lookup_car_id(&self, idx: usize) -> Option<CarID>

source

pub fn get_path(&self, id: AgentID) -> Option<&Path>

source

pub fn get_all_driving_paths(&self) -> Vec<&Path>

source

pub fn trace_route(&self, id: AgentID, map: &Map) -> Option<PolyLine>

source

pub fn get_canonical_pt_per_trip( +

source

pub fn lookup_person(&self, id: PersonID) -> Option<&Person>

source

pub fn get_person(&self, id: PersonID) -> &Person

source

pub fn find_person_by_orig_id(&self, id: OrigPersonID) -> Option<PersonID>

source

pub fn get_all_people(&self) -> &Vec<Person>

source

pub fn lookup_car_id(&self, idx: usize) -> Option<CarID>

source

pub fn get_path(&self, id: AgentID) -> Option<&Path>

source

pub fn get_all_driving_paths(&self) -> Vec<&Path>

source

pub fn trace_route(&self, id: AgentID, map: &Map) -> Option<PolyLine>

source

pub fn get_canonical_pt_per_trip( &self, trip: TripID, map: &Map @@ -62,7 +62,7 @@ waiting. Sorted by earliest waiting (likely the root cause of gridlock).

source

pub fn get_people_waiting_at_stop( &self, at: TransitStopID -) -> &Vec<(PedestrianID, TransitRouteID, Option<TransitStopID>, Time)>

source

pub fn generate_scenario(&self, map: &Map, name: String) -> Scenario

source

pub fn infinite_parking(&self) -> bool

source

pub fn all_waiting_people(&self) -> BTreeMap<PersonID, Duration>

source

pub fn describe_internal_stats(&self) -> Vec<String>

source

pub fn debug_queue_lengths(&self, l: LaneID) -> Option<(Distance, Distance)>

source

pub fn get_trip_time_lower_bound( +) -> &Vec<(PedestrianID, TransitRouteID, Option<TransitStopID>, Time)>

source

pub fn generate_scenario(&self, map: &Map, name: String) -> Scenario

source

pub fn infinite_parking(&self) -> bool

source

pub fn all_waiting_people(&self) -> BTreeMap<PersonID, Duration>

source

pub fn describe_internal_stats(&self) -> Vec<String>

source

pub fn debug_queue_lengths(&self, l: LaneID) -> Option<(Distance, Distance)>

source

pub fn get_trip_time_lower_bound( &self, map: &Map, id: TripID @@ -86,24 +86,24 @@ found. Assumes the TripID exists.

rendering ones don’t.

source

pub fn get_unzoomed_transit_riders(&self, map: &Map) -> Vec<UnzoomedAgent>

source§

impl Sim

source

pub fn instantiate( &mut self, - scenario: &Scenario, + scenario: &Scenario, map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

pub fn instantiate_without_retries( &mut self, - scenario: &Scenario, + scenario: &Scenario, map: &Map, rng: &mut XorShiftRng, retry_if_no_room: bool, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

If retry_if_no_room is false, any vehicles that fail to spawn because of something else in the way will just wind up as cancelled trips.

source§

impl Sim

source

pub fn new(map: &Map, opts: SimOptions) -> Sim

source

pub(crate) fn spawn_trips( &mut self, input: Vec<(PersonID, TripInfo, StartTripArgs)>, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

pub fn get_free_onstreet_spots(&self, l: LaneID) -> Vec<ParkingSpot>

source

pub fn get_free_offstreet_spots(&self, b: BuildingID) -> Vec<ParkingSpot>

source

pub fn get_free_lot_spots(&self, pl: ParkingLotID) -> Vec<ParkingSpot>

source

pub fn get_all_parking_spots(&self) -> (Vec<ParkingSpot>, Vec<ParkingSpot>)

(Filled, available)

source

pub fn bldg_to_parked_cars(&self, b: BuildingID) -> Vec<CarID>

source

pub fn walking_path_to_nearest_parking_spot( &self, @@ -111,7 +111,7 @@ the way will just wind up as cancelled trips.

b: BuildingID ) -> Option<Path>

source

pub(crate) fn new_person( &mut self, - orig_id: Option<OrigPersonID>, + orig_id: Option<OrigPersonID>, ped_speed: Speed, vehicle_specs: Vec<VehicleSpec> ) -> &Person

source

pub(crate) fn seed_parked_car(&mut self, vehicle: Vehicle, spot: ParkingSpot)

source

pub(crate) fn seed_bus_route(&mut self, route: &TransitRoute)

source

fn start_bus(&mut self, route: &TransitRoute, map: &Map)

source

pub fn set_run_name(&mut self, name: String)

source

pub fn get_run_name(&self) -> &String

source§

impl Sim

source

fn minimal_step( @@ -130,7 +130,7 @@ the way will just wind up as cancelled trips.

map: &Map, dt: Duration, maybe_cb: &mut Option<Box<dyn SimCallback>>, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )

source

pub fn tiny_step( &mut self, map: &Map, @@ -141,16 +141,16 @@ the way will just wind up as cancelled trips.

dt: Duration, real_time_limit: Duration, maybe_cb: &mut Option<Box<dyn SimCallback>> -)

source

pub fn dump_before_abort(&self)

source§

impl Sim

source

pub fn save_dir(&self) -> String

source

fn save_path(&self, base_time: Time) -> String

source

pub fn save(&mut self) -> String

source

pub fn find_previous_savestate(&self, base_time: Time) -> Option<String>

source

pub fn find_next_savestate(&self, base_time: Time) -> Option<String>

source

pub fn load_savestate(path: String, timer: &mut Timer<'_>) -> Result<Sim>

source§

impl Sim

source§

impl Sim

source

pub fn save_dir(&self) -> String

source

fn save_path(&self, base_time: Time) -> String

source

pub fn save(&mut self) -> String

source

pub fn find_previous_savestate(&self, base_time: Time) -> Option<String>

source

pub fn find_next_savestate(&self, base_time: Time) -> Option<String>

source

pub fn load_savestate(path: String, timer: &mut Timer<'_>) -> Result<Sim>

source§

impl Sim

source

pub fn handle_live_edited_traffic_signals(&mut self, map: &Map)

source

pub fn handle_live_edits( &mut self, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (usize, usize)

Respond to arbitrary map edits without resetting the simulation. Returns the number of (trips cancelled, parked cars displaced).

source

fn find_trips_affected_by_live_edits( &mut self, map: &Map, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (BTreeSet<(AgentID, TripID)>, usize)

Returns (trips affected, number of parked cars displaced)

source§

impl Sim

source

pub fn delete_car(&mut self, id: CarID, map: &Map)

source

pub fn clear_alerts(&mut self) -> Vec<(Time, AlertLocation, String)>

source§

impl Sim

source

pub fn set_periodic_callback(&mut self, frequency: Duration)

Only one at a time supported.

source

pub fn unset_periodic_callback(&mut self)

source§

impl Sim

source

pub fn record_traffic_for(&mut self, intersections: BTreeSet<IntersectionID>)

source

pub fn num_recorded_trips(&self) -> Option<usize>

source

pub fn save_recorded_traffic(&mut self, map: &Map)

source§

impl Sim

source

pub fn set_highlighted_people(&mut self, people: BTreeSet<PersonID>)

Trait Implementations§

source§

impl Clone for Sim

source§

fn clone(&self) -> Sim

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'de> Deserialize<'de> for Sim

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where diff --git a/rustdoc/sim/struct.SimFlags.html b/rustdoc/sim/struct.SimFlags.html index 68fb6b487b..91f55f9392 100644 --- a/rustdoc/sim/struct.SimFlags.html +++ b/rustdoc/sim/struct.SimFlags.html @@ -1,7 +1,7 @@ SimFlags in sim - Rust

Struct sim::SimFlags

source ·
pub struct SimFlags {
     load_path: Option<String>,
     pub load: String,
-    pub scenario_modifiers: Vec<ScenarioModifier>,
+    pub scenario_modifiers: Vec<ScenarioModifier>,
     pub rng_seed: u64,
     pub opts: SimOptions,
 }
Expand description

SimFlags specifies a simulation to setup. After parsing from structopt, you must call @@ -14,12 +14,12 @@

§load: String

The same as load_path, but with a default value filled out. Call initialize to set this up.

-
§scenario_modifiers: Vec<ScenarioModifier>

A JSON list of modifiers to transform the scenario. These can be generated with the GUI.

+
§scenario_modifiers: Vec<ScenarioModifier>

A JSON list of modifiers to transform the scenario. These can be generated with the GUI.

§rng_seed: u64

An arbitrary number to seed the random number generator. This is input to the deterministic simulation, so different values affect results.

§opts: SimOptions

Implementations§

source§

impl SimFlags

source

pub const RNG_SEED: u64 = 42u64

source

pub fn initialize(&mut self)

source

pub fn for_test(run_name: &str) -> SimFlags

source

pub fn make_rng(&self) -> XorShiftRng

source

pub fn load_synchronously( &self, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> (Map, Sim, XorShiftRng)

Loads a map and simulation. Not appropriate for use in the UI or on web.

Trait Implementations§

source§

impl Clone for SimFlags

source§

fn clone(&self) -> SimFlags

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl StructOpt for SimFlags

source§

fn clap<'a, 'b>() -> App<'a, 'b>

Returns clap::App corresponding to the struct.
source§

fn from_clap(matches: &ArgMatches<'_>) -> Self

Builds the struct from clap::ArgMatches. It’s guaranteed to succeed if matches originates from an App generated by [StructOpt::clap] called on diff --git a/rustdoc/sim/struct.SpawnOverTime.html b/rustdoc/sim/struct.SpawnOverTime.html index 2bf89101bd..2bdb7d7ebf 100644 --- a/rustdoc/sim/struct.SpawnOverTime.html +++ b/rustdoc/sim/struct.SpawnOverTime.html @@ -1,15 +1,15 @@ -SpawnOverTime in sim - Rust

Struct sim::SpawnOverTime

pub struct SpawnOverTime {
+SpawnOverTime in sim - Rust

Struct sim::SpawnOverTime

source ·
pub struct SpawnOverTime {
     pub num_agents: usize,
     pub start_time: Time,
     pub stop_time: Time,
-    pub goal: Option<TripEndpoint>,
+    pub goal: Option<TripEndpoint>,
     pub percent_driving: f64,
     pub percent_biking: f64,
     pub percent_use_transit: f64,
-}

Fields§

§num_agents: usize§start_time: Time§stop_time: Time§goal: Option<TripEndpoint>§percent_driving: f64§percent_biking: f64§percent_use_transit: f64

Trait Implementations§

§

impl Clone for SpawnOverTime

§

fn clone(&self) -> SpawnOverTime

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for SpawnOverTime

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for SpawnOverTime

§

fn deserialize<__D>( +}

Fields§

§num_agents: usize§start_time: Time§stop_time: Time§goal: Option<TripEndpoint>§percent_driving: f64§percent_biking: f64§percent_use_transit: f64

Trait Implementations§

source§

impl Clone for SpawnOverTime

source§

fn clone(&self) -> SpawnOverTime

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SpawnOverTime

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for SpawnOverTime

source§

fn deserialize<__D>( __deserializer: __D ) -> Result<SpawnOverTime, <__D as Deserializer<'de>>::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
§

impl Serialize for SpawnOverTime

§

fn serialize<__S>( + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for SpawnOverTime

source§

fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where diff --git a/rustdoc/sim/struct.TripID.html b/rustdoc/sim/struct.TripID.html index 48770b1257..ddde2ac7d7 100644 --- a/rustdoc/sim/struct.TripID.html +++ b/rustdoc/sim/struct.TripID.html @@ -9,11 +9,11 @@ by ==.

source§

impl PartialOrd for TripID

source§

fn partial_cmp(&self, other: &TripID) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Serialize for TripID

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl CloneableAny for TripID

source§

impl Copy for TripID

source§

impl Eq for TripID

source§

impl StructuralPartialEq for TripID

Auto Trait Implementations§

§

impl Freeze for TripID

§

impl RefUnwindSafe for TripID

§

impl Send for TripID

§

impl Sync for TripID

§

impl Unpin for TripID

§

impl UnwindSafe for TripID

Blanket Implementations§

source§

impl<T> Any for T
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl CloneableAny for TripID

source§

impl Copy for TripID

source§

impl Eq for TripID

source§

impl StructuralPartialEq for TripID

Auto Trait Implementations§

§

impl Freeze for TripID

§

impl RefUnwindSafe for TripID

§

impl Send for TripID

§

impl Sync for TripID

§

impl Unpin for TripID

§

impl UnwindSafe for TripID

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneableImpl for T
where - T: 'static + CloneableAny + Clone,

§

fn clone_box(&self) -> Box<dyn CloneableAny>

§

fn as_any(&self) -> &(dyn Any + 'static)

§

impl<Q, K> Comparable<K> for Q
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneableImpl for T
where + T: 'static + CloneableAny + Clone,

source§

fn clone_box(&self) -> Box<dyn CloneableAny>

source§

fn as_any(&self) -> &(dyn Any + 'static)

§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can diff --git a/rustdoc/sim/struct.TripInfo.html b/rustdoc/sim/struct.TripInfo.html index d083e66a57..70d50e1609 100644 --- a/rustdoc/sim/struct.TripInfo.html +++ b/rustdoc/sim/struct.TripInfo.html @@ -1,13 +1,13 @@ TripInfo in sim - Rust

Struct sim::TripInfo

source ·
pub struct TripInfo {
     pub departure: Time,
-    pub mode: TripMode,
-    pub start: TripEndpoint,
-    pub end: TripEndpoint,
-    pub purpose: TripPurpose,
+    pub mode: TripMode,
+    pub start: TripEndpoint,
+    pub end: TripEndpoint,
+    pub purpose: TripPurpose,
     pub modified: bool,
     pub cancellation_reason: Option<String>,
 }

Fields§

§departure: Time

Scheduled departure; the start may be delayed if the previous trip is taking too long.

-
§mode: TripMode§start: TripEndpoint§end: TripEndpoint§purpose: TripPurpose§modified: bool

Did a ScenarioModifier apply to this?

+
§mode: TripMode§start: TripEndpoint§end: TripEndpoint§purpose: TripPurpose§modified: bool

Did a ScenarioModifier apply to this?

§cancellation_reason: Option<String>

Trait Implementations§

source§

impl Clone for TripInfo

source§

fn clone(&self) -> TripInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TripInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for TripInfo

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for TripInfo

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/sim/trips/struct.Person.html b/rustdoc/sim/trips/struct.Person.html index e4038b1246..e8d11df7b9 100644 --- a/rustdoc/sim/trips/struct.Person.html +++ b/rustdoc/sim/trips/struct.Person.html @@ -1,6 +1,6 @@ Person in sim::trips - Rust

Struct sim::trips::Person

source ·
pub struct Person {
     pub id: PersonID,
-    pub orig_id: Option<OrigPersonID>,
+    pub orig_id: Option<OrigPersonID>,
     pub trips: Vec<TripID>,
     pub state: PersonState,
     pub ped: PedestrianID,
@@ -8,7 +8,7 @@
     pub vehicles: Vec<Vehicle>,
     delayed_trips: Vec<(TripID, StartTripArgs)>,
     on_bus: Option<CarID>,
-}

Fields§

§id: PersonID§orig_id: Option<OrigPersonID>§trips: Vec<TripID>§state: PersonState§ped: PedestrianID§ped_speed: Speed§vehicles: Vec<Vehicle>

Both cars and bikes

+}

Fields§

§id: PersonID§orig_id: Option<OrigPersonID>§trips: Vec<TripID>§state: PersonState§ped: PedestrianID§ped_speed: Speed§vehicles: Vec<Vehicle>

Both cars and bikes

§delayed_trips: Vec<(TripID, StartTripArgs)>§on_bus: Option<CarID>

Implementations§

Trait Implementations§

source§

impl Clone for Person

source§

fn clone(&self) -> Person

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Person

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Person

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Person

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Person

§

impl RefUnwindSafe for Person

§

impl Send for Person

§

impl Sync for Person

§

impl Unpin for Person

§

impl UnwindSafe for Person

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/sim/trips/struct.TripInfo.html b/rustdoc/sim/trips/struct.TripInfo.html index 02e1208589..19571af479 100644 --- a/rustdoc/sim/trips/struct.TripInfo.html +++ b/rustdoc/sim/trips/struct.TripInfo.html @@ -1,13 +1,13 @@ TripInfo in sim::trips - Rust

Struct sim::trips::TripInfo

source ·
pub struct TripInfo {
     pub departure: Time,
-    pub mode: TripMode,
-    pub start: TripEndpoint,
-    pub end: TripEndpoint,
-    pub purpose: TripPurpose,
+    pub mode: TripMode,
+    pub start: TripEndpoint,
+    pub end: TripEndpoint,
+    pub purpose: TripPurpose,
     pub modified: bool,
     pub cancellation_reason: Option<String>,
 }

Fields§

§departure: Time

Scheduled departure; the start may be delayed if the previous trip is taking too long.

-
§mode: TripMode§start: TripEndpoint§end: TripEndpoint§purpose: TripPurpose§modified: bool

Did a ScenarioModifier apply to this?

+
§mode: TripMode§start: TripEndpoint§end: TripEndpoint§purpose: TripPurpose§modified: bool

Did a ScenarioModifier apply to this?

§cancellation_reason: Option<String>

Trait Implementations§

source§

impl Clone for TripInfo

source§

fn clone(&self) -> TripInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TripInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for TripInfo

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for TripInfo

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/sim/trips/struct.TripManager.html b/rustdoc/sim/trips/struct.TripManager.html index ed2252e16f..de8cec87df 100644 --- a/rustdoc/sim/trips/struct.TripManager.html +++ b/rustdoc/sim/trips/struct.TripManager.html @@ -11,7 +11,7 @@ driving somewhere, parking, and then walking to their final destination. https://a-b-street.github.io/tech/docs/trafficsim/trips.html describes some of the variations.

Fields§

§trips: Vec<Trip>§people: Vec<Person>§active_trip_mode: BTreeMap<AgentID, TripID>§unfinished_trips: usize§car_id_counter: usize§events: Vec<Event>

Implementations§

source§

impl TripManager

source

pub fn new() -> TripManager

source

pub fn new_person( &mut self, - orig_id: Option<OrigPersonID>, + orig_id: Option<OrigPersonID>, ped_speed: Speed, vehicle_specs: Vec<VehicleSpec> ) -> &Person

source

pub fn new_car_id(&mut self) -> usize

source

pub fn new_trip(&mut self, person: PersonID, info: TripInfo) -> TripID

source

pub fn start_trip( @@ -123,7 +123,7 @@ https://a-b-street.github.io/tech/docs/trafficsim/trips.html describes some of t )

Cancel a trip after it’s started. The person will be magically warped to their destination, along with their car, as if the trip had completed normally.

source

pub fn trip_abruptly_cancelled(&mut self, trip: TripID, agent: AgentID)

source§

impl TripManager

source

pub fn active_agents(&self) -> Vec<AgentID>

source

pub fn active_agents_and_trips(&self) -> &BTreeMap<AgentID, TripID>

source

pub fn num_active_agents(&self) -> usize

source

pub fn trip_to_agent(&self, id: TripID) -> TripResult<AgentID>

source

pub fn agent_to_trip(&self, id: AgentID) -> Option<TripID>

This will be None for parked cars and buses. Should always work for pedestrians.

-
source

pub fn debug_trip(&self, id: AgentID)

source

pub fn num_trips(&self) -> (usize, usize)

source

pub fn num_agents(&self, transit: &TransitSimState) -> Counter<AgentType>

source

pub fn num_commuters_vehicles( +

source

pub fn debug_trip(&self, id: AgentID)

source

pub fn num_trips(&self) -> (usize, usize)

source

pub fn num_agents(&self, transit: &TransitSimState) -> Counter<AgentType>

source

pub fn num_commuters_vehicles( &self, transit: &TransitSimState, walking: &WalkingSimState @@ -133,7 +133,7 @@ along with their car, as if the trip had completed normally.

) -> Option<(Duration, Duration, Distance)>

source

pub fn trip_blocked_time(&self, id: TripID) -> Duration

source

pub fn bldg_to_people(&self, b: BuildingID) -> Vec<PersonID>

source

pub fn get_person(&self, p: PersonID) -> Option<&Person>

source

pub fn get_all_people(&self) -> &Vec<Person>

source

pub fn trip_to_person(&self, id: TripID) -> Option<PersonID>

source

pub fn all_arrivals_at_border( &self, at: IntersectionID -) -> Vec<(Time, AgentType)>

source

pub fn generate_scenario(&self, map: &Map, name: String) -> Scenario

Recreate the Scenario from an instantiated simulation. The results should match the +) -> Vec<(Time, AgentType)>

source

pub fn generate_scenario(&self, map: &Map, name: String) -> Scenario

Recreate the Scenario from an instantiated simulation. The results should match the original Scenario used.

Trait Implementations§

source§

impl Clone for TripManager

source§

fn clone(&self) -> TripManager

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TripManager

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for TripManager

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for TripManager

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where diff --git a/rustdoc/src/importer/map_config.rs.html b/rustdoc/src/importer/map_config.rs.html index 3f5d8a56ab..ac191df590 100644 --- a/rustdoc/src/importer/map_config.rs.html +++ b/rustdoc/src/importer/map_config.rs.html @@ -87,6 +87,8 @@ 87 88 89 +90 +91
use abstio::{CityName, MapName};
 use geom::Distance;
 use map_model::DrivingSide;
@@ -171,6 +173,8 @@
             Some("data/input/shared/elevation/king_county_2016_lidar.tif".to_string())
         } else if name.city.country == "gb" {
             Some("data/input/shared/elevation/UK-dem-50m-4326.tif".to_string())
+        } else if name.city.country == "pt" {
+            Some("data/input/shared/elevation/LisboaIST_10m_4326.tif".to_string())
         } else {
             None
         },
diff --git a/rustdoc/src/map_gui/home/runner/work/abstreet/abstreet/target/debug/build/map_gui-d282f5dc6d534c9d/out/built.rs.html b/rustdoc/src/map_gui/home/runner/work/abstreet/abstreet/target/debug/build/map_gui-d282f5dc6d534c9d/out/built.rs.html
index fce4d3ad4b..72de7d2582 100644
--- a/rustdoc/src/map_gui/home/runner/work/abstreet/abstreet/target/debug/build/map_gui-d282f5dc6d534c9d/out/built.rs.html
+++ b/rustdoc/src/map_gui/home/runner/work/abstreet/abstreet/target/debug/build/map_gui-d282f5dc6d534c9d/out/built.rs.html
@@ -204,7 +204,7 @@
 pub const CFG_POINTER_WIDTH: &str = r"64";
 #[doc=r#"The build time in RFC2822, UTC."#]
 #[allow(dead_code)]
-pub const BUILT_TIME_UTC: &str = r"Tue, 9 Jul 2024 20:04:52 +0000";
+pub const BUILT_TIME_UTC: &str = r"Tue, 9 Jul 2024 20:15:38 +0000";
 //
 // EVERYTHING ABOVE THIS POINT WAS AUTO-GENERATED DURING COMPILATION. DO NOT MODIFY.
 //
diff --git a/rustdoc/synthpop/counts/struct.TrafficCounts.html b/rustdoc/synthpop/counts/struct.TrafficCounts.html
index cc269d9587..945ec02b26 100644
--- a/rustdoc/synthpop/counts/struct.TrafficCounts.html
+++ b/rustdoc/synthpop/counts/struct.TrafficCounts.html
@@ -1,18 +1,18 @@
 TrafficCounts in synthpop::counts - Rust

Struct synthpop::counts::TrafficCounts

source ·
pub struct TrafficCounts {
     pub map: MapName,
     pub description: String,
-    pub per_road: Counter<RoadID>,
-    pub per_intersection: Counter<IntersectionID>,
+    pub per_road: Counter<RoadID>,
+    pub per_intersection: Counter<IntersectionID>,
 }
Expand description

This represents the number of vehicles (or trips, or something else) crossing roads and intersections over some span of time. The data could represent real observations or something from a simulation.

There’s some nice UIs in other crates to compare counts.

-

Fields§

§map: MapName§description: String§per_road: Counter<RoadID>§per_intersection: Counter<IntersectionID>

Implementations§

source§

impl TrafficCounts

Fields§

§map: MapName§description: String§per_road: Counter<RoadID>§per_intersection: Counter<IntersectionID>

Implementations§

source§

impl TrafficCounts

source

pub fn from_path_requests( map: &Map, description: String, requests: &[(PathRequest, usize)], pathfinder: &Pathfinder, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Run pathfinding on all of the requests, then count the throughput on every road and intersection. Each request has the count it should contribute – use PathRequest::deduplicate to easily generate this.

diff --git a/rustdoc/synthpop/make/generator/struct.ScenarioGenerator.html b/rustdoc/synthpop/make/generator/struct.ScenarioGenerator.html index 5273a4f558..260393a781 100644 --- a/rustdoc/synthpop/make/generator/struct.ScenarioGenerator.html +++ b/rustdoc/synthpop/make/generator/struct.ScenarioGenerator.html @@ -6,13 +6,13 @@ }

Fields§

§scenario_name: String§only_seed_buses: Option<BTreeSet<String>>§spawn_over_time: Vec<SpawnOverTime>§border_spawn_over_time: Vec<BorderSpawnOverTime>

Implementations§

source§

impl ScenarioGenerator

source

pub fn proletariat_robot( map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Scenario

Designed in https://github.com/a-b-street/abstreet/issues/154

source§

impl ScenarioGenerator

source

pub fn generate( &self, map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Scenario

source

pub fn small_run(map: &Map) -> ScenarioGenerator

source

pub fn empty(name: &str) -> ScenarioGenerator

Trait Implementations§

source§

impl Clone for ScenarioGenerator

source§

fn clone(&self) -> ScenarioGenerator

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ScenarioGenerator

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for ScenarioGenerator

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for ScenarioGenerator

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/synthpop/make/struct.ScenarioGenerator.html b/rustdoc/synthpop/make/struct.ScenarioGenerator.html index 50a11382ef..16b5c05ec3 100644 --- a/rustdoc/synthpop/make/struct.ScenarioGenerator.html +++ b/rustdoc/synthpop/make/struct.ScenarioGenerator.html @@ -6,13 +6,13 @@ }

Fields§

§scenario_name: String§only_seed_buses: Option<BTreeSet<String>>§spawn_over_time: Vec<SpawnOverTime>§border_spawn_over_time: Vec<BorderSpawnOverTime>

Implementations§

source§

impl ScenarioGenerator

source

pub fn proletariat_robot( map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Scenario

Designed in https://github.com/a-b-street/abstreet/issues/154

source§

impl ScenarioGenerator

source

pub fn generate( &self, map: &Map, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Scenario

source

pub fn small_run(map: &Map) -> ScenarioGenerator

source

pub fn empty(name: &str) -> ScenarioGenerator

Trait Implementations§

source§

impl Clone for ScenarioGenerator

source§

fn clone(&self) -> ScenarioGenerator

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ScenarioGenerator

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for ScenarioGenerator

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for ScenarioGenerator

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where diff --git a/rustdoc/synthpop/struct.TrafficCounts.html b/rustdoc/synthpop/struct.TrafficCounts.html index c7edbd7b06..45b8d1fc27 100644 --- a/rustdoc/synthpop/struct.TrafficCounts.html +++ b/rustdoc/synthpop/struct.TrafficCounts.html @@ -1,18 +1,18 @@ TrafficCounts in synthpop - Rust

Struct synthpop::TrafficCounts

source ·
pub struct TrafficCounts {
     pub map: MapName,
     pub description: String,
-    pub per_road: Counter<RoadID>,
-    pub per_intersection: Counter<IntersectionID>,
+    pub per_road: Counter<RoadID>,
+    pub per_intersection: Counter<IntersectionID>,
 }
Expand description

This represents the number of vehicles (or trips, or something else) crossing roads and intersections over some span of time. The data could represent real observations or something from a simulation.

There’s some nice UIs in other crates to compare counts.

-

Fields§

§map: MapName§description: String§per_road: Counter<RoadID>§per_intersection: Counter<IntersectionID>

Implementations§

source§

impl TrafficCounts

Fields§

§map: MapName§description: String§per_road: Counter<RoadID>§per_intersection: Counter<IntersectionID>

Implementations§

source§

impl TrafficCounts

source

pub fn from_path_requests( map: &Map, description: String, requests: &[(PathRequest, usize)], pathfinder: &Pathfinder, - timer: &mut Timer<'_> + timer: &mut Timer<'_> ) -> Self

Run pathfinding on all of the requests, then count the throughput on every road and intersection. Each request has the count it should contribute – use PathRequest::deduplicate to easily generate this.

diff --git a/rustdoc/traffic_seitan/fn.run.html b/rustdoc/traffic_seitan/fn.run.html index f91e086597..0871e9ed43 100644 --- a/rustdoc/traffic_seitan/fn.run.html +++ b/rustdoc/traffic_seitan/fn.run.html @@ -2,5 +2,5 @@ map: &mut Map, sim: &mut Sim, rng: &mut XorShiftRng, - timer: &mut Timer<'_> + timer: &mut Timer<'_> )
\ No newline at end of file diff --git a/rustdoc/trait.impl/abstutil/clone/trait.CloneableAny.js b/rustdoc/trait.impl/abstutil/clone/trait.CloneableAny.js index 5ea6ae68da..1498a7c8cc 100644 --- a/rustdoc/trait.impl/abstutil/clone/trait.CloneableAny.js +++ b/rustdoc/trait.impl/abstutil/clone/trait.CloneableAny.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"abstio":[["impl CloneableAny for MapName"]], +"abstio":[["impl CloneableAny for MapName"]], "abstutil":[], -"sim":[["impl CloneableAny for TripID"]] +"sim":[["impl CloneableAny for TripID"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/trait.impl/abstutil/collections/trait.IndexableKey.js b/rustdoc/trait.impl/abstutil/collections/trait.IndexableKey.js index 6e22090e07..fb10e6cfcc 100644 --- a/rustdoc/trait.impl/abstutil/collections/trait.IndexableKey.js +++ b/rustdoc/trait.impl/abstutil/collections/trait.IndexableKey.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sim":[["impl IndexableKey for CarID"],["impl IndexableKey for PedestrianID"]] +"sim":[["impl IndexableKey for CarID"],["impl IndexableKey for PedestrianID"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/trait.impl/core/convert/trait.From.js b/rustdoc/trait.impl/core/convert/trait.From.js index 535225099a..3082291a20 100644 --- a/rustdoc/trait.impl/core/convert/trait.From.js +++ b/rustdoc/trait.impl/core/convert/trait.From.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"game":[["impl From<ID> for ID"]], +"game":[["impl From<ID> for ID"]], "sim":[["impl From<&Problem> for ProblemType"],["impl From<f64> for AnyTime"],["impl From<InfiniteParkingSimState> for ParkingSimState"],["impl From<NormalParkingSimState> for ParkingSimState"],["impl From<AnyTime> for Time"],["impl From<Time> for AnyTime"]], "widgetry":[["impl From<(f64, f64)> for ScreenDims"],["impl From<Key> for Option<MultiKey>"],["impl From<Key> for MultiKey"],["impl From<f64> for CornerRounding"],["impl From<f64> for ScreenDims"],["impl From<f64> for EdgeInsets"],["impl From<i64> for ScreenDims"],["impl From<usize> for EdgeInsets"],["impl From<Color> for Fill"],["impl From<Color> for RewriteColor"],["impl From<Texture> for Fill"],["impl From<GeomBatch> for ToggleZoomedBuilder"],["impl From<ScreenDims> for LogicalSize<f64>"],["impl From<ScreenDims> for Size<Dimension>"],["impl From<TextSpan> for Text"],["impl From<EdgeInsets> for Rect<Dimension>"],["impl From<Bounds> for ScreenDims"],["impl From<CornerRadii> for CornerRounding"],["impl From<LogicalPosition<f64>> for ScreenPt"],["impl From<LogicalSize<f64>> for ScreenDims"],["impl<AsStrRef: AsRef<str>> From<AsStrRef> for Text"],["impl<AsStrRef: AsRef<str>> From<AsStrRef> for TextSpan"],["impl<F: Into<Fill>, T: Into<Tessellation>> From<Vec<(F, T)>> for GeomBatch"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/trait.impl/map_gui/tools/minimap/trait.MinimapControls.js b/rustdoc/trait.impl/map_gui/tools/minimap/trait.MinimapControls.js index 9bf4da95b8..c28c681fdd 100644 --- a/rustdoc/trait.impl/map_gui/tools/minimap/trait.MinimapControls.js +++ b/rustdoc/trait.impl/map_gui/tools/minimap/trait.MinimapControls.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"game":[["impl MinimapControls<App> for MinimapController"]], +"game":[["impl MinimapControls<App> for MinimapController"]], "osm_viewer":[["impl MinimapControls<SimpleApp<()>> for MinimapController"]], "santa":[["impl MinimapControls<SimpleApp<Session>> for MinimapController"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/trait.impl/map_gui/tools/trip_files/trait.TripManagementState.js b/rustdoc/trait.impl/map_gui/tools/trip_files/trait.TripManagementState.js index 2f6b5d4698..58ebe9ddd7 100644 --- a/rustdoc/trait.impl/map_gui/tools/trip_files/trait.TripManagementState.js +++ b/rustdoc/trait.impl/map_gui/tools/trip_files/trait.TripManagementState.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"game":[["impl TripManagementState<App> for TripPlanner"]], +"game":[["impl TripManagementState<App> for TripPlanner"]], "ltn":[["impl TripManagementState<App> for RoutePlanner"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/trait.impl/map_gui/trait.AppLike.js b/rustdoc/trait.impl/map_gui/trait.AppLike.js index 6c6d4e5a96..d71517f99d 100644 --- a/rustdoc/trait.impl/map_gui/trait.AppLike.js +++ b/rustdoc/trait.impl/map_gui/trait.AppLike.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"game":[["impl AppLike for App"]], +"game":[["impl AppLike for App"]], "ltn":[["impl AppLike for App"]], "map_gui":[] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/trait.impl/sim/sim/trait.SimCallback.js b/rustdoc/trait.impl/sim/sim/trait.SimCallback.js index 1f98a7fdee..8f7c513705 100644 --- a/rustdoc/trait.impl/sim/sim/trait.SimCallback.js +++ b/rustdoc/trait.impl/sim/sim/trait.SimCallback.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"game":[["impl SimCallback for FindDelayedIntersections"]] +"game":[["impl SimCallback for FindDelayedIntersections"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/type.impl/alloc/vec/struct.Vec.js b/rustdoc/type.impl/alloc/vec/struct.Vec.js index 5886f17ee2..1101dfc069 100644 --- a/rustdoc/type.impl/alloc/vec/struct.Vec.js +++ b/rustdoc/type.impl/alloc/vec/struct.Vec.js @@ -1,4 +1,4 @@ (function() {var type_impls = { -"cli":[["
1.5.0 · source§

impl<T, A> AsMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut [T]

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut<[T]>","cli::ModifierList"],["
1.5.0 · source§

impl<T, A> AsMut<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut Vec<T, A>

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &[T]

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef<[T]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &Vec<T, A>

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Borrow<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow(&self) -> &[T]

Immutably borrows from an owned value. Read more
","Borrow<[T]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow_mut(&mut self) -> &mut [T]

Mutably borrows from an owned value. Read more
","BorrowMut<[T]>","cli::ModifierList"],["
§

impl<T> Clear for Vec<T>

§

fn clear(&mut self)

Clear this make, make it equivalent to newly created object.
","Clear","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Clone for Vec<T, A>
where\n T: Clone,\n A: Allocator + Clone,

source§

fn clone_from(&mut self, source: &Vec<T, A>)

Overwrites the contents of self with a clone of the contents of source.

\n

This method is preferred over simply assigning source.clone() to self,\nas it avoids reallocation if possible. Additionally, if the element type\nT overrides clone_from(), this will reuse the resources of self’s\nelements as well.

\n
§Examples
\n
let x = vec![5, 6, 7];\nlet mut y = vec![8, 9, 10];\nlet yp: *const i32 = y.as_ptr();\n\ny.clone_from(&x);\n\n// The value is the same\nassert_eq!(x, y);\n\n// And no reallocation occurred\nassert_eq!(yp, y.as_ptr());
\n
source§

fn clone(&self) -> Vec<T, A>

Returns a copy of the value. Read more
","Clone","cli::ModifierList"],["
§

impl<T> Codec for Vec<T>
where\n T: Codec + TlsListElement + Debug,

Implement Codec for lists of elements that implement TlsListElement.

\n

TlsListElement provides the size of the length prefix for the list.

\n
§

fn encode(&self, bytes: &mut Vec<u8>)

Function for encoding itself by appending itself to\nthe provided vec of bytes.
§

fn read(r: &mut Reader<'_>) -> Result<Vec<T>, InvalidMessage>

Function for decoding itself from the provided reader\nwill return Some if the decoding was successful or\nNone if it was not.
§

fn get_encoding(&self) -> Vec<u8>

Convenience function for encoding the implementation\ninto a vec and returning it
§

fn read_bytes(bytes: &[u8]) -> Result<Self, InvalidMessage>

Function for wrapping a call to the read function in\na Reader for the slice of bytes provided
","Codec","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Debug for Vec<T, A>
where\n T: Debug,\n A: Allocator,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","cli::ModifierList"],["
1.0.0 · source§

impl<T> Default for Vec<T>

source§

fn default() -> Vec<T>

Creates an empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
","Default","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Deref for Vec<T, A>
where\n A: Allocator,

§

type Target = [T]

The resulting type after dereferencing.
source§

fn deref(&self) -> &[T]

Dereferences the value.
","Deref","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> DerefMut for Vec<T, A>
where\n A: Allocator,

source§

fn deref_mut(&mut self) -> &mut [T]

Mutably dereferences the value.
","DerefMut","cli::ModifierList"],["
source§

impl<'de, T> Deserialize<'de> for Vec<T>
where\n T: Deserialize<'de>,

source§

fn deserialize<D>(\n deserializer: D\n) -> Result<Vec<T>, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Drop for Vec<T, A>
where\n A: Allocator,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
","Drop","cli::ModifierList"],["
1.2.0 · source§

impl<'a, T, A> Extend<&'a T> for Vec<T, A>
where\n T: Copy + 'a,\n A: Allocator,

Extend implementation that copies elements out of references before pushing them onto the Vec.

\n

This implementation is specialized for slice iterators, where it uses copy_from_slice to\nappend the entire slice at once.

\n
source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, _: &'a T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a T>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Extend<T> for Vec<T, A>
where\n A: Allocator,

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","cli::ModifierList"],["
1.0.0 · source§

impl<T> From<&[T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&[T]>","cli::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&[T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3]), vec![1, 2, 3]);
\n
","From<&[T; N]>","cli::ModifierList"],["
1.19.0 · source§

impl<T> From<&mut [T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&mut [T]>","cli::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&mut [T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3]), vec![1, 2, 3]);
\n
","From<&mut [T; N]>","cli::ModifierList"],["
1.44.0 · source§

impl<T, const N: usize> From<[T; N]> for Vec<T>

source§

fn from(s: [T; N]) -> Vec<T>

Allocate a Vec<T> and move s’s items into it.

\n
§Examples
\n
assert_eq!(Vec::from([1, 2, 3]), vec![1, 2, 3]);
\n
","From<[T; N]>","cli::ModifierList"],["
1.5.0 · source§

impl<T, A> From<BinaryHeap<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(heap: BinaryHeap<T, A>) -> Vec<T, A>

Converts a BinaryHeap<T> into a Vec<T>.

\n

This conversion requires no data movement or allocation, and has\nconstant time complexity.

\n
","From>","cli::ModifierList"],["
1.18.0 · source§

impl<T, A> From<Box<[T], A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(s: Box<[T], A>) -> Vec<T, A>

Convert a boxed slice into a vector by transferring ownership of\nthe existing heap allocation.

\n
§Examples
\n
let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice();\nassert_eq!(Vec::from(b), vec![1, 2, 3]);
\n
","From>","cli::ModifierList"],["
1.14.0 · source§

impl<'a, T> From<Cow<'a, [T]>> for Vec<T>
where\n [T]: ToOwned<Owned = Vec<T>>,

source§

fn from(s: Cow<'a, [T]>) -> Vec<T>

Convert a clone-on-write slice into a vector.

\n

If s already owns a Vec<T>, it will be returned directly.\nIf s is borrowing a slice, a new Vec<T> will be allocated and\nfilled by cloning s’s items into it.

\n
§Examples
\n
let o: Cow<'_, [i32]> = Cow::Owned(vec![1, 2, 3]);\nlet b: Cow<'_, [i32]> = Cow::Borrowed(&[1, 2, 3]);\nassert_eq!(Vec::from(o), Vec::from(b));
\n
","From>","cli::ModifierList"],["
1.10.0 · source§

impl<T, A> From<VecDeque<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(other: VecDeque<T, A>) -> Vec<T, A>

Turn a VecDeque<T> into a Vec<T>.

\n

This never needs to re-allocate, but does need to do O(n) data movement if\nthe circular buffer doesn’t happen to be at the beginning of the allocation.

\n
§Examples
\n
use std::collections::VecDeque;\n\n// This one is *O*(1).\nlet deque: VecDeque<_> = (1..5).collect();\nlet ptr = deque.as_slices().0.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);\n\n// This one needs data rearranging.\nlet mut deque: VecDeque<_> = (1..5).collect();\ndeque.push_front(9);\ndeque.push_front(8);\nlet ptr = deque.as_slices().1.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [8, 9, 1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);
\n
","From>","cli::ModifierList"],["
1.0.0 · source§

impl<T> FromIterator<T> for Vec<T>

Collects an iterator into a Vec, commonly called via Iterator::collect()

\n

§Allocation behavior

\n

In general Vec does not guarantee any particular growth or allocation strategy.\nThat also applies to this trait impl.

\n

Note: This section covers implementation details and is therefore exempt from\nstability guarantees.

\n

Vec may use any or none of the following strategies,\ndepending on the supplied iterator:

\n
    \n
  • preallocate based on Iterator::size_hint()\n
      \n
    • and panic if the number of items is outside the provided lower/upper bounds
    • \n
    \n
  • \n
  • use an amortized growth strategy similar to pushing one item at a time
  • \n
  • perform the iteration in-place on the original allocation backing the iterator
  • \n
\n

The last case warrants some attention. It is an optimization that in many cases reduces peak memory\nconsumption and improves cache locality. But when big, short-lived allocations are created,\nonly a small fraction of their items get collected, no further use is made of the spare capacity\nand the resulting Vec is moved into a longer-lived structure, then this can lead to the large\nallocations having their lifetimes unnecessarily extended which can result in increased memory\nfootprint.

\n

In cases where this is an issue, the excess capacity can be discarded with Vec::shrink_to(),\nVec::shrink_to_fit() or by collecting into Box<[T]> instead, which additionally reduces\nthe size of the long-lived struct.

\n\n
static LONG_LIVED: Mutex<Vec<Vec<u16>>> = Mutex::new(Vec::new());\n\nfor i in 0..10 {\n    let big_temporary: Vec<u16> = (0..1024).collect();\n    // discard most items\n    let mut result: Vec<_> = big_temporary.into_iter().filter(|i| i % 100 == 0).collect();\n    // without this a lot of unused capacity might be moved into the global\n    result.shrink_to_fit();\n    LONG_LIVED.lock().unwrap().push(result);\n}
\n
source§

fn from_iter<I>(iter: I) -> Vec<T>
where\n I: IntoIterator<Item = T>,

Creates a value from an iterator. Read more
","FromIterator","cli::ModifierList"],["
§

impl<T> FromParallelIterator<T> for Vec<T>
where\n T: Send,

Collects items from a parallel iterator into a vector.

\n
§

fn from_par_iter<I>(par_iter: I) -> Vec<T>
where\n I: IntoParallelIterator<Item = T>,

Creates an instance of the collection from the parallel iterator par_iter. Read more
","FromParallelIterator","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Hash for Vec<T, A>
where\n T: Hash,\n A: Allocator,

The hash of a vector is the same as that of the corresponding slice,\nas required by the core::borrow::Borrow implementation.

\n\n
use std::hash::BuildHasher;\n\nlet b = std::hash::RandomState::new();\nlet v: Vec<u8> = vec![0xa8, 0x3c, 0x09];\nlet s: &[u8] = &[0xa8, 0x3c, 0x09];\nassert_eq!(b.hash_one(v), b.hash_one(s));
\n
source§

fn hash<H>(&self, state: &mut H)
where\n H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","cli::ModifierList"],["
1.0.0 · source§

impl<T, I, A> Index<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

§

type Output = <I as SliceIndex<[T]>>::Output

The returned type after indexing.
source§

fn index(&self, index: I) -> &<Vec<T, A> as Index<I>>::Output

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
1.0.0 · source§

impl<T, I, A> IndexMut<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

source§

fn index_mut(&mut self, index: I) -> &mut <Vec<T, A> as Index<I>>::Output

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
source§

impl<'de, T, E> IntoDeserializer<'de, E> for Vec<T>
where\n T: IntoDeserializer<'de, E>,\n E: Error,

§

type Deserializer = SeqDeserializer<<Vec<T> as IntoIterator>::IntoIter, E>

The type of the deserializer being converted into.
source§

fn into_deserializer(self) -> <Vec<T> as IntoDeserializer<'de, E>>::Deserializer

Convert this value into a deserializer.
","IntoDeserializer<'de, E>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> IntoIterator for Vec<T, A>
where\n A: Allocator,

source§

fn into_iter(self) -> <Vec<T, A> as IntoIterator>::IntoIter

Creates a consuming iterator, that is, one that moves each value out of\nthe vector (from start to end). The vector cannot be used after calling\nthis.

\n
§Examples
\n
let v = vec![\"a\".to_string(), \"b\".to_string()];\nlet mut v_iter = v.into_iter();\n\nlet first_element: Option<String> = v_iter.next();\n\nassert_eq!(first_element, Some(\"a\".to_string()));\nassert_eq!(v_iter.next(), Some(\"b\".to_string()));\nassert_eq!(v_iter.next(), None);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T, A>

Which kind of iterator are we turning this into?
","IntoIterator","cli::ModifierList"],["
§

impl<T> IntoParallelIterator for Vec<T>
where\n T: Send,

§

type Item = T

The type of item that the parallel iterator will produce.
§

type Iter = IntoIter<T>

The parallel iterator type that will be created.
§

fn into_par_iter(self) -> <Vec<T> as IntoParallelIterator>::Iter

Converts self into a parallel iterator. Read more
","IntoParallelIterator","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Ord for Vec<T, A>
where\n T: Ord,\n A: Allocator,

Implements ordering of vectors, lexicographically.

\n
source§

fn cmp(&self, other: &Vec<T, A>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","cli::ModifierList"],["
§

impl<'a, T> ParallelExtend<&'a T> for Vec<T>
where\n T: 'a + Copy + Send + Sync,

Extends a vector with copied items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = &'a T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend<&'a T>","cli::ModifierList"],["
§

impl<T> ParallelExtend<T> for Vec<T>
where\n T: Send,

Extends a vector with items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<&[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U; N]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&mut [U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&mut [U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&mut [U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&mut [U]>","cli::ModifierList"],["
1.48.0 · source§

impl<T, U, A> PartialEq<[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U; N]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A1, A2> PartialEq<Vec<U, A2>> for Vec<T, A1>
where\n A1: Allocator,\n A2: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &Vec<U, A2>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &Vec<U, A2>) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A1, A2> PartialOrd<Vec<T, A2>> for Vec<T, A1>
where\n T: PartialOrd,\n A1: Allocator,\n A2: Allocator,

Implements comparison of vectors, lexicographically.

\n
source§

fn partial_cmp(&self, other: &Vec<T, A2>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd>","cli::ModifierList"],["
source§

impl<T> Serialize for Vec<T>
where\n T: Serialize,

source§

fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","cli::ModifierList"],["
§

impl<T> Sink<T> for Vec<T>

§

type Error = Infallible

The type of value produced by the sink when an error occurs.
§

fn poll_ready(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Attempts to prepare the Sink to receive a value. Read more
§

fn start_send(\n self: Pin<&mut Vec<T>>,\n item: T\n) -> Result<(), <Vec<T> as Sink<T>>::Error>

Begin the process of sending a value to the sink.\nEach call to this function must be preceded by a successful call to\npoll_ready which returned Poll::Ready(Ok(())). Read more
§

fn poll_flush(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output from this sink. Read more
§

fn poll_close(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output and close this sink, if necessary. Read more
","Sink","cli::ModifierList"],["
source§

impl<T> Vec<T>

1.0.0 (const: 1.39.0) · source

pub const fn new() -> Vec<T>

Constructs a new, empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::new();
\n
1.0.0 · source

pub fn with_capacity(capacity: usize) -> Vec<T>

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<()>::with_capacity(10);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity(capacity: usize) -> Result<Vec<T>, TryReserveError>

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

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
1.0.0 · source

pub unsafe fn from_raw_parts(\n ptr: *mut T,\n length: usize,\n capacity: usize\n) -> Vec<T>

Creates a Vec<T> directly from a pointer, a length, and a capacity.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must have been allocated using the global allocator, such as via\nthe alloc::alloc function.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to be the capacity that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is normally not safe\nto build a Vec<u8> from a pointer to a C char array with length\nsize_t, doing so is only safe if the array was initially allocated by\na Vec or String.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1. To avoid\nthese issues, it is often preferable to do casting/transmuting using\nslice::from_raw_parts instead.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
use std::ptr;\nuse std::mem;\n\nlet v = vec![1, 2, 3];\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts(p, len, cap);\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
use std::alloc::{alloc, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = alloc(layout).cast::<u32>();\n        if mem.is_null() {\n            return;\n        }\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts(mem, 1, 16)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: Clone,\n A: Allocator,

1.5.0 · source

pub fn resize(&mut self, new_len: usize, value: T)

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with value.\nIf new_len is less than len, the Vec is simply truncated.

\n

This method requires T to implement Clone,\nin order to be able to clone the passed value.\nIf you need more flexibility (or want to rely on Default instead of\nClone), use Vec::resize_with.\nIf you only need to resize to a smaller size, use Vec::truncate.

\n
§Examples
\n
let mut vec = vec![\"hello\"];\nvec.resize(3, \"world\");\nassert_eq!(vec, [\"hello\", \"world\", \"world\"]);\n\nlet mut vec = vec![1, 2, 3, 4];\nvec.resize(2, 0);\nassert_eq!(vec, [1, 2]);
\n
1.6.0 · source

pub fn extend_from_slice(&mut self, other: &[T])

Clones and appends all elements in a slice to the Vec.

\n

Iterates over the slice other, clones each element, and then appends\nit to this Vec. The other slice is traversed in-order.

\n

Note that this function is same as extend except that it is\nspecialized to work with slices instead. If and when Rust gets\nspecialization this function will likely be deprecated (but still\navailable).

\n
§Examples
\n
let mut vec = vec![1];\nvec.extend_from_slice(&[2, 3, 4]);\nassert_eq!(vec, [1, 2, 3, 4]);
\n
1.53.0 · source

pub fn extend_from_within<R>(&mut self, src: R)
where\n R: RangeBounds<usize>,

Copies elements from src range to the end of the vector.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut vec = vec![0, 1, 2, 3, 4];\n\nvec.extend_from_within(2..);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4]);\n\nvec.extend_from_within(..2);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1]);\n\nvec.extend_from_within(4..8);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1, 4, 2, 3, 4]);
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: PartialEq,\n A: Allocator,

1.0.0 · source

pub fn dedup(&mut self)

Removes consecutive repeated elements in the vector according to the\nPartialEq trait implementation.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![1, 2, 2, 3, 2];\n\nvec.dedup();\n\nassert_eq!(vec, [1, 2, 3, 2]);
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

1.21.0 · source

pub fn splice<R, I>(\n &mut self,\n range: R,\n replace_with: I\n) -> Splice<'_, <I as IntoIterator>::IntoIter, A>
where\n R: RangeBounds<usize>,\n I: IntoIterator<Item = T>,

Creates a splicing iterator that replaces the specified range in the vector\nwith the given replace_with iterator and yields the removed items.\nreplace_with does not need to be the same length as range.

\n

range is removed even if the iterator is not consumed until the end.

\n

It is unspecified how many elements are removed from the vector\nif the Splice value is leaked.

\n

The input iterator replace_with is only consumed when the Splice value is dropped.

\n

This is optimal if:

\n
    \n
  • The tail (elements in the vector after range) is empty,
  • \n
  • or replace_with yields fewer or equal elements than range’s length
  • \n
  • or the lower bound of its size_hint() is exact.
  • \n
\n

Otherwise, a temporary vector is allocated and the tail is moved twice.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3, 4];\nlet new = [7, 8, 9];\nlet u: Vec<_> = v.splice(1..3, new).collect();\nassert_eq!(v, &[1, 7, 8, 9, 4]);\nassert_eq!(u, &[2, 3]);
\n
source

pub fn extract_if<F>(&mut self, filter: F) -> ExtractIf<'_, T, F, A>
where\n F: FnMut(&mut T) -> bool,

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

Creates an iterator which uses a closure to determine if an element should be removed.

\n

If the closure returns true, then the element is removed and yielded.\nIf the closure returns false, the element will remain in the vector and will not be yielded\nby the iterator.

\n

If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

\n

Using this method is equivalent to the following code:

\n\n
let mut i = 0;\nwhile i < vec.len() {\n    if some_predicate(&mut vec[i]) {\n        let val = vec.remove(i);\n        // your code here\n    } else {\n        i += 1;\n    }\n}\n
\n

But extract_if is easier to use. extract_if is also more efficient,\nbecause it can backshift the elements of the array in bulk.

\n

Note that extract_if also lets you mutate every element in the filter closure,\nregardless of whether you choose to keep or remove it.

\n
§Examples
\n

Splitting an array into evens and odds, reusing the original allocation:

\n\n
#![feature(extract_if)]\nlet mut numbers = vec![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];\n\nlet evens = numbers.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();\nlet odds = numbers;\n\nassert_eq!(evens, vec![2, 4, 6, 8, 14]);\nassert_eq!(odds, vec![1, 3, 5, 9, 11, 13, 15]);
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

source

pub const fn new_in(alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec: Vec<i32, _> = Vec::new_in(System);
\n
source

pub fn with_capacity_in(capacity: usize, alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T, A> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec = Vec::with_capacity_in(10, System);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<(), System>::with_capacity_in(10, System);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity_in(\n capacity: usize,\n alloc: A\n) -> Result<Vec<T, A>, TryReserveError>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
source

pub unsafe fn from_raw_parts_in(\n ptr: *mut T,\n length: usize,\n capacity: usize,\n alloc: A\n) -> Vec<T, A>

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

Creates a Vec<T, A> directly from a pointer, a length, a capacity,\nand an allocator.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must be currently allocated via the given allocator alloc.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to fit the layout size that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T, A>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is not safe\nto build a Vec<u8> from a pointer to a C char array with length size_t.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nuse std::ptr;\nuse std::mem;\n\nlet mut v = Vec::with_capacity_in(3, System);\nv.push(1);\nv.push(2);\nv.push(3);\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\nlet alloc = v.allocator();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts_in(p, len, cap, alloc.clone());\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
#![feature(allocator_api)]\n\nuse std::alloc::{AllocError, Allocator, Global, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = match Global.allocate(layout) {\n            Ok(mem) => mem.cast::<u32>().as_ptr(),\n            Err(AllocError) => return,\n        };\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts_in(mem, 1, 16, Global)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
source

pub fn into_raw_parts(self) -> (*mut T, usize, usize)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity).

\n

Returns the raw pointer to the underlying data, the length of\nthe vector (in elements), and the allocated capacity of the\ndata (in elements). These are the same arguments in the same\norder as the arguments to from_raw_parts.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(vec_into_raw_parts)]\nlet v: Vec<i32> = vec![-1, 0, 1];\n\nlet (ptr, len, cap) = v.into_raw_parts();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts(ptr, len, cap)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
source

pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity, allocator).

\n

Returns the raw pointer to the underlying data, the length of the vector (in elements),\nthe allocated capacity of the data (in elements), and the allocator. These are the same\narguments in the same order as the arguments to from_raw_parts_in.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts_in function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(allocator_api, vec_into_raw_parts)]\n\nuse std::alloc::System;\n\nlet mut v: Vec<i32, System> = Vec::new_in(System);\nv.push(-1);\nv.push(0);\nv.push(1);\n\nlet (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts_in(ptr, len, cap, alloc)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
1.0.0 · source

pub fn capacity(&self) -> usize

Returns the total number of elements the vector can hold without\nreallocating.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::with_capacity(10);\nvec.push(42);\nassert!(vec.capacity() >= 10);
\n
1.0.0 · source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to\nspeculatively avoid frequent reallocations. After calling reserve,\ncapacity will be greater than or equal to self.len() + additional.\nDoes nothing if capacity is already sufficient.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve(10);\nassert!(vec.capacity() >= 11);
\n
1.0.0 · source

pub fn reserve_exact(&mut self, additional: usize)

Reserves the minimum capacity for at least additional more elements to\nbe inserted in the given Vec<T>. Unlike reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling reserve_exact, capacity will be greater than or equal to\nself.len() + additional. Does nothing if the capacity is already\nsufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer reserve if future insertions are expected.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve_exact(10);\nassert!(vec.capacity() >= 11);
\n
1.57.0 · source

pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>

Tries to reserve capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to speculatively avoid\nfrequent reallocations. After calling try_reserve, capacity will be\ngreater than or equal to self.len() + additional if it returns\nOk(()). Does nothing if capacity is already sufficient. This method\npreserves the contents even if an error occurs.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.57.0 · source

pub fn try_reserve_exact(\n &mut self,\n additional: usize\n) -> Result<(), TryReserveError>

Tries to reserve the minimum capacity for at least additional\nelements to be inserted in the given Vec<T>. Unlike try_reserve,\nthis will not deliberately over-allocate to speculatively avoid frequent\nallocations. After calling try_reserve_exact, capacity will be greater\nthan or equal to self.len() + additional if it returns Ok(()).\nDoes nothing if the capacity is already sufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer try_reserve if future insertions are expected.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve_exact(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.0.0 · source

pub fn shrink_to_fit(&mut self)

Shrinks the capacity of the vector as much as possible.

\n

The behavior of this method depends on the allocator, which may either shrink the vector\nin-place or reallocate. The resulting vector might still have some excess capacity, just as\nis the case for with_capacity. See Allocator::shrink for more details.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to_fit();\nassert!(vec.capacity() >= 3);
\n
1.56.0 · source

pub fn shrink_to(&mut self, min_capacity: usize)

Shrinks the capacity of the vector with a lower bound.

\n

The capacity will remain at least as large as both the length\nand the supplied value.

\n

If the current capacity is less than the lower limit, this is a no-op.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to(4);\nassert!(vec.capacity() >= 4);\nvec.shrink_to(0);\nassert!(vec.capacity() >= 3);
\n
1.0.0 · source

pub fn into_boxed_slice(self) -> Box<[T], A>

Converts the vector into Box<[T]>.

\n

Before doing the conversion, this method discards excess capacity like shrink_to_fit.

\n
§Examples
\n
let v = vec![1, 2, 3];\n\nlet slice = v.into_boxed_slice();
\n

Any excess capacity is removed:

\n\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\n\nassert!(vec.capacity() >= 10);\nlet slice = vec.into_boxed_slice();\nassert_eq!(slice.into_vec().capacity(), 3);
\n
1.0.0 · source

pub fn truncate(&mut self, len: usize)

Shortens the vector, keeping the first len elements and dropping\nthe rest.

\n

If len is greater or equal to the vector’s current length, this has\nno effect.

\n

The drain method can emulate truncate, but causes the excess\nelements to be returned instead of dropped.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n

Truncating a five element vector to two elements:

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nvec.truncate(2);\nassert_eq!(vec, [1, 2]);
\n

No truncation occurs when len is greater than the vector’s current\nlength:

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(8);\nassert_eq!(vec, [1, 2, 3]);
\n

Truncating when len == 0 is equivalent to calling the clear\nmethod.

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(0);\nassert_eq!(vec, []);
\n
1.7.0 · source

pub fn as_slice(&self) -> &[T]

Extracts a slice containing the entire vector.

\n

Equivalent to &s[..].

\n
§Examples
\n
use std::io::{self, Write};\nlet buffer = vec![1, 2, 3, 5, 8];\nio::sink().write(buffer.as_slice()).unwrap();
\n
1.7.0 · source

pub fn as_mut_slice(&mut self) -> &mut [T]

Extracts a mutable slice of the entire vector.

\n

Equivalent to &mut s[..].

\n
§Examples
\n
use std::io::{self, Read};\nlet mut buffer = vec![0; 3];\nio::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap();
\n
1.37.0 · source

pub fn as_ptr(&self) -> *const T

Returns a raw pointer to the vector’s buffer, or a dangling raw pointer\nvalid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

The caller must also ensure that the memory the pointer (non-transitively) points to\nis never written to (except inside an UnsafeCell) using this pointer or any pointer\nderived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize mutable references to the slice,\nor mutable references to specific elements you are planning on accessing through this pointer,\nas well as writing to those elements, may still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
let x = vec![1, 2, 4];\nlet x_ptr = x.as_ptr();\n\nunsafe {\n    for i in 0..x.len() {\n        assert_eq!(*x_ptr.add(i), 1 << i);\n    }\n}
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0, 1, 2];\n    let ptr1 = v.as_ptr();\n    let _ = ptr1.read();\n    let ptr2 = v.as_mut_ptr().offset(2);\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`\n    // because it mutated a different element:\n    let _ = ptr1.read();\n}
\n
1.37.0 · source

pub fn as_mut_ptr(&mut self) -> *mut T

Returns an unsafe mutable pointer to the vector’s buffer, or a dangling\nraw pointer valid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize references to the slice,\nor references to specific elements you are planning on accessing through this pointer,\nmay still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
// Allocate vector big enough for 4 elements.\nlet size = 4;\nlet mut x: Vec<i32> = Vec::with_capacity(size);\nlet x_ptr = x.as_mut_ptr();\n\n// Initialize elements via raw pointer writes, then set length.\nunsafe {\n    for i in 0..size {\n        *x_ptr.add(i) = i as i32;\n    }\n    x.set_len(size);\n}\nassert_eq!(&*x, &[0, 1, 2, 3]);
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0];\n    let ptr1 = v.as_mut_ptr();\n    ptr1.write(1);\n    let ptr2 = v.as_mut_ptr();\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`:\n    ptr1.write(3);\n}
\n
source

pub fn allocator(&self) -> &A

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

Returns a reference to the underlying allocator.

\n
1.0.0 · source

pub unsafe fn set_len(&mut self, new_len: usize)

Forces the length of the vector to new_len.

\n

This is a low-level operation that maintains none of the normal\ninvariants of the type. Normally changing the length of a vector\nis done using one of the safe operations instead, such as\ntruncate, resize, extend, or clear.

\n
§Safety
\n
    \n
  • new_len must be less than or equal to capacity().
  • \n
  • The elements at old_len..new_len must be initialized.
  • \n
\n
§Examples
\n

This method can be useful for situations in which the vector\nis serving as a buffer for other code, particularly over FFI:

\n\n
pub fn get_dictionary(&self) -> Option<Vec<u8>> {\n    // Per the FFI method's docs, \"32768 bytes is always enough\".\n    let mut dict = Vec::with_capacity(32_768);\n    let mut dict_length = 0;\n    // SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that:\n    // 1. `dict_length` elements were initialized.\n    // 2. `dict_length` <= the capacity (32_768)\n    // which makes `set_len` safe to call.\n    unsafe {\n        // Make the FFI call...\n        let r = deflateGetDictionary(self.strm, dict.as_mut_ptr(), &mut dict_length);\n        if r == Z_OK {\n            // ...and update the length to what was initialized.\n            dict.set_len(dict_length);\n            Some(dict)\n        } else {\n            None\n        }\n    }\n}
\n

While the following example is sound, there is a memory leak since\nthe inner vectors were not freed prior to the set_len call:

\n\n
let mut vec = vec![vec![1, 0, 0],\n                   vec![0, 1, 0],\n                   vec![0, 0, 1]];\n// SAFETY:\n// 1. `old_len..0` is empty so no elements need to be initialized.\n// 2. `0 <= capacity` always holds whatever `capacity` is.\nunsafe {\n    vec.set_len(0);\n}
\n

Normally, here, one would use clear instead to correctly drop\nthe contents and thus not leak memory.

\n
1.0.0 · source

pub fn swap_remove(&mut self, index: usize) -> T

Removes an element from the vector and returns it.

\n

The removed element is replaced by the last element of the vector.

\n

This does not preserve ordering of the remaining elements, but is O(1).\nIf you need to preserve the element order, use remove instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![\"foo\", \"bar\", \"baz\", \"qux\"];\n\nassert_eq!(v.swap_remove(1), \"bar\");\nassert_eq!(v, [\"foo\", \"qux\", \"baz\"]);\n\nassert_eq!(v.swap_remove(0), \"foo\");\nassert_eq!(v, [\"baz\", \"qux\"]);
\n
1.0.0 · source

pub fn insert(&mut self, index: usize, element: T)

Inserts an element at position index within the vector, shifting all\nelements after it to the right.

\n
§Panics
\n

Panics if index > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.insert(1, 4);\nassert_eq!(vec, [1, 4, 2, 3]);\nvec.insert(4, 5);\nassert_eq!(vec, [1, 4, 2, 3, 5]);
\n
§Time complexity
\n

Takes O(Vec::len) time. All items after the insertion index must be\nshifted to the right. In the worst case, all elements are shifted when\nthe insertion index is 0.

\n
1.0.0 · source

pub fn remove(&mut self, index: usize) -> T

Removes and returns the element at position index within the vector,\nshifting all elements after it to the left.

\n

Note: Because this shifts over the remaining elements, it has a\nworst-case performance of O(n). If you don’t need the order of elements\nto be preserved, use swap_remove instead. If you’d like to remove\nelements from the beginning of the Vec, consider using\nVecDeque::pop_front instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nassert_eq!(v.remove(1), 2);\nassert_eq!(v, [1, 3]);
\n
1.0.0 · source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(&T) -> bool,

Retains only the elements specified by the predicate.

\n

In other words, remove all elements e for which f(&e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain(|&x| x % 2 == 0);\nassert_eq!(vec, [2, 4]);
\n

Because the elements are visited exactly once in the original order,\nexternal state may be used to decide which elements to keep.

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nlet keep = [false, true, true, false, true];\nlet mut iter = keep.iter();\nvec.retain(|_| *iter.next().unwrap());\nassert_eq!(vec, [2, 3, 5]);
\n
1.61.0 · source

pub fn retain_mut<F>(&mut self, f: F)
where\n F: FnMut(&mut T) -> bool,

Retains only the elements specified by the predicate, passing a mutable reference to it.

\n

In other words, remove all elements e such that f(&mut e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain_mut(|x| if *x <= 3 {\n    *x += 1;\n    true\n} else {\n    false\n});\nassert_eq!(vec, [2, 3, 4]);
\n
1.16.0 · source

pub fn dedup_by_key<F, K>(&mut self, key: F)
where\n F: FnMut(&mut T) -> K,\n K: PartialEq,

Removes all but the first of consecutive elements in the vector that resolve to the same\nkey.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![10, 20, 21, 30, 20];\n\nvec.dedup_by_key(|i| *i / 10);\n\nassert_eq!(vec, [10, 20, 30, 20]);
\n
1.16.0 · source

pub fn dedup_by<F>(&mut self, same_bucket: F)
where\n F: FnMut(&mut T, &mut T) -> bool,

Removes all but the first of consecutive elements in the vector satisfying a given equality\nrelation.

\n

The same_bucket function is passed references to two elements from the vector and\nmust determine if the elements compare equal. The elements are passed in opposite order\nfrom their order in the slice, so if same_bucket(a, b) returns true, a is removed.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![\"foo\", \"bar\", \"Bar\", \"baz\", \"bar\"];\n\nvec.dedup_by(|a, b| a.eq_ignore_ascii_case(b));\n\nassert_eq!(vec, [\"foo\", \"bar\", \"baz\", \"bar\"]);
\n
1.0.0 · source

pub fn push(&mut self, value: T)

Appends an element to the back of a collection.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2];\nvec.push(3);\nassert_eq!(vec, [1, 2, 3]);
\n
§Time complexity
\n

Takes amortized O(1) time. If the vector’s length would exceed its\ncapacity after the push, O(capacity) time is taken to copy the\nvector’s elements to a larger allocation. This expensive operation is\noffset by the capacity O(1) insertions it allows.

\n
source

pub fn push_within_capacity(&mut self, value: T) -> Result<(), T>

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

Appends an element if there is sufficient spare capacity, otherwise an error is returned\nwith the element.

\n

Unlike push this method will not reallocate when there’s insufficient capacity.\nThe caller should use reserve or try_reserve to ensure that there is enough capacity.

\n
§Examples
\n

A manual, panic-free alternative to FromIterator:

\n\n
#![feature(vec_push_within_capacity)]\n\nuse std::collections::TryReserveError;\nfn from_iter_fallible<T>(iter: impl Iterator<Item=T>) -> Result<Vec<T>, TryReserveError> {\n    let mut vec = Vec::new();\n    for value in iter {\n        if let Err(value) = vec.push_within_capacity(value) {\n            vec.try_reserve(1)?;\n            // this cannot fail, the previous line either returned or added at least 1 free slot\n            let _ = vec.push_within_capacity(value);\n        }\n    }\n    Ok(vec)\n}\nassert_eq!(from_iter_fallible(0..100), Ok(Vec::from_iter(0..100)));
\n
§Time complexity
\n

Takes O(1) time.

\n
1.0.0 · source

pub fn pop(&mut self) -> Option<T>

Removes the last element from a vector and returns it, or None if it\nis empty.

\n

If you’d like to pop the first element, consider using\nVecDeque::pop_front instead.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nassert_eq!(vec.pop(), Some(3));\nassert_eq!(vec, [1, 2]);
\n
§Time complexity
\n

Takes O(1) time.

\n
source

pub fn pop_if<F>(&mut self, f: F) -> Option<T>
where\n F: FnOnce(&mut T) -> bool,

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

Removes and returns the last element in a vector if the predicate\nreturns true, or None if the predicate returns false or the vector\nis empty.

\n
§Examples
\n
#![feature(vec_pop_if)]\n\nlet mut vec = vec![1, 2, 3, 4];\nlet pred = |x: &mut i32| *x % 2 == 0;\n\nassert_eq!(vec.pop_if(pred), Some(4));\nassert_eq!(vec, [1, 2, 3]);\nassert_eq!(vec.pop_if(pred), None);
\n
1.4.0 · source

pub fn append(&mut self, other: &mut Vec<T, A>)

Moves all the elements of other into self, leaving other empty.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet mut vec2 = vec![4, 5, 6];\nvec.append(&mut vec2);\nassert_eq!(vec, [1, 2, 3, 4, 5, 6]);\nassert_eq!(vec2, []);
\n
1.6.0 · source

pub fn drain<R>(&mut self, range: R) -> Drain<'_, T, A>
where\n R: RangeBounds<usize>,

Removes the specified range from the vector in bulk, returning all\nremoved elements as an iterator. If the iterator is dropped before\nbeing fully consumed, it drops the remaining removed elements.

\n

The returned iterator keeps a mutable borrow on the vector to optimize\nits implementation.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Leaking
\n

If the returned iterator goes out of scope without being dropped (due to\nmem::forget, for example), the vector may have lost and leaked\nelements arbitrarily, including elements outside the range.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nlet u: Vec<_> = v.drain(1..).collect();\nassert_eq!(v, &[1]);\nassert_eq!(u, &[2, 3]);\n\n// A full range clears the vector, like `clear()` does\nv.drain(..);\nassert_eq!(v, &[]);
\n
1.0.0 · source

pub fn clear(&mut self)

Clears the vector, removing all values.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\n\nv.clear();\n\nassert!(v.is_empty());
\n
1.0.0 · source

pub fn len(&self) -> usize

Returns the number of elements in the vector, also referred to\nas its ‘length’.

\n
§Examples
\n
let a = vec![1, 2, 3];\nassert_eq!(a.len(), 3);
\n
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if the vector contains no elements.

\n
§Examples
\n
let mut v = Vec::new();\nassert!(v.is_empty());\n\nv.push(1);\nassert!(!v.is_empty());
\n
1.4.0 · source

pub fn split_off(&mut self, at: usize) -> Vec<T, A>
where\n A: Clone,

Splits the collection into two at the given index.

\n

Returns a newly allocated vector containing the elements in the range\n[at, len). After the call, the original vector will be left containing\nthe elements [0, at) with its previous capacity unchanged.

\n
    \n
  • If you want to take ownership of the entire contents and capacity of\nthe vector, see mem::take or mem::replace.
  • \n
  • If you don’t need the returned vector at all, see Vec::truncate.
  • \n
  • If you want to take ownership of an arbitrary subslice, or you don’t\nnecessarily want to store the removed items in a vector, see Vec::drain.
  • \n
\n
§Panics
\n

Panics if at > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet vec2 = vec.split_off(1);\nassert_eq!(vec, [1]);\nassert_eq!(vec2, [2, 3]);
\n
1.33.0 · source

pub fn resize_with<F>(&mut self, new_len: usize, f: F)
where\n F: FnMut() -> T,

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with the result of\ncalling the closure f. The return values from f will end up\nin the Vec in the order they have been generated.

\n

If new_len is less than len, the Vec is simply truncated.

\n

This method uses a closure to create new values on every push. If\nyou’d rather Clone a given value, use Vec::resize. If you\nwant to use the Default trait to generate values, you can\npass Default::default as the second argument.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.resize_with(5, Default::default);\nassert_eq!(vec, [1, 2, 3, 0, 0]);\n\nlet mut vec = vec![];\nlet mut p = 1;\nvec.resize_with(4, || { p *= 2; p });\nassert_eq!(vec, [2, 4, 8, 16]);
\n
1.47.0 · source

pub fn leak<'a>(self) -> &'a mut [T]
where\n A: 'a,

Consumes and leaks the Vec, returning a mutable reference to the contents,\n&'a mut [T]. Note that the type T must outlive the chosen lifetime\n'a. If the type has only static references, or none at all, then this\nmay be chosen to be 'static.

\n

As of Rust 1.57, this method does not reallocate or shrink the Vec,\nso the leaked allocation may include unused capacity that is not part\nof the returned slice.

\n

This function is mainly useful for data that lives for the remainder of\nthe program’s life. Dropping the returned reference will cause a memory\nleak.

\n
§Examples
\n

Simple usage:

\n\n
let x = vec![1, 2, 3];\nlet static_ref: &'static mut [usize] = x.leak();\nstatic_ref[0] += 1;\nassert_eq!(static_ref, &[2, 2, 3]);
\n
1.60.0 · source

pub fn spare_capacity_mut(&mut self) -> &mut [MaybeUninit<T>]

Returns the remaining spare capacity of the vector as a slice of\nMaybeUninit<T>.

\n

The returned slice can be used to fill the vector with data (e.g. by\nreading from a file) before marking the data as initialized using the\nset_len method.

\n
§Examples
\n
// Allocate vector big enough for 10 elements.\nlet mut v = Vec::with_capacity(10);\n\n// Fill in the first 3 elements.\nlet uninit = v.spare_capacity_mut();\nuninit[0].write(0);\nuninit[1].write(1);\nuninit[2].write(2);\n\n// Mark the first 3 elements of the vector as being initialized.\nunsafe {\n    v.set_len(3);\n}\n\nassert_eq!(&v, &[0, 1, 2]);
\n
source

pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit<T>])

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

Returns vector content as a slice of T, along with the remaining spare\ncapacity of the vector as a slice of MaybeUninit<T>.

\n

The returned spare capacity slice can be used to fill the vector with data\n(e.g. by reading from a file) before marking the data as initialized using\nthe set_len method.

\n

Note that this is a low-level API, which should be used with care for\noptimization purposes. If you need to append data to a Vec\nyou can use push, extend, extend_from_slice,\nextend_from_within, insert, append, resize or\nresize_with, depending on your exact needs.

\n
§Examples
\n
#![feature(vec_split_at_spare)]\n\nlet mut v = vec![1, 1, 2];\n\n// Reserve additional space big enough for 10 elements.\nv.reserve(10);\n\nlet (init, uninit) = v.split_at_spare_mut();\nlet sum = init.iter().copied().sum::<u32>();\n\n// Fill in the next 4 elements.\nuninit[0].write(sum);\nuninit[1].write(sum * 2);\nuninit[2].write(sum * 3);\nuninit[3].write(sum * 4);\n\n// Mark the 4 elements of the vector as being initialized.\nunsafe {\n    let len = v.len();\n    v.set_len(len + 4);\n}\n\nassert_eq!(&v, &[1, 1, 2, 4, 8, 12, 16]);
\n
",0,"cli::ModifierList"],["
§

impl<T> CloneableAny for Vec<T>
where\n T: 'static + Clone,

","CloneableAny","cli::ModifierList"],["
source§

impl<T, A> DerefPure for Vec<T, A>
where\n A: Allocator,

","DerefPure","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Eq for Vec<T, A>
where\n T: Eq,\n A: Allocator,

","Eq","cli::ModifierList"]], -"sim":[["
1.5.0 · source§

impl<T, A> AsMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut [T]

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut<[T]>","sim::make::load::ModifierList"],["
1.5.0 · source§

impl<T, A> AsMut<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut Vec<T, A>

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &[T]

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef<[T]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &Vec<T, A>

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Borrow<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow(&self) -> &[T]

Immutably borrows from an owned value. Read more
","Borrow<[T]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow_mut(&mut self) -> &mut [T]

Mutably borrows from an owned value. Read more
","BorrowMut<[T]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Clone for Vec<T, A>
where\n T: Clone,\n A: Allocator + Clone,

source§

fn clone_from(&mut self, source: &Vec<T, A>)

Overwrites the contents of self with a clone of the contents of source.

\n

This method is preferred over simply assigning source.clone() to self,\nas it avoids reallocation if possible. Additionally, if the element type\nT overrides clone_from(), this will reuse the resources of self’s\nelements as well.

\n
§Examples
\n
let x = vec![5, 6, 7];\nlet mut y = vec![8, 9, 10];\nlet yp: *const i32 = y.as_ptr();\n\ny.clone_from(&x);\n\n// The value is the same\nassert_eq!(x, y);\n\n// And no reallocation occurred\nassert_eq!(yp, y.as_ptr());
\n
source§

fn clone(&self) -> Vec<T, A>

Returns a copy of the value. Read more
","Clone","sim::make::load::ModifierList"],["
§

impl<T> Codec for Vec<T>
where\n T: Codec + TlsListElement + Debug,

Implement Codec for lists of elements that implement TlsListElement.

\n

TlsListElement provides the size of the length prefix for the list.

\n
§

fn encode(&self, bytes: &mut Vec<u8>)

Function for encoding itself by appending itself to\nthe provided vec of bytes.
§

fn read(r: &mut Reader<'_>) -> Result<Vec<T>, InvalidMessage>

Function for decoding itself from the provided reader\nwill return Some if the decoding was successful or\nNone if it was not.
§

fn get_encoding(&self) -> Vec<u8>

Convenience function for encoding the implementation\ninto a vec and returning it
§

fn read_bytes(bytes: &[u8]) -> Result<Self, InvalidMessage>

Function for wrapping a call to the read function in\na Reader for the slice of bytes provided
","Codec","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Debug for Vec<T, A>
where\n T: Debug,\n A: Allocator,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T> Default for Vec<T>

source§

fn default() -> Vec<T>

Creates an empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
","Default","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Deref for Vec<T, A>
where\n A: Allocator,

§

type Target = [T]

The resulting type after dereferencing.
source§

fn deref(&self) -> &[T]

Dereferences the value.
","Deref","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> DerefMut for Vec<T, A>
where\n A: Allocator,

source§

fn deref_mut(&mut self) -> &mut [T]

Mutably dereferences the value.
","DerefMut","sim::make::load::ModifierList"],["
source§

impl<'de, T> Deserialize<'de> for Vec<T>
where\n T: Deserialize<'de>,

source§

fn deserialize<D>(\n deserializer: D\n) -> Result<Vec<T>, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Drop for Vec<T, A>
where\n A: Allocator,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
","Drop","sim::make::load::ModifierList"],["
1.2.0 · source§

impl<'a, T, A> Extend<&'a T> for Vec<T, A>
where\n T: Copy + 'a,\n A: Allocator,

Extend implementation that copies elements out of references before pushing them onto the Vec.

\n

This implementation is specialized for slice iterators, where it uses copy_from_slice to\nappend the entire slice at once.

\n
source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, _: &'a T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a T>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Extend<T> for Vec<T, A>
where\n A: Allocator,

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T> From<&[T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&[T]>","sim::make::load::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&[T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3]), vec![1, 2, 3]);
\n
","From<&[T; N]>","sim::make::load::ModifierList"],["
1.19.0 · source§

impl<T> From<&mut [T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&mut [T]>","sim::make::load::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&mut [T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3]), vec![1, 2, 3]);
\n
","From<&mut [T; N]>","sim::make::load::ModifierList"],["
1.44.0 · source§

impl<T, const N: usize> From<[T; N]> for Vec<T>

source§

fn from(s: [T; N]) -> Vec<T>

Allocate a Vec<T> and move s’s items into it.

\n
§Examples
\n
assert_eq!(Vec::from([1, 2, 3]), vec![1, 2, 3]);
\n
","From<[T; N]>","sim::make::load::ModifierList"],["
1.5.0 · source§

impl<T, A> From<BinaryHeap<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(heap: BinaryHeap<T, A>) -> Vec<T, A>

Converts a BinaryHeap<T> into a Vec<T>.

\n

This conversion requires no data movement or allocation, and has\nconstant time complexity.

\n
","From>","sim::make::load::ModifierList"],["
1.18.0 · source§

impl<T, A> From<Box<[T], A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(s: Box<[T], A>) -> Vec<T, A>

Convert a boxed slice into a vector by transferring ownership of\nthe existing heap allocation.

\n
§Examples
\n
let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice();\nassert_eq!(Vec::from(b), vec![1, 2, 3]);
\n
","From>","sim::make::load::ModifierList"],["
1.14.0 · source§

impl<'a, T> From<Cow<'a, [T]>> for Vec<T>
where\n [T]: ToOwned<Owned = Vec<T>>,

source§

fn from(s: Cow<'a, [T]>) -> Vec<T>

Convert a clone-on-write slice into a vector.

\n

If s already owns a Vec<T>, it will be returned directly.\nIf s is borrowing a slice, a new Vec<T> will be allocated and\nfilled by cloning s’s items into it.

\n
§Examples
\n
let o: Cow<'_, [i32]> = Cow::Owned(vec![1, 2, 3]);\nlet b: Cow<'_, [i32]> = Cow::Borrowed(&[1, 2, 3]);\nassert_eq!(Vec::from(o), Vec::from(b));
\n
","From>","sim::make::load::ModifierList"],["
1.10.0 · source§

impl<T, A> From<VecDeque<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(other: VecDeque<T, A>) -> Vec<T, A>

Turn a VecDeque<T> into a Vec<T>.

\n

This never needs to re-allocate, but does need to do O(n) data movement if\nthe circular buffer doesn’t happen to be at the beginning of the allocation.

\n
§Examples
\n
use std::collections::VecDeque;\n\n// This one is *O*(1).\nlet deque: VecDeque<_> = (1..5).collect();\nlet ptr = deque.as_slices().0.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);\n\n// This one needs data rearranging.\nlet mut deque: VecDeque<_> = (1..5).collect();\ndeque.push_front(9);\ndeque.push_front(8);\nlet ptr = deque.as_slices().1.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [8, 9, 1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);
\n
","From>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T> FromIterator<T> for Vec<T>

Collects an iterator into a Vec, commonly called via Iterator::collect()

\n

§Allocation behavior

\n

In general Vec does not guarantee any particular growth or allocation strategy.\nThat also applies to this trait impl.

\n

Note: This section covers implementation details and is therefore exempt from\nstability guarantees.

\n

Vec may use any or none of the following strategies,\ndepending on the supplied iterator:

\n
    \n
  • preallocate based on Iterator::size_hint()\n
      \n
    • and panic if the number of items is outside the provided lower/upper bounds
    • \n
    \n
  • \n
  • use an amortized growth strategy similar to pushing one item at a time
  • \n
  • perform the iteration in-place on the original allocation backing the iterator
  • \n
\n

The last case warrants some attention. It is an optimization that in many cases reduces peak memory\nconsumption and improves cache locality. But when big, short-lived allocations are created,\nonly a small fraction of their items get collected, no further use is made of the spare capacity\nand the resulting Vec is moved into a longer-lived structure, then this can lead to the large\nallocations having their lifetimes unnecessarily extended which can result in increased memory\nfootprint.

\n

In cases where this is an issue, the excess capacity can be discarded with Vec::shrink_to(),\nVec::shrink_to_fit() or by collecting into Box<[T]> instead, which additionally reduces\nthe size of the long-lived struct.

\n\n
static LONG_LIVED: Mutex<Vec<Vec<u16>>> = Mutex::new(Vec::new());\n\nfor i in 0..10 {\n    let big_temporary: Vec<u16> = (0..1024).collect();\n    // discard most items\n    let mut result: Vec<_> = big_temporary.into_iter().filter(|i| i % 100 == 0).collect();\n    // without this a lot of unused capacity might be moved into the global\n    result.shrink_to_fit();\n    LONG_LIVED.lock().unwrap().push(result);\n}
\n
source§

fn from_iter<I>(iter: I) -> Vec<T>
where\n I: IntoIterator<Item = T>,

Creates a value from an iterator. Read more
","FromIterator","sim::make::load::ModifierList"],["
§

impl<T> FromParallelIterator<T> for Vec<T>
where\n T: Send,

Collects items from a parallel iterator into a vector.

\n
§

fn from_par_iter<I>(par_iter: I) -> Vec<T>
where\n I: IntoParallelIterator<Item = T>,

Creates an instance of the collection from the parallel iterator par_iter. Read more
","FromParallelIterator","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Hash for Vec<T, A>
where\n T: Hash,\n A: Allocator,

The hash of a vector is the same as that of the corresponding slice,\nas required by the core::borrow::Borrow implementation.

\n\n
use std::hash::BuildHasher;\n\nlet b = std::hash::RandomState::new();\nlet v: Vec<u8> = vec![0xa8, 0x3c, 0x09];\nlet s: &[u8] = &[0xa8, 0x3c, 0x09];\nassert_eq!(b.hash_one(v), b.hash_one(s));
\n
source§

fn hash<H>(&self, state: &mut H)
where\n H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, I, A> Index<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

§

type Output = <I as SliceIndex<[T]>>::Output

The returned type after indexing.
source§

fn index(&self, index: I) -> &<Vec<T, A> as Index<I>>::Output

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, I, A> IndexMut<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

source§

fn index_mut(&mut self, index: I) -> &mut <Vec<T, A> as Index<I>>::Output

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
source§

impl<'de, T, E> IntoDeserializer<'de, E> for Vec<T>
where\n T: IntoDeserializer<'de, E>,\n E: Error,

§

type Deserializer = SeqDeserializer<<Vec<T> as IntoIterator>::IntoIter, E>

The type of the deserializer being converted into.
source§

fn into_deserializer(self) -> <Vec<T> as IntoDeserializer<'de, E>>::Deserializer

Convert this value into a deserializer.
","IntoDeserializer<'de, E>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> IntoIterator for Vec<T, A>
where\n A: Allocator,

source§

fn into_iter(self) -> <Vec<T, A> as IntoIterator>::IntoIter

Creates a consuming iterator, that is, one that moves each value out of\nthe vector (from start to end). The vector cannot be used after calling\nthis.

\n
§Examples
\n
let v = vec![\"a\".to_string(), \"b\".to_string()];\nlet mut v_iter = v.into_iter();\n\nlet first_element: Option<String> = v_iter.next();\n\nassert_eq!(first_element, Some(\"a\".to_string()));\nassert_eq!(v_iter.next(), Some(\"b\".to_string()));\nassert_eq!(v_iter.next(), None);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T, A>

Which kind of iterator are we turning this into?
","IntoIterator","sim::make::load::ModifierList"],["
§

impl<T> IntoParallelIterator for Vec<T>
where\n T: Send,

§

type Item = T

The type of item that the parallel iterator will produce.
§

type Iter = IntoIter<T>

The parallel iterator type that will be created.
§

fn into_par_iter(self) -> <Vec<T> as IntoParallelIterator>::Iter

Converts self into a parallel iterator. Read more
","IntoParallelIterator","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Ord for Vec<T, A>
where\n T: Ord,\n A: Allocator,

Implements ordering of vectors, lexicographically.

\n
source§

fn cmp(&self, other: &Vec<T, A>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","sim::make::load::ModifierList"],["
§

impl<'a, T> ParallelExtend<&'a T> for Vec<T>
where\n T: 'a + Copy + Send + Sync,

Extends a vector with copied items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = &'a T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend<&'a T>","sim::make::load::ModifierList"],["
§

impl<T> ParallelExtend<T> for Vec<T>
where\n T: Send,

Extends a vector with items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<&[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U; N]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&mut [U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&mut [U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&mut [U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&mut [U]>","sim::make::load::ModifierList"],["
1.48.0 · source§

impl<T, U, A> PartialEq<[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U; N]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A1, A2> PartialEq<Vec<U, A2>> for Vec<T, A1>
where\n A1: Allocator,\n A2: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &Vec<U, A2>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &Vec<U, A2>) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A1, A2> PartialOrd<Vec<T, A2>> for Vec<T, A1>
where\n T: PartialOrd,\n A1: Allocator,\n A2: Allocator,

Implements comparison of vectors, lexicographically.

\n
source§

fn partial_cmp(&self, other: &Vec<T, A2>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd>","sim::make::load::ModifierList"],["
source§

impl<T> Serialize for Vec<T>
where\n T: Serialize,

source§

fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","sim::make::load::ModifierList"],["
§

impl<T> Sink<T> for Vec<T>

§

type Error = Infallible

The type of value produced by the sink when an error occurs.
§

fn poll_ready(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Attempts to prepare the Sink to receive a value. Read more
§

fn start_send(\n self: Pin<&mut Vec<T>>,\n item: T\n) -> Result<(), <Vec<T> as Sink<T>>::Error>

Begin the process of sending a value to the sink.\nEach call to this function must be preceded by a successful call to\npoll_ready which returned Poll::Ready(Ok(())). Read more
§

fn poll_flush(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output from this sink. Read more
§

fn poll_close(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output and close this sink, if necessary. Read more
","Sink","sim::make::load::ModifierList"],["
source§

impl<T> Vec<T>

1.0.0 (const: 1.39.0) · source

pub const fn new() -> Vec<T>

Constructs a new, empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::new();
\n
1.0.0 · source

pub fn with_capacity(capacity: usize) -> Vec<T>

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<()>::with_capacity(10);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity(capacity: usize) -> Result<Vec<T>, TryReserveError>

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

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
1.0.0 · source

pub unsafe fn from_raw_parts(\n ptr: *mut T,\n length: usize,\n capacity: usize\n) -> Vec<T>

Creates a Vec<T> directly from a pointer, a length, and a capacity.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must have been allocated using the global allocator, such as via\nthe alloc::alloc function.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to be the capacity that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is normally not safe\nto build a Vec<u8> from a pointer to a C char array with length\nsize_t, doing so is only safe if the array was initially allocated by\na Vec or String.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1. To avoid\nthese issues, it is often preferable to do casting/transmuting using\nslice::from_raw_parts instead.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
use std::ptr;\nuse std::mem;\n\nlet v = vec![1, 2, 3];\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts(p, len, cap);\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
use std::alloc::{alloc, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = alloc(layout).cast::<u32>();\n        if mem.is_null() {\n            return;\n        }\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts(mem, 1, 16)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: Clone,\n A: Allocator,

1.5.0 · source

pub fn resize(&mut self, new_len: usize, value: T)

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with value.\nIf new_len is less than len, the Vec is simply truncated.

\n

This method requires T to implement Clone,\nin order to be able to clone the passed value.\nIf you need more flexibility (or want to rely on Default instead of\nClone), use Vec::resize_with.\nIf you only need to resize to a smaller size, use Vec::truncate.

\n
§Examples
\n
let mut vec = vec![\"hello\"];\nvec.resize(3, \"world\");\nassert_eq!(vec, [\"hello\", \"world\", \"world\"]);\n\nlet mut vec = vec![1, 2, 3, 4];\nvec.resize(2, 0);\nassert_eq!(vec, [1, 2]);
\n
1.6.0 · source

pub fn extend_from_slice(&mut self, other: &[T])

Clones and appends all elements in a slice to the Vec.

\n

Iterates over the slice other, clones each element, and then appends\nit to this Vec. The other slice is traversed in-order.

\n

Note that this function is same as extend except that it is\nspecialized to work with slices instead. If and when Rust gets\nspecialization this function will likely be deprecated (but still\navailable).

\n
§Examples
\n
let mut vec = vec![1];\nvec.extend_from_slice(&[2, 3, 4]);\nassert_eq!(vec, [1, 2, 3, 4]);
\n
1.53.0 · source

pub fn extend_from_within<R>(&mut self, src: R)
where\n R: RangeBounds<usize>,

Copies elements from src range to the end of the vector.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut vec = vec![0, 1, 2, 3, 4];\n\nvec.extend_from_within(2..);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4]);\n\nvec.extend_from_within(..2);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1]);\n\nvec.extend_from_within(4..8);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1, 4, 2, 3, 4]);
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: PartialEq,\n A: Allocator,

1.0.0 · source

pub fn dedup(&mut self)

Removes consecutive repeated elements in the vector according to the\nPartialEq trait implementation.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![1, 2, 2, 3, 2];\n\nvec.dedup();\n\nassert_eq!(vec, [1, 2, 3, 2]);
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

1.21.0 · source

pub fn splice<R, I>(\n &mut self,\n range: R,\n replace_with: I\n) -> Splice<'_, <I as IntoIterator>::IntoIter, A>
where\n R: RangeBounds<usize>,\n I: IntoIterator<Item = T>,

Creates a splicing iterator that replaces the specified range in the vector\nwith the given replace_with iterator and yields the removed items.\nreplace_with does not need to be the same length as range.

\n

range is removed even if the iterator is not consumed until the end.

\n

It is unspecified how many elements are removed from the vector\nif the Splice value is leaked.

\n

The input iterator replace_with is only consumed when the Splice value is dropped.

\n

This is optimal if:

\n
    \n
  • The tail (elements in the vector after range) is empty,
  • \n
  • or replace_with yields fewer or equal elements than range’s length
  • \n
  • or the lower bound of its size_hint() is exact.
  • \n
\n

Otherwise, a temporary vector is allocated and the tail is moved twice.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3, 4];\nlet new = [7, 8, 9];\nlet u: Vec<_> = v.splice(1..3, new).collect();\nassert_eq!(v, &[1, 7, 8, 9, 4]);\nassert_eq!(u, &[2, 3]);
\n
source

pub fn extract_if<F>(&mut self, filter: F) -> ExtractIf<'_, T, F, A>
where\n F: FnMut(&mut T) -> bool,

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

Creates an iterator which uses a closure to determine if an element should be removed.

\n

If the closure returns true, then the element is removed and yielded.\nIf the closure returns false, the element will remain in the vector and will not be yielded\nby the iterator.

\n

If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

\n

Using this method is equivalent to the following code:

\n\n
let mut i = 0;\nwhile i < vec.len() {\n    if some_predicate(&mut vec[i]) {\n        let val = vec.remove(i);\n        // your code here\n    } else {\n        i += 1;\n    }\n}\n
\n

But extract_if is easier to use. extract_if is also more efficient,\nbecause it can backshift the elements of the array in bulk.

\n

Note that extract_if also lets you mutate every element in the filter closure,\nregardless of whether you choose to keep or remove it.

\n
§Examples
\n

Splitting an array into evens and odds, reusing the original allocation:

\n\n
#![feature(extract_if)]\nlet mut numbers = vec![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];\n\nlet evens = numbers.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();\nlet odds = numbers;\n\nassert_eq!(evens, vec![2, 4, 6, 8, 14]);\nassert_eq!(odds, vec![1, 3, 5, 9, 11, 13, 15]);
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

source

pub const fn new_in(alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec: Vec<i32, _> = Vec::new_in(System);
\n
source

pub fn with_capacity_in(capacity: usize, alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T, A> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec = Vec::with_capacity_in(10, System);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<(), System>::with_capacity_in(10, System);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity_in(\n capacity: usize,\n alloc: A\n) -> Result<Vec<T, A>, TryReserveError>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
source

pub unsafe fn from_raw_parts_in(\n ptr: *mut T,\n length: usize,\n capacity: usize,\n alloc: A\n) -> Vec<T, A>

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

Creates a Vec<T, A> directly from a pointer, a length, a capacity,\nand an allocator.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must be currently allocated via the given allocator alloc.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to fit the layout size that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T, A>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is not safe\nto build a Vec<u8> from a pointer to a C char array with length size_t.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nuse std::ptr;\nuse std::mem;\n\nlet mut v = Vec::with_capacity_in(3, System);\nv.push(1);\nv.push(2);\nv.push(3);\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\nlet alloc = v.allocator();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts_in(p, len, cap, alloc.clone());\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
#![feature(allocator_api)]\n\nuse std::alloc::{AllocError, Allocator, Global, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = match Global.allocate(layout) {\n            Ok(mem) => mem.cast::<u32>().as_ptr(),\n            Err(AllocError) => return,\n        };\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts_in(mem, 1, 16, Global)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
source

pub fn into_raw_parts(self) -> (*mut T, usize, usize)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity).

\n

Returns the raw pointer to the underlying data, the length of\nthe vector (in elements), and the allocated capacity of the\ndata (in elements). These are the same arguments in the same\norder as the arguments to from_raw_parts.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(vec_into_raw_parts)]\nlet v: Vec<i32> = vec![-1, 0, 1];\n\nlet (ptr, len, cap) = v.into_raw_parts();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts(ptr, len, cap)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
source

pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity, allocator).

\n

Returns the raw pointer to the underlying data, the length of the vector (in elements),\nthe allocated capacity of the data (in elements), and the allocator. These are the same\narguments in the same order as the arguments to from_raw_parts_in.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts_in function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(allocator_api, vec_into_raw_parts)]\n\nuse std::alloc::System;\n\nlet mut v: Vec<i32, System> = Vec::new_in(System);\nv.push(-1);\nv.push(0);\nv.push(1);\n\nlet (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts_in(ptr, len, cap, alloc)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
1.0.0 · source

pub fn capacity(&self) -> usize

Returns the total number of elements the vector can hold without\nreallocating.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::with_capacity(10);\nvec.push(42);\nassert!(vec.capacity() >= 10);
\n
1.0.0 · source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to\nspeculatively avoid frequent reallocations. After calling reserve,\ncapacity will be greater than or equal to self.len() + additional.\nDoes nothing if capacity is already sufficient.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve(10);\nassert!(vec.capacity() >= 11);
\n
1.0.0 · source

pub fn reserve_exact(&mut self, additional: usize)

Reserves the minimum capacity for at least additional more elements to\nbe inserted in the given Vec<T>. Unlike reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling reserve_exact, capacity will be greater than or equal to\nself.len() + additional. Does nothing if the capacity is already\nsufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer reserve if future insertions are expected.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve_exact(10);\nassert!(vec.capacity() >= 11);
\n
1.57.0 · source

pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>

Tries to reserve capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to speculatively avoid\nfrequent reallocations. After calling try_reserve, capacity will be\ngreater than or equal to self.len() + additional if it returns\nOk(()). Does nothing if capacity is already sufficient. This method\npreserves the contents even if an error occurs.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.57.0 · source

pub fn try_reserve_exact(\n &mut self,\n additional: usize\n) -> Result<(), TryReserveError>

Tries to reserve the minimum capacity for at least additional\nelements to be inserted in the given Vec<T>. Unlike try_reserve,\nthis will not deliberately over-allocate to speculatively avoid frequent\nallocations. After calling try_reserve_exact, capacity will be greater\nthan or equal to self.len() + additional if it returns Ok(()).\nDoes nothing if the capacity is already sufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer try_reserve if future insertions are expected.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve_exact(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.0.0 · source

pub fn shrink_to_fit(&mut self)

Shrinks the capacity of the vector as much as possible.

\n

The behavior of this method depends on the allocator, which may either shrink the vector\nin-place or reallocate. The resulting vector might still have some excess capacity, just as\nis the case for with_capacity. See Allocator::shrink for more details.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to_fit();\nassert!(vec.capacity() >= 3);
\n
1.56.0 · source

pub fn shrink_to(&mut self, min_capacity: usize)

Shrinks the capacity of the vector with a lower bound.

\n

The capacity will remain at least as large as both the length\nand the supplied value.

\n

If the current capacity is less than the lower limit, this is a no-op.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to(4);\nassert!(vec.capacity() >= 4);\nvec.shrink_to(0);\nassert!(vec.capacity() >= 3);
\n
1.0.0 · source

pub fn into_boxed_slice(self) -> Box<[T], A>

Converts the vector into Box<[T]>.

\n

Before doing the conversion, this method discards excess capacity like shrink_to_fit.

\n
§Examples
\n
let v = vec![1, 2, 3];\n\nlet slice = v.into_boxed_slice();
\n

Any excess capacity is removed:

\n\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\n\nassert!(vec.capacity() >= 10);\nlet slice = vec.into_boxed_slice();\nassert_eq!(slice.into_vec().capacity(), 3);
\n
1.0.0 · source

pub fn truncate(&mut self, len: usize)

Shortens the vector, keeping the first len elements and dropping\nthe rest.

\n

If len is greater or equal to the vector’s current length, this has\nno effect.

\n

The drain method can emulate truncate, but causes the excess\nelements to be returned instead of dropped.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n

Truncating a five element vector to two elements:

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nvec.truncate(2);\nassert_eq!(vec, [1, 2]);
\n

No truncation occurs when len is greater than the vector’s current\nlength:

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(8);\nassert_eq!(vec, [1, 2, 3]);
\n

Truncating when len == 0 is equivalent to calling the clear\nmethod.

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(0);\nassert_eq!(vec, []);
\n
1.7.0 · source

pub fn as_slice(&self) -> &[T]

Extracts a slice containing the entire vector.

\n

Equivalent to &s[..].

\n
§Examples
\n
use std::io::{self, Write};\nlet buffer = vec![1, 2, 3, 5, 8];\nio::sink().write(buffer.as_slice()).unwrap();
\n
1.7.0 · source

pub fn as_mut_slice(&mut self) -> &mut [T]

Extracts a mutable slice of the entire vector.

\n

Equivalent to &mut s[..].

\n
§Examples
\n
use std::io::{self, Read};\nlet mut buffer = vec![0; 3];\nio::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap();
\n
1.37.0 · source

pub fn as_ptr(&self) -> *const T

Returns a raw pointer to the vector’s buffer, or a dangling raw pointer\nvalid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

The caller must also ensure that the memory the pointer (non-transitively) points to\nis never written to (except inside an UnsafeCell) using this pointer or any pointer\nderived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize mutable references to the slice,\nor mutable references to specific elements you are planning on accessing through this pointer,\nas well as writing to those elements, may still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
let x = vec![1, 2, 4];\nlet x_ptr = x.as_ptr();\n\nunsafe {\n    for i in 0..x.len() {\n        assert_eq!(*x_ptr.add(i), 1 << i);\n    }\n}
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0, 1, 2];\n    let ptr1 = v.as_ptr();\n    let _ = ptr1.read();\n    let ptr2 = v.as_mut_ptr().offset(2);\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`\n    // because it mutated a different element:\n    let _ = ptr1.read();\n}
\n
1.37.0 · source

pub fn as_mut_ptr(&mut self) -> *mut T

Returns an unsafe mutable pointer to the vector’s buffer, or a dangling\nraw pointer valid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize references to the slice,\nor references to specific elements you are planning on accessing through this pointer,\nmay still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
// Allocate vector big enough for 4 elements.\nlet size = 4;\nlet mut x: Vec<i32> = Vec::with_capacity(size);\nlet x_ptr = x.as_mut_ptr();\n\n// Initialize elements via raw pointer writes, then set length.\nunsafe {\n    for i in 0..size {\n        *x_ptr.add(i) = i as i32;\n    }\n    x.set_len(size);\n}\nassert_eq!(&*x, &[0, 1, 2, 3]);
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0];\n    let ptr1 = v.as_mut_ptr();\n    ptr1.write(1);\n    let ptr2 = v.as_mut_ptr();\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`:\n    ptr1.write(3);\n}
\n
source

pub fn allocator(&self) -> &A

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

Returns a reference to the underlying allocator.

\n
1.0.0 · source

pub unsafe fn set_len(&mut self, new_len: usize)

Forces the length of the vector to new_len.

\n

This is a low-level operation that maintains none of the normal\ninvariants of the type. Normally changing the length of a vector\nis done using one of the safe operations instead, such as\ntruncate, resize, extend, or clear.

\n
§Safety
\n
    \n
  • new_len must be less than or equal to capacity().
  • \n
  • The elements at old_len..new_len must be initialized.
  • \n
\n
§Examples
\n

This method can be useful for situations in which the vector\nis serving as a buffer for other code, particularly over FFI:

\n\n
pub fn get_dictionary(&self) -> Option<Vec<u8>> {\n    // Per the FFI method's docs, \"32768 bytes is always enough\".\n    let mut dict = Vec::with_capacity(32_768);\n    let mut dict_length = 0;\n    // SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that:\n    // 1. `dict_length` elements were initialized.\n    // 2. `dict_length` <= the capacity (32_768)\n    // which makes `set_len` safe to call.\n    unsafe {\n        // Make the FFI call...\n        let r = deflateGetDictionary(self.strm, dict.as_mut_ptr(), &mut dict_length);\n        if r == Z_OK {\n            // ...and update the length to what was initialized.\n            dict.set_len(dict_length);\n            Some(dict)\n        } else {\n            None\n        }\n    }\n}
\n

While the following example is sound, there is a memory leak since\nthe inner vectors were not freed prior to the set_len call:

\n\n
let mut vec = vec![vec![1, 0, 0],\n                   vec![0, 1, 0],\n                   vec![0, 0, 1]];\n// SAFETY:\n// 1. `old_len..0` is empty so no elements need to be initialized.\n// 2. `0 <= capacity` always holds whatever `capacity` is.\nunsafe {\n    vec.set_len(0);\n}
\n

Normally, here, one would use clear instead to correctly drop\nthe contents and thus not leak memory.

\n
1.0.0 · source

pub fn swap_remove(&mut self, index: usize) -> T

Removes an element from the vector and returns it.

\n

The removed element is replaced by the last element of the vector.

\n

This does not preserve ordering of the remaining elements, but is O(1).\nIf you need to preserve the element order, use remove instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![\"foo\", \"bar\", \"baz\", \"qux\"];\n\nassert_eq!(v.swap_remove(1), \"bar\");\nassert_eq!(v, [\"foo\", \"qux\", \"baz\"]);\n\nassert_eq!(v.swap_remove(0), \"foo\");\nassert_eq!(v, [\"baz\", \"qux\"]);
\n
1.0.0 · source

pub fn insert(&mut self, index: usize, element: T)

Inserts an element at position index within the vector, shifting all\nelements after it to the right.

\n
§Panics
\n

Panics if index > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.insert(1, 4);\nassert_eq!(vec, [1, 4, 2, 3]);\nvec.insert(4, 5);\nassert_eq!(vec, [1, 4, 2, 3, 5]);
\n
§Time complexity
\n

Takes O(Vec::len) time. All items after the insertion index must be\nshifted to the right. In the worst case, all elements are shifted when\nthe insertion index is 0.

\n
1.0.0 · source

pub fn remove(&mut self, index: usize) -> T

Removes and returns the element at position index within the vector,\nshifting all elements after it to the left.

\n

Note: Because this shifts over the remaining elements, it has a\nworst-case performance of O(n). If you don’t need the order of elements\nto be preserved, use swap_remove instead. If you’d like to remove\nelements from the beginning of the Vec, consider using\nVecDeque::pop_front instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nassert_eq!(v.remove(1), 2);\nassert_eq!(v, [1, 3]);
\n
1.0.0 · source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(&T) -> bool,

Retains only the elements specified by the predicate.

\n

In other words, remove all elements e for which f(&e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain(|&x| x % 2 == 0);\nassert_eq!(vec, [2, 4]);
\n

Because the elements are visited exactly once in the original order,\nexternal state may be used to decide which elements to keep.

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nlet keep = [false, true, true, false, true];\nlet mut iter = keep.iter();\nvec.retain(|_| *iter.next().unwrap());\nassert_eq!(vec, [2, 3, 5]);
\n
1.61.0 · source

pub fn retain_mut<F>(&mut self, f: F)
where\n F: FnMut(&mut T) -> bool,

Retains only the elements specified by the predicate, passing a mutable reference to it.

\n

In other words, remove all elements e such that f(&mut e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain_mut(|x| if *x <= 3 {\n    *x += 1;\n    true\n} else {\n    false\n});\nassert_eq!(vec, [2, 3, 4]);
\n
1.16.0 · source

pub fn dedup_by_key<F, K>(&mut self, key: F)
where\n F: FnMut(&mut T) -> K,\n K: PartialEq,

Removes all but the first of consecutive elements in the vector that resolve to the same\nkey.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![10, 20, 21, 30, 20];\n\nvec.dedup_by_key(|i| *i / 10);\n\nassert_eq!(vec, [10, 20, 30, 20]);
\n
1.16.0 · source

pub fn dedup_by<F>(&mut self, same_bucket: F)
where\n F: FnMut(&mut T, &mut T) -> bool,

Removes all but the first of consecutive elements in the vector satisfying a given equality\nrelation.

\n

The same_bucket function is passed references to two elements from the vector and\nmust determine if the elements compare equal. The elements are passed in opposite order\nfrom their order in the slice, so if same_bucket(a, b) returns true, a is removed.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![\"foo\", \"bar\", \"Bar\", \"baz\", \"bar\"];\n\nvec.dedup_by(|a, b| a.eq_ignore_ascii_case(b));\n\nassert_eq!(vec, [\"foo\", \"bar\", \"baz\", \"bar\"]);
\n
1.0.0 · source

pub fn push(&mut self, value: T)

Appends an element to the back of a collection.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2];\nvec.push(3);\nassert_eq!(vec, [1, 2, 3]);
\n
§Time complexity
\n

Takes amortized O(1) time. If the vector’s length would exceed its\ncapacity after the push, O(capacity) time is taken to copy the\nvector’s elements to a larger allocation. This expensive operation is\noffset by the capacity O(1) insertions it allows.

\n
source

pub fn push_within_capacity(&mut self, value: T) -> Result<(), T>

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

Appends an element if there is sufficient spare capacity, otherwise an error is returned\nwith the element.

\n

Unlike push this method will not reallocate when there’s insufficient capacity.\nThe caller should use reserve or try_reserve to ensure that there is enough capacity.

\n
§Examples
\n

A manual, panic-free alternative to FromIterator:

\n\n
#![feature(vec_push_within_capacity)]\n\nuse std::collections::TryReserveError;\nfn from_iter_fallible<T>(iter: impl Iterator<Item=T>) -> Result<Vec<T>, TryReserveError> {\n    let mut vec = Vec::new();\n    for value in iter {\n        if let Err(value) = vec.push_within_capacity(value) {\n            vec.try_reserve(1)?;\n            // this cannot fail, the previous line either returned or added at least 1 free slot\n            let _ = vec.push_within_capacity(value);\n        }\n    }\n    Ok(vec)\n}\nassert_eq!(from_iter_fallible(0..100), Ok(Vec::from_iter(0..100)));
\n
§Time complexity
\n

Takes O(1) time.

\n
1.0.0 · source

pub fn pop(&mut self) -> Option<T>

Removes the last element from a vector and returns it, or None if it\nis empty.

\n

If you’d like to pop the first element, consider using\nVecDeque::pop_front instead.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nassert_eq!(vec.pop(), Some(3));\nassert_eq!(vec, [1, 2]);
\n
§Time complexity
\n

Takes O(1) time.

\n
source

pub fn pop_if<F>(&mut self, f: F) -> Option<T>
where\n F: FnOnce(&mut T) -> bool,

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

Removes and returns the last element in a vector if the predicate\nreturns true, or None if the predicate returns false or the vector\nis empty.

\n
§Examples
\n
#![feature(vec_pop_if)]\n\nlet mut vec = vec![1, 2, 3, 4];\nlet pred = |x: &mut i32| *x % 2 == 0;\n\nassert_eq!(vec.pop_if(pred), Some(4));\nassert_eq!(vec, [1, 2, 3]);\nassert_eq!(vec.pop_if(pred), None);
\n
1.4.0 · source

pub fn append(&mut self, other: &mut Vec<T, A>)

Moves all the elements of other into self, leaving other empty.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet mut vec2 = vec![4, 5, 6];\nvec.append(&mut vec2);\nassert_eq!(vec, [1, 2, 3, 4, 5, 6]);\nassert_eq!(vec2, []);
\n
1.6.0 · source

pub fn drain<R>(&mut self, range: R) -> Drain<'_, T, A>
where\n R: RangeBounds<usize>,

Removes the specified range from the vector in bulk, returning all\nremoved elements as an iterator. If the iterator is dropped before\nbeing fully consumed, it drops the remaining removed elements.

\n

The returned iterator keeps a mutable borrow on the vector to optimize\nits implementation.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Leaking
\n

If the returned iterator goes out of scope without being dropped (due to\nmem::forget, for example), the vector may have lost and leaked\nelements arbitrarily, including elements outside the range.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nlet u: Vec<_> = v.drain(1..).collect();\nassert_eq!(v, &[1]);\nassert_eq!(u, &[2, 3]);\n\n// A full range clears the vector, like `clear()` does\nv.drain(..);\nassert_eq!(v, &[]);
\n
1.0.0 · source

pub fn clear(&mut self)

Clears the vector, removing all values.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\n\nv.clear();\n\nassert!(v.is_empty());
\n
1.0.0 · source

pub fn len(&self) -> usize

Returns the number of elements in the vector, also referred to\nas its ‘length’.

\n
§Examples
\n
let a = vec![1, 2, 3];\nassert_eq!(a.len(), 3);
\n
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if the vector contains no elements.

\n
§Examples
\n
let mut v = Vec::new();\nassert!(v.is_empty());\n\nv.push(1);\nassert!(!v.is_empty());
\n
1.4.0 · source

pub fn split_off(&mut self, at: usize) -> Vec<T, A>
where\n A: Clone,

Splits the collection into two at the given index.

\n

Returns a newly allocated vector containing the elements in the range\n[at, len). After the call, the original vector will be left containing\nthe elements [0, at) with its previous capacity unchanged.

\n
    \n
  • If you want to take ownership of the entire contents and capacity of\nthe vector, see mem::take or mem::replace.
  • \n
  • If you don’t need the returned vector at all, see Vec::truncate.
  • \n
  • If you want to take ownership of an arbitrary subslice, or you don’t\nnecessarily want to store the removed items in a vector, see Vec::drain.
  • \n
\n
§Panics
\n

Panics if at > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet vec2 = vec.split_off(1);\nassert_eq!(vec, [1]);\nassert_eq!(vec2, [2, 3]);
\n
1.33.0 · source

pub fn resize_with<F>(&mut self, new_len: usize, f: F)
where\n F: FnMut() -> T,

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with the result of\ncalling the closure f. The return values from f will end up\nin the Vec in the order they have been generated.

\n

If new_len is less than len, the Vec is simply truncated.

\n

This method uses a closure to create new values on every push. If\nyou’d rather Clone a given value, use Vec::resize. If you\nwant to use the Default trait to generate values, you can\npass Default::default as the second argument.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.resize_with(5, Default::default);\nassert_eq!(vec, [1, 2, 3, 0, 0]);\n\nlet mut vec = vec![];\nlet mut p = 1;\nvec.resize_with(4, || { p *= 2; p });\nassert_eq!(vec, [2, 4, 8, 16]);
\n
1.47.0 · source

pub fn leak<'a>(self) -> &'a mut [T]
where\n A: 'a,

Consumes and leaks the Vec, returning a mutable reference to the contents,\n&'a mut [T]. Note that the type T must outlive the chosen lifetime\n'a. If the type has only static references, or none at all, then this\nmay be chosen to be 'static.

\n

As of Rust 1.57, this method does not reallocate or shrink the Vec,\nso the leaked allocation may include unused capacity that is not part\nof the returned slice.

\n

This function is mainly useful for data that lives for the remainder of\nthe program’s life. Dropping the returned reference will cause a memory\nleak.

\n
§Examples
\n

Simple usage:

\n\n
let x = vec![1, 2, 3];\nlet static_ref: &'static mut [usize] = x.leak();\nstatic_ref[0] += 1;\nassert_eq!(static_ref, &[2, 2, 3]);
\n
1.60.0 · source

pub fn spare_capacity_mut(&mut self) -> &mut [MaybeUninit<T>]

Returns the remaining spare capacity of the vector as a slice of\nMaybeUninit<T>.

\n

The returned slice can be used to fill the vector with data (e.g. by\nreading from a file) before marking the data as initialized using the\nset_len method.

\n
§Examples
\n
// Allocate vector big enough for 10 elements.\nlet mut v = Vec::with_capacity(10);\n\n// Fill in the first 3 elements.\nlet uninit = v.spare_capacity_mut();\nuninit[0].write(0);\nuninit[1].write(1);\nuninit[2].write(2);\n\n// Mark the first 3 elements of the vector as being initialized.\nunsafe {\n    v.set_len(3);\n}\n\nassert_eq!(&v, &[0, 1, 2]);
\n
source

pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit<T>])

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

Returns vector content as a slice of T, along with the remaining spare\ncapacity of the vector as a slice of MaybeUninit<T>.

\n

The returned spare capacity slice can be used to fill the vector with data\n(e.g. by reading from a file) before marking the data as initialized using\nthe set_len method.

\n

Note that this is a low-level API, which should be used with care for\noptimization purposes. If you need to append data to a Vec\nyou can use push, extend, extend_from_slice,\nextend_from_within, insert, append, resize or\nresize_with, depending on your exact needs.

\n
§Examples
\n
#![feature(vec_split_at_spare)]\n\nlet mut v = vec![1, 1, 2];\n\n// Reserve additional space big enough for 10 elements.\nv.reserve(10);\n\nlet (init, uninit) = v.split_at_spare_mut();\nlet sum = init.iter().copied().sum::<u32>();\n\n// Fill in the next 4 elements.\nuninit[0].write(sum);\nuninit[1].write(sum * 2);\nuninit[2].write(sum * 3);\nuninit[3].write(sum * 4);\n\n// Mark the 4 elements of the vector as being initialized.\nunsafe {\n    let len = v.len();\n    v.set_len(len + 4);\n}\n\nassert_eq!(&v, &[1, 1, 2, 4, 8, 12, 16]);
\n
",0,"sim::make::load::ModifierList"],["
§

impl<T> CloneableAny for Vec<T>
where\n T: 'static + Clone,

","CloneableAny","sim::make::load::ModifierList"],["
source§

impl<T, A> DerefPure for Vec<T, A>
where\n A: Allocator,

","DerefPure","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Eq for Vec<T, A>
where\n T: Eq,\n A: Allocator,

","Eq","sim::make::load::ModifierList"]] +"cli":[["
1.5.0 · source§

impl<T, A> AsMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut [T]

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut<[T]>","cli::ModifierList"],["
1.5.0 · source§

impl<T, A> AsMut<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut Vec<T, A>

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &[T]

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef<[T]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &Vec<T, A>

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Borrow<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow(&self) -> &[T]

Immutably borrows from an owned value. Read more
","Borrow<[T]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow_mut(&mut self) -> &mut [T]

Mutably borrows from an owned value. Read more
","BorrowMut<[T]>","cli::ModifierList"],["
§

impl<T> Clear for Vec<T>

§

fn clear(&mut self)

Clear this make, make it equivalent to newly created object.
","Clear","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Clone for Vec<T, A>
where\n T: Clone,\n A: Allocator + Clone,

source§

fn clone_from(&mut self, source: &Vec<T, A>)

Overwrites the contents of self with a clone of the contents of source.

\n

This method is preferred over simply assigning source.clone() to self,\nas it avoids reallocation if possible. Additionally, if the element type\nT overrides clone_from(), this will reuse the resources of self’s\nelements as well.

\n
§Examples
\n
let x = vec![5, 6, 7];\nlet mut y = vec![8, 9, 10];\nlet yp: *const i32 = y.as_ptr();\n\ny.clone_from(&x);\n\n// The value is the same\nassert_eq!(x, y);\n\n// And no reallocation occurred\nassert_eq!(yp, y.as_ptr());
\n
source§

fn clone(&self) -> Vec<T, A>

Returns a copy of the value. Read more
","Clone","cli::ModifierList"],["
§

impl<T> Codec for Vec<T>
where\n T: Codec + TlsListElement + Debug,

Implement Codec for lists of elements that implement TlsListElement.

\n

TlsListElement provides the size of the length prefix for the list.

\n
§

fn encode(&self, bytes: &mut Vec<u8>)

Function for encoding itself by appending itself to\nthe provided vec of bytes.
§

fn read(r: &mut Reader<'_>) -> Result<Vec<T>, InvalidMessage>

Function for decoding itself from the provided reader\nwill return Some if the decoding was successful or\nNone if it was not.
§

fn get_encoding(&self) -> Vec<u8>

Convenience function for encoding the implementation\ninto a vec and returning it
§

fn read_bytes(bytes: &[u8]) -> Result<Self, InvalidMessage>

Function for wrapping a call to the read function in\na Reader for the slice of bytes provided
","Codec","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Debug for Vec<T, A>
where\n T: Debug,\n A: Allocator,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","cli::ModifierList"],["
1.0.0 · source§

impl<T> Default for Vec<T>

source§

fn default() -> Vec<T>

Creates an empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
","Default","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Deref for Vec<T, A>
where\n A: Allocator,

§

type Target = [T]

The resulting type after dereferencing.
source§

fn deref(&self) -> &[T]

Dereferences the value.
","Deref","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> DerefMut for Vec<T, A>
where\n A: Allocator,

source§

fn deref_mut(&mut self) -> &mut [T]

Mutably dereferences the value.
","DerefMut","cli::ModifierList"],["
source§

impl<'de, T> Deserialize<'de> for Vec<T>
where\n T: Deserialize<'de>,

source§

fn deserialize<D>(\n deserializer: D\n) -> Result<Vec<T>, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Drop for Vec<T, A>
where\n A: Allocator,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
","Drop","cli::ModifierList"],["
1.2.0 · source§

impl<'a, T, A> Extend<&'a T> for Vec<T, A>
where\n T: Copy + 'a,\n A: Allocator,

Extend implementation that copies elements out of references before pushing them onto the Vec.

\n

This implementation is specialized for slice iterators, where it uses copy_from_slice to\nappend the entire slice at once.

\n
source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, _: &'a T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a T>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Extend<T> for Vec<T, A>
where\n A: Allocator,

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","cli::ModifierList"],["
1.0.0 · source§

impl<T> From<&[T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&[T]>","cli::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&[T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3]), vec![1, 2, 3]);
\n
","From<&[T; N]>","cli::ModifierList"],["
1.19.0 · source§

impl<T> From<&mut [T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&mut [T]>","cli::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&mut [T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3]), vec![1, 2, 3]);
\n
","From<&mut [T; N]>","cli::ModifierList"],["
1.44.0 · source§

impl<T, const N: usize> From<[T; N]> for Vec<T>

source§

fn from(s: [T; N]) -> Vec<T>

Allocate a Vec<T> and move s’s items into it.

\n
§Examples
\n
assert_eq!(Vec::from([1, 2, 3]), vec![1, 2, 3]);
\n
","From<[T; N]>","cli::ModifierList"],["
1.5.0 · source§

impl<T, A> From<BinaryHeap<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(heap: BinaryHeap<T, A>) -> Vec<T, A>

Converts a BinaryHeap<T> into a Vec<T>.

\n

This conversion requires no data movement or allocation, and has\nconstant time complexity.

\n
","From>","cli::ModifierList"],["
1.18.0 · source§

impl<T, A> From<Box<[T], A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(s: Box<[T], A>) -> Vec<T, A>

Convert a boxed slice into a vector by transferring ownership of\nthe existing heap allocation.

\n
§Examples
\n
let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice();\nassert_eq!(Vec::from(b), vec![1, 2, 3]);
\n
","From>","cli::ModifierList"],["
1.14.0 · source§

impl<'a, T> From<Cow<'a, [T]>> for Vec<T>
where\n [T]: ToOwned<Owned = Vec<T>>,

source§

fn from(s: Cow<'a, [T]>) -> Vec<T>

Convert a clone-on-write slice into a vector.

\n

If s already owns a Vec<T>, it will be returned directly.\nIf s is borrowing a slice, a new Vec<T> will be allocated and\nfilled by cloning s’s items into it.

\n
§Examples
\n
let o: Cow<'_, [i32]> = Cow::Owned(vec![1, 2, 3]);\nlet b: Cow<'_, [i32]> = Cow::Borrowed(&[1, 2, 3]);\nassert_eq!(Vec::from(o), Vec::from(b));
\n
","From>","cli::ModifierList"],["
1.10.0 · source§

impl<T, A> From<VecDeque<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(other: VecDeque<T, A>) -> Vec<T, A>

Turn a VecDeque<T> into a Vec<T>.

\n

This never needs to re-allocate, but does need to do O(n) data movement if\nthe circular buffer doesn’t happen to be at the beginning of the allocation.

\n
§Examples
\n
use std::collections::VecDeque;\n\n// This one is *O*(1).\nlet deque: VecDeque<_> = (1..5).collect();\nlet ptr = deque.as_slices().0.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);\n\n// This one needs data rearranging.\nlet mut deque: VecDeque<_> = (1..5).collect();\ndeque.push_front(9);\ndeque.push_front(8);\nlet ptr = deque.as_slices().1.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [8, 9, 1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);
\n
","From>","cli::ModifierList"],["
1.0.0 · source§

impl<T> FromIterator<T> for Vec<T>

Collects an iterator into a Vec, commonly called via Iterator::collect()

\n

§Allocation behavior

\n

In general Vec does not guarantee any particular growth or allocation strategy.\nThat also applies to this trait impl.

\n

Note: This section covers implementation details and is therefore exempt from\nstability guarantees.

\n

Vec may use any or none of the following strategies,\ndepending on the supplied iterator:

\n
    \n
  • preallocate based on Iterator::size_hint()\n
      \n
    • and panic if the number of items is outside the provided lower/upper bounds
    • \n
    \n
  • \n
  • use an amortized growth strategy similar to pushing one item at a time
  • \n
  • perform the iteration in-place on the original allocation backing the iterator
  • \n
\n

The last case warrants some attention. It is an optimization that in many cases reduces peak memory\nconsumption and improves cache locality. But when big, short-lived allocations are created,\nonly a small fraction of their items get collected, no further use is made of the spare capacity\nand the resulting Vec is moved into a longer-lived structure, then this can lead to the large\nallocations having their lifetimes unnecessarily extended which can result in increased memory\nfootprint.

\n

In cases where this is an issue, the excess capacity can be discarded with Vec::shrink_to(),\nVec::shrink_to_fit() or by collecting into Box<[T]> instead, which additionally reduces\nthe size of the long-lived struct.

\n\n
static LONG_LIVED: Mutex<Vec<Vec<u16>>> = Mutex::new(Vec::new());\n\nfor i in 0..10 {\n    let big_temporary: Vec<u16> = (0..1024).collect();\n    // discard most items\n    let mut result: Vec<_> = big_temporary.into_iter().filter(|i| i % 100 == 0).collect();\n    // without this a lot of unused capacity might be moved into the global\n    result.shrink_to_fit();\n    LONG_LIVED.lock().unwrap().push(result);\n}
\n
source§

fn from_iter<I>(iter: I) -> Vec<T>
where\n I: IntoIterator<Item = T>,

Creates a value from an iterator. Read more
","FromIterator","cli::ModifierList"],["
§

impl<T> FromParallelIterator<T> for Vec<T>
where\n T: Send,

Collects items from a parallel iterator into a vector.

\n
§

fn from_par_iter<I>(par_iter: I) -> Vec<T>
where\n I: IntoParallelIterator<Item = T>,

Creates an instance of the collection from the parallel iterator par_iter. Read more
","FromParallelIterator","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Hash for Vec<T, A>
where\n T: Hash,\n A: Allocator,

The hash of a vector is the same as that of the corresponding slice,\nas required by the core::borrow::Borrow implementation.

\n\n
use std::hash::BuildHasher;\n\nlet b = std::hash::RandomState::new();\nlet v: Vec<u8> = vec![0xa8, 0x3c, 0x09];\nlet s: &[u8] = &[0xa8, 0x3c, 0x09];\nassert_eq!(b.hash_one(v), b.hash_one(s));
\n
source§

fn hash<H>(&self, state: &mut H)
where\n H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","cli::ModifierList"],["
1.0.0 · source§

impl<T, I, A> Index<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

§

type Output = <I as SliceIndex<[T]>>::Output

The returned type after indexing.
source§

fn index(&self, index: I) -> &<Vec<T, A> as Index<I>>::Output

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","cli::ModifierList"],["
1.0.0 · source§

impl<T, I, A> IndexMut<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

source§

fn index_mut(&mut self, index: I) -> &mut <Vec<T, A> as Index<I>>::Output

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","cli::ModifierList"],["
source§

impl<'de, T, E> IntoDeserializer<'de, E> for Vec<T>
where\n T: IntoDeserializer<'de, E>,\n E: Error,

§

type Deserializer = SeqDeserializer<<Vec<T> as IntoIterator>::IntoIter, E>

The type of the deserializer being converted into.
source§

fn into_deserializer(self) -> <Vec<T> as IntoDeserializer<'de, E>>::Deserializer

Convert this value into a deserializer.
","IntoDeserializer<'de, E>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> IntoIterator for Vec<T, A>
where\n A: Allocator,

source§

fn into_iter(self) -> <Vec<T, A> as IntoIterator>::IntoIter

Creates a consuming iterator, that is, one that moves each value out of\nthe vector (from start to end). The vector cannot be used after calling\nthis.

\n
§Examples
\n
let v = vec![\"a\".to_string(), \"b\".to_string()];\nlet mut v_iter = v.into_iter();\n\nlet first_element: Option<String> = v_iter.next();\n\nassert_eq!(first_element, Some(\"a\".to_string()));\nassert_eq!(v_iter.next(), Some(\"b\".to_string()));\nassert_eq!(v_iter.next(), None);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T, A>

Which kind of iterator are we turning this into?
","IntoIterator","cli::ModifierList"],["
§

impl<T> IntoParallelIterator for Vec<T>
where\n T: Send,

§

type Item = T

The type of item that the parallel iterator will produce.
§

type Iter = IntoIter<T>

The parallel iterator type that will be created.
§

fn into_par_iter(self) -> <Vec<T> as IntoParallelIterator>::Iter

Converts self into a parallel iterator. Read more
","IntoParallelIterator","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Ord for Vec<T, A>
where\n T: Ord,\n A: Allocator,

Implements ordering of vectors, lexicographically.

\n
source§

fn cmp(&self, other: &Vec<T, A>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","cli::ModifierList"],["
§

impl<'a, T> ParallelExtend<&'a T> for Vec<T>
where\n T: 'a + Copy + Send + Sync,

Extends a vector with copied items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = &'a T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend<&'a T>","cli::ModifierList"],["
§

impl<T> ParallelExtend<T> for Vec<T>
where\n T: Send,

Extends a vector with items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<&[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U; N]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&mut [U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&mut [U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&mut [U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&mut [U]>","cli::ModifierList"],["
1.48.0 · source§

impl<T, U, A> PartialEq<[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U; N]>","cli::ModifierList"],["
1.0.0 · source§

impl<T, U, A1, A2> PartialEq<Vec<U, A2>> for Vec<T, A1>
where\n A1: Allocator,\n A2: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &Vec<U, A2>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &Vec<U, A2>) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq>","cli::ModifierList"],["
1.0.0 · source§

impl<T, A1, A2> PartialOrd<Vec<T, A2>> for Vec<T, A1>
where\n T: PartialOrd,\n A1: Allocator,\n A2: Allocator,

Implements comparison of vectors, lexicographically.

\n
source§

fn partial_cmp(&self, other: &Vec<T, A2>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd>","cli::ModifierList"],["
source§

impl<T> Serialize for Vec<T>
where\n T: Serialize,

source§

fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","cli::ModifierList"],["
§

impl<T> Sink<T> for Vec<T>

§

type Error = Infallible

The type of value produced by the sink when an error occurs.
§

fn poll_ready(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Attempts to prepare the Sink to receive a value. Read more
§

fn start_send(\n self: Pin<&mut Vec<T>>,\n item: T\n) -> Result<(), <Vec<T> as Sink<T>>::Error>

Begin the process of sending a value to the sink.\nEach call to this function must be preceded by a successful call to\npoll_ready which returned Poll::Ready(Ok(())). Read more
§

fn poll_flush(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output from this sink. Read more
§

fn poll_close(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output and close this sink, if necessary. Read more
","Sink","cli::ModifierList"],["
source§

impl<T> Vec<T>

1.0.0 (const: 1.39.0) · source

pub const fn new() -> Vec<T>

Constructs a new, empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::new();
\n
1.0.0 · source

pub fn with_capacity(capacity: usize) -> Vec<T>

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<()>::with_capacity(10);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity(capacity: usize) -> Result<Vec<T>, TryReserveError>

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

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
1.0.0 · source

pub unsafe fn from_raw_parts(\n ptr: *mut T,\n length: usize,\n capacity: usize\n) -> Vec<T>

Creates a Vec<T> directly from a pointer, a length, and a capacity.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must have been allocated using the global allocator, such as via\nthe alloc::alloc function.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to be the capacity that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is normally not safe\nto build a Vec<u8> from a pointer to a C char array with length\nsize_t, doing so is only safe if the array was initially allocated by\na Vec or String.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1. To avoid\nthese issues, it is often preferable to do casting/transmuting using\nslice::from_raw_parts instead.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
use std::ptr;\nuse std::mem;\n\nlet v = vec![1, 2, 3];\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts(p, len, cap);\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
use std::alloc::{alloc, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = alloc(layout).cast::<u32>();\n        if mem.is_null() {\n            return;\n        }\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts(mem, 1, 16)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: Clone,\n A: Allocator,

1.5.0 · source

pub fn resize(&mut self, new_len: usize, value: T)

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with value.\nIf new_len is less than len, the Vec is simply truncated.

\n

This method requires T to implement Clone,\nin order to be able to clone the passed value.\nIf you need more flexibility (or want to rely on Default instead of\nClone), use Vec::resize_with.\nIf you only need to resize to a smaller size, use Vec::truncate.

\n
§Examples
\n
let mut vec = vec![\"hello\"];\nvec.resize(3, \"world\");\nassert_eq!(vec, [\"hello\", \"world\", \"world\"]);\n\nlet mut vec = vec![1, 2, 3, 4];\nvec.resize(2, 0);\nassert_eq!(vec, [1, 2]);
\n
1.6.0 · source

pub fn extend_from_slice(&mut self, other: &[T])

Clones and appends all elements in a slice to the Vec.

\n

Iterates over the slice other, clones each element, and then appends\nit to this Vec. The other slice is traversed in-order.

\n

Note that this function is same as extend except that it is\nspecialized to work with slices instead. If and when Rust gets\nspecialization this function will likely be deprecated (but still\navailable).

\n
§Examples
\n
let mut vec = vec![1];\nvec.extend_from_slice(&[2, 3, 4]);\nassert_eq!(vec, [1, 2, 3, 4]);
\n
1.53.0 · source

pub fn extend_from_within<R>(&mut self, src: R)
where\n R: RangeBounds<usize>,

Copies elements from src range to the end of the vector.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut vec = vec![0, 1, 2, 3, 4];\n\nvec.extend_from_within(2..);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4]);\n\nvec.extend_from_within(..2);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1]);\n\nvec.extend_from_within(4..8);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1, 4, 2, 3, 4]);
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: PartialEq,\n A: Allocator,

1.0.0 · source

pub fn dedup(&mut self)

Removes consecutive repeated elements in the vector according to the\nPartialEq trait implementation.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![1, 2, 2, 3, 2];\n\nvec.dedup();\n\nassert_eq!(vec, [1, 2, 3, 2]);
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

1.21.0 · source

pub fn splice<R, I>(\n &mut self,\n range: R,\n replace_with: I\n) -> Splice<'_, <I as IntoIterator>::IntoIter, A>
where\n R: RangeBounds<usize>,\n I: IntoIterator<Item = T>,

Creates a splicing iterator that replaces the specified range in the vector\nwith the given replace_with iterator and yields the removed items.\nreplace_with does not need to be the same length as range.

\n

range is removed even if the iterator is not consumed until the end.

\n

It is unspecified how many elements are removed from the vector\nif the Splice value is leaked.

\n

The input iterator replace_with is only consumed when the Splice value is dropped.

\n

This is optimal if:

\n
    \n
  • The tail (elements in the vector after range) is empty,
  • \n
  • or replace_with yields fewer or equal elements than range’s length
  • \n
  • or the lower bound of its size_hint() is exact.
  • \n
\n

Otherwise, a temporary vector is allocated and the tail is moved twice.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3, 4];\nlet new = [7, 8, 9];\nlet u: Vec<_> = v.splice(1..3, new).collect();\nassert_eq!(v, &[1, 7, 8, 9, 4]);\nassert_eq!(u, &[2, 3]);
\n
source

pub fn extract_if<F>(&mut self, filter: F) -> ExtractIf<'_, T, F, A>
where\n F: FnMut(&mut T) -> bool,

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

Creates an iterator which uses a closure to determine if an element should be removed.

\n

If the closure returns true, then the element is removed and yielded.\nIf the closure returns false, the element will remain in the vector and will not be yielded\nby the iterator.

\n

If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

\n

Using this method is equivalent to the following code:

\n\n
let mut i = 0;\nwhile i < vec.len() {\n    if some_predicate(&mut vec[i]) {\n        let val = vec.remove(i);\n        // your code here\n    } else {\n        i += 1;\n    }\n}\n
\n

But extract_if is easier to use. extract_if is also more efficient,\nbecause it can backshift the elements of the array in bulk.

\n

Note that extract_if also lets you mutate every element in the filter closure,\nregardless of whether you choose to keep or remove it.

\n
§Examples
\n

Splitting an array into evens and odds, reusing the original allocation:

\n\n
#![feature(extract_if)]\nlet mut numbers = vec![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];\n\nlet evens = numbers.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();\nlet odds = numbers;\n\nassert_eq!(evens, vec![2, 4, 6, 8, 14]);\nassert_eq!(odds, vec![1, 3, 5, 9, 11, 13, 15]);
\n
",0,"cli::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

source

pub const fn new_in(alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec: Vec<i32, _> = Vec::new_in(System);
\n
source

pub fn with_capacity_in(capacity: usize, alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T, A> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec = Vec::with_capacity_in(10, System);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<(), System>::with_capacity_in(10, System);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity_in(\n capacity: usize,\n alloc: A\n) -> Result<Vec<T, A>, TryReserveError>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
source

pub unsafe fn from_raw_parts_in(\n ptr: *mut T,\n length: usize,\n capacity: usize,\n alloc: A\n) -> Vec<T, A>

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

Creates a Vec<T, A> directly from a pointer, a length, a capacity,\nand an allocator.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must be currently allocated via the given allocator alloc.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to fit the layout size that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T, A>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is not safe\nto build a Vec<u8> from a pointer to a C char array with length size_t.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nuse std::ptr;\nuse std::mem;\n\nlet mut v = Vec::with_capacity_in(3, System);\nv.push(1);\nv.push(2);\nv.push(3);\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\nlet alloc = v.allocator();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts_in(p, len, cap, alloc.clone());\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
#![feature(allocator_api)]\n\nuse std::alloc::{AllocError, Allocator, Global, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = match Global.allocate(layout) {\n            Ok(mem) => mem.cast::<u32>().as_ptr(),\n            Err(AllocError) => return,\n        };\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts_in(mem, 1, 16, Global)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
source

pub fn into_raw_parts(self) -> (*mut T, usize, usize)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity).

\n

Returns the raw pointer to the underlying data, the length of\nthe vector (in elements), and the allocated capacity of the\ndata (in elements). These are the same arguments in the same\norder as the arguments to from_raw_parts.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(vec_into_raw_parts)]\nlet v: Vec<i32> = vec![-1, 0, 1];\n\nlet (ptr, len, cap) = v.into_raw_parts();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts(ptr, len, cap)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
source

pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity, allocator).

\n

Returns the raw pointer to the underlying data, the length of the vector (in elements),\nthe allocated capacity of the data (in elements), and the allocator. These are the same\narguments in the same order as the arguments to from_raw_parts_in.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts_in function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(allocator_api, vec_into_raw_parts)]\n\nuse std::alloc::System;\n\nlet mut v: Vec<i32, System> = Vec::new_in(System);\nv.push(-1);\nv.push(0);\nv.push(1);\n\nlet (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts_in(ptr, len, cap, alloc)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
1.0.0 · source

pub fn capacity(&self) -> usize

Returns the total number of elements the vector can hold without\nreallocating.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::with_capacity(10);\nvec.push(42);\nassert!(vec.capacity() >= 10);
\n
1.0.0 · source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to\nspeculatively avoid frequent reallocations. After calling reserve,\ncapacity will be greater than or equal to self.len() + additional.\nDoes nothing if capacity is already sufficient.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve(10);\nassert!(vec.capacity() >= 11);
\n
1.0.0 · source

pub fn reserve_exact(&mut self, additional: usize)

Reserves the minimum capacity for at least additional more elements to\nbe inserted in the given Vec<T>. Unlike reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling reserve_exact, capacity will be greater than or equal to\nself.len() + additional. Does nothing if the capacity is already\nsufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer reserve if future insertions are expected.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve_exact(10);\nassert!(vec.capacity() >= 11);
\n
1.57.0 · source

pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>

Tries to reserve capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to speculatively avoid\nfrequent reallocations. After calling try_reserve, capacity will be\ngreater than or equal to self.len() + additional if it returns\nOk(()). Does nothing if capacity is already sufficient. This method\npreserves the contents even if an error occurs.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.57.0 · source

pub fn try_reserve_exact(\n &mut self,\n additional: usize\n) -> Result<(), TryReserveError>

Tries to reserve the minimum capacity for at least additional\nelements to be inserted in the given Vec<T>. Unlike try_reserve,\nthis will not deliberately over-allocate to speculatively avoid frequent\nallocations. After calling try_reserve_exact, capacity will be greater\nthan or equal to self.len() + additional if it returns Ok(()).\nDoes nothing if the capacity is already sufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer try_reserve if future insertions are expected.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve_exact(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.0.0 · source

pub fn shrink_to_fit(&mut self)

Shrinks the capacity of the vector as much as possible.

\n

The behavior of this method depends on the allocator, which may either shrink the vector\nin-place or reallocate. The resulting vector might still have some excess capacity, just as\nis the case for with_capacity. See Allocator::shrink for more details.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to_fit();\nassert!(vec.capacity() >= 3);
\n
1.56.0 · source

pub fn shrink_to(&mut self, min_capacity: usize)

Shrinks the capacity of the vector with a lower bound.

\n

The capacity will remain at least as large as both the length\nand the supplied value.

\n

If the current capacity is less than the lower limit, this is a no-op.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to(4);\nassert!(vec.capacity() >= 4);\nvec.shrink_to(0);\nassert!(vec.capacity() >= 3);
\n
1.0.0 · source

pub fn into_boxed_slice(self) -> Box<[T], A>

Converts the vector into Box<[T]>.

\n

Before doing the conversion, this method discards excess capacity like shrink_to_fit.

\n
§Examples
\n
let v = vec![1, 2, 3];\n\nlet slice = v.into_boxed_slice();
\n

Any excess capacity is removed:

\n\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\n\nassert!(vec.capacity() >= 10);\nlet slice = vec.into_boxed_slice();\nassert_eq!(slice.into_vec().capacity(), 3);
\n
1.0.0 · source

pub fn truncate(&mut self, len: usize)

Shortens the vector, keeping the first len elements and dropping\nthe rest.

\n

If len is greater or equal to the vector’s current length, this has\nno effect.

\n

The drain method can emulate truncate, but causes the excess\nelements to be returned instead of dropped.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n

Truncating a five element vector to two elements:

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nvec.truncate(2);\nassert_eq!(vec, [1, 2]);
\n

No truncation occurs when len is greater than the vector’s current\nlength:

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(8);\nassert_eq!(vec, [1, 2, 3]);
\n

Truncating when len == 0 is equivalent to calling the clear\nmethod.

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(0);\nassert_eq!(vec, []);
\n
1.7.0 · source

pub fn as_slice(&self) -> &[T]

Extracts a slice containing the entire vector.

\n

Equivalent to &s[..].

\n
§Examples
\n
use std::io::{self, Write};\nlet buffer = vec![1, 2, 3, 5, 8];\nio::sink().write(buffer.as_slice()).unwrap();
\n
1.7.0 · source

pub fn as_mut_slice(&mut self) -> &mut [T]

Extracts a mutable slice of the entire vector.

\n

Equivalent to &mut s[..].

\n
§Examples
\n
use std::io::{self, Read};\nlet mut buffer = vec![0; 3];\nio::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap();
\n
1.37.0 · source

pub fn as_ptr(&self) -> *const T

Returns a raw pointer to the vector’s buffer, or a dangling raw pointer\nvalid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

The caller must also ensure that the memory the pointer (non-transitively) points to\nis never written to (except inside an UnsafeCell) using this pointer or any pointer\nderived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize mutable references to the slice,\nor mutable references to specific elements you are planning on accessing through this pointer,\nas well as writing to those elements, may still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
let x = vec![1, 2, 4];\nlet x_ptr = x.as_ptr();\n\nunsafe {\n    for i in 0..x.len() {\n        assert_eq!(*x_ptr.add(i), 1 << i);\n    }\n}
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0, 1, 2];\n    let ptr1 = v.as_ptr();\n    let _ = ptr1.read();\n    let ptr2 = v.as_mut_ptr().offset(2);\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`\n    // because it mutated a different element:\n    let _ = ptr1.read();\n}
\n
1.37.0 · source

pub fn as_mut_ptr(&mut self) -> *mut T

Returns an unsafe mutable pointer to the vector’s buffer, or a dangling\nraw pointer valid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize references to the slice,\nor references to specific elements you are planning on accessing through this pointer,\nmay still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
// Allocate vector big enough for 4 elements.\nlet size = 4;\nlet mut x: Vec<i32> = Vec::with_capacity(size);\nlet x_ptr = x.as_mut_ptr();\n\n// Initialize elements via raw pointer writes, then set length.\nunsafe {\n    for i in 0..size {\n        *x_ptr.add(i) = i as i32;\n    }\n    x.set_len(size);\n}\nassert_eq!(&*x, &[0, 1, 2, 3]);
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0];\n    let ptr1 = v.as_mut_ptr();\n    ptr1.write(1);\n    let ptr2 = v.as_mut_ptr();\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`:\n    ptr1.write(3);\n}
\n
source

pub fn allocator(&self) -> &A

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

Returns a reference to the underlying allocator.

\n
1.0.0 · source

pub unsafe fn set_len(&mut self, new_len: usize)

Forces the length of the vector to new_len.

\n

This is a low-level operation that maintains none of the normal\ninvariants of the type. Normally changing the length of a vector\nis done using one of the safe operations instead, such as\ntruncate, resize, extend, or clear.

\n
§Safety
\n
    \n
  • new_len must be less than or equal to capacity().
  • \n
  • The elements at old_len..new_len must be initialized.
  • \n
\n
§Examples
\n

This method can be useful for situations in which the vector\nis serving as a buffer for other code, particularly over FFI:

\n\n
pub fn get_dictionary(&self) -> Option<Vec<u8>> {\n    // Per the FFI method's docs, \"32768 bytes is always enough\".\n    let mut dict = Vec::with_capacity(32_768);\n    let mut dict_length = 0;\n    // SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that:\n    // 1. `dict_length` elements were initialized.\n    // 2. `dict_length` <= the capacity (32_768)\n    // which makes `set_len` safe to call.\n    unsafe {\n        // Make the FFI call...\n        let r = deflateGetDictionary(self.strm, dict.as_mut_ptr(), &mut dict_length);\n        if r == Z_OK {\n            // ...and update the length to what was initialized.\n            dict.set_len(dict_length);\n            Some(dict)\n        } else {\n            None\n        }\n    }\n}
\n

While the following example is sound, there is a memory leak since\nthe inner vectors were not freed prior to the set_len call:

\n\n
let mut vec = vec![vec![1, 0, 0],\n                   vec![0, 1, 0],\n                   vec![0, 0, 1]];\n// SAFETY:\n// 1. `old_len..0` is empty so no elements need to be initialized.\n// 2. `0 <= capacity` always holds whatever `capacity` is.\nunsafe {\n    vec.set_len(0);\n}
\n

Normally, here, one would use clear instead to correctly drop\nthe contents and thus not leak memory.

\n
1.0.0 · source

pub fn swap_remove(&mut self, index: usize) -> T

Removes an element from the vector and returns it.

\n

The removed element is replaced by the last element of the vector.

\n

This does not preserve ordering of the remaining elements, but is O(1).\nIf you need to preserve the element order, use remove instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![\"foo\", \"bar\", \"baz\", \"qux\"];\n\nassert_eq!(v.swap_remove(1), \"bar\");\nassert_eq!(v, [\"foo\", \"qux\", \"baz\"]);\n\nassert_eq!(v.swap_remove(0), \"foo\");\nassert_eq!(v, [\"baz\", \"qux\"]);
\n
1.0.0 · source

pub fn insert(&mut self, index: usize, element: T)

Inserts an element at position index within the vector, shifting all\nelements after it to the right.

\n
§Panics
\n

Panics if index > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.insert(1, 4);\nassert_eq!(vec, [1, 4, 2, 3]);\nvec.insert(4, 5);\nassert_eq!(vec, [1, 4, 2, 3, 5]);
\n
§Time complexity
\n

Takes O(Vec::len) time. All items after the insertion index must be\nshifted to the right. In the worst case, all elements are shifted when\nthe insertion index is 0.

\n
1.0.0 · source

pub fn remove(&mut self, index: usize) -> T

Removes and returns the element at position index within the vector,\nshifting all elements after it to the left.

\n

Note: Because this shifts over the remaining elements, it has a\nworst-case performance of O(n). If you don’t need the order of elements\nto be preserved, use swap_remove instead. If you’d like to remove\nelements from the beginning of the Vec, consider using\nVecDeque::pop_front instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nassert_eq!(v.remove(1), 2);\nassert_eq!(v, [1, 3]);
\n
1.0.0 · source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(&T) -> bool,

Retains only the elements specified by the predicate.

\n

In other words, remove all elements e for which f(&e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain(|&x| x % 2 == 0);\nassert_eq!(vec, [2, 4]);
\n

Because the elements are visited exactly once in the original order,\nexternal state may be used to decide which elements to keep.

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nlet keep = [false, true, true, false, true];\nlet mut iter = keep.iter();\nvec.retain(|_| *iter.next().unwrap());\nassert_eq!(vec, [2, 3, 5]);
\n
1.61.0 · source

pub fn retain_mut<F>(&mut self, f: F)
where\n F: FnMut(&mut T) -> bool,

Retains only the elements specified by the predicate, passing a mutable reference to it.

\n

In other words, remove all elements e such that f(&mut e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain_mut(|x| if *x <= 3 {\n    *x += 1;\n    true\n} else {\n    false\n});\nassert_eq!(vec, [2, 3, 4]);
\n
1.16.0 · source

pub fn dedup_by_key<F, K>(&mut self, key: F)
where\n F: FnMut(&mut T) -> K,\n K: PartialEq,

Removes all but the first of consecutive elements in the vector that resolve to the same\nkey.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![10, 20, 21, 30, 20];\n\nvec.dedup_by_key(|i| *i / 10);\n\nassert_eq!(vec, [10, 20, 30, 20]);
\n
1.16.0 · source

pub fn dedup_by<F>(&mut self, same_bucket: F)
where\n F: FnMut(&mut T, &mut T) -> bool,

Removes all but the first of consecutive elements in the vector satisfying a given equality\nrelation.

\n

The same_bucket function is passed references to two elements from the vector and\nmust determine if the elements compare equal. The elements are passed in opposite order\nfrom their order in the slice, so if same_bucket(a, b) returns true, a is removed.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![\"foo\", \"bar\", \"Bar\", \"baz\", \"bar\"];\n\nvec.dedup_by(|a, b| a.eq_ignore_ascii_case(b));\n\nassert_eq!(vec, [\"foo\", \"bar\", \"baz\", \"bar\"]);
\n
1.0.0 · source

pub fn push(&mut self, value: T)

Appends an element to the back of a collection.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2];\nvec.push(3);\nassert_eq!(vec, [1, 2, 3]);
\n
§Time complexity
\n

Takes amortized O(1) time. If the vector’s length would exceed its\ncapacity after the push, O(capacity) time is taken to copy the\nvector’s elements to a larger allocation. This expensive operation is\noffset by the capacity O(1) insertions it allows.

\n
source

pub fn push_within_capacity(&mut self, value: T) -> Result<(), T>

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

Appends an element if there is sufficient spare capacity, otherwise an error is returned\nwith the element.

\n

Unlike push this method will not reallocate when there’s insufficient capacity.\nThe caller should use reserve or try_reserve to ensure that there is enough capacity.

\n
§Examples
\n

A manual, panic-free alternative to FromIterator:

\n\n
#![feature(vec_push_within_capacity)]\n\nuse std::collections::TryReserveError;\nfn from_iter_fallible<T>(iter: impl Iterator<Item=T>) -> Result<Vec<T>, TryReserveError> {\n    let mut vec = Vec::new();\n    for value in iter {\n        if let Err(value) = vec.push_within_capacity(value) {\n            vec.try_reserve(1)?;\n            // this cannot fail, the previous line either returned or added at least 1 free slot\n            let _ = vec.push_within_capacity(value);\n        }\n    }\n    Ok(vec)\n}\nassert_eq!(from_iter_fallible(0..100), Ok(Vec::from_iter(0..100)));
\n
§Time complexity
\n

Takes O(1) time.

\n
1.0.0 · source

pub fn pop(&mut self) -> Option<T>

Removes the last element from a vector and returns it, or None if it\nis empty.

\n

If you’d like to pop the first element, consider using\nVecDeque::pop_front instead.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nassert_eq!(vec.pop(), Some(3));\nassert_eq!(vec, [1, 2]);
\n
§Time complexity
\n

Takes O(1) time.

\n
source

pub fn pop_if<F>(&mut self, f: F) -> Option<T>
where\n F: FnOnce(&mut T) -> bool,

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

Removes and returns the last element in a vector if the predicate\nreturns true, or None if the predicate returns false or the vector\nis empty.

\n
§Examples
\n
#![feature(vec_pop_if)]\n\nlet mut vec = vec![1, 2, 3, 4];\nlet pred = |x: &mut i32| *x % 2 == 0;\n\nassert_eq!(vec.pop_if(pred), Some(4));\nassert_eq!(vec, [1, 2, 3]);\nassert_eq!(vec.pop_if(pred), None);
\n
1.4.0 · source

pub fn append(&mut self, other: &mut Vec<T, A>)

Moves all the elements of other into self, leaving other empty.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet mut vec2 = vec![4, 5, 6];\nvec.append(&mut vec2);\nassert_eq!(vec, [1, 2, 3, 4, 5, 6]);\nassert_eq!(vec2, []);
\n
1.6.0 · source

pub fn drain<R>(&mut self, range: R) -> Drain<'_, T, A>
where\n R: RangeBounds<usize>,

Removes the specified range from the vector in bulk, returning all\nremoved elements as an iterator. If the iterator is dropped before\nbeing fully consumed, it drops the remaining removed elements.

\n

The returned iterator keeps a mutable borrow on the vector to optimize\nits implementation.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Leaking
\n

If the returned iterator goes out of scope without being dropped (due to\nmem::forget, for example), the vector may have lost and leaked\nelements arbitrarily, including elements outside the range.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nlet u: Vec<_> = v.drain(1..).collect();\nassert_eq!(v, &[1]);\nassert_eq!(u, &[2, 3]);\n\n// A full range clears the vector, like `clear()` does\nv.drain(..);\nassert_eq!(v, &[]);
\n
1.0.0 · source

pub fn clear(&mut self)

Clears the vector, removing all values.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\n\nv.clear();\n\nassert!(v.is_empty());
\n
1.0.0 · source

pub fn len(&self) -> usize

Returns the number of elements in the vector, also referred to\nas its ‘length’.

\n
§Examples
\n
let a = vec![1, 2, 3];\nassert_eq!(a.len(), 3);
\n
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if the vector contains no elements.

\n
§Examples
\n
let mut v = Vec::new();\nassert!(v.is_empty());\n\nv.push(1);\nassert!(!v.is_empty());
\n
1.4.0 · source

pub fn split_off(&mut self, at: usize) -> Vec<T, A>
where\n A: Clone,

Splits the collection into two at the given index.

\n

Returns a newly allocated vector containing the elements in the range\n[at, len). After the call, the original vector will be left containing\nthe elements [0, at) with its previous capacity unchanged.

\n
    \n
  • If you want to take ownership of the entire contents and capacity of\nthe vector, see mem::take or mem::replace.
  • \n
  • If you don’t need the returned vector at all, see Vec::truncate.
  • \n
  • If you want to take ownership of an arbitrary subslice, or you don’t\nnecessarily want to store the removed items in a vector, see Vec::drain.
  • \n
\n
§Panics
\n

Panics if at > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet vec2 = vec.split_off(1);\nassert_eq!(vec, [1]);\nassert_eq!(vec2, [2, 3]);
\n
1.33.0 · source

pub fn resize_with<F>(&mut self, new_len: usize, f: F)
where\n F: FnMut() -> T,

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with the result of\ncalling the closure f. The return values from f will end up\nin the Vec in the order they have been generated.

\n

If new_len is less than len, the Vec is simply truncated.

\n

This method uses a closure to create new values on every push. If\nyou’d rather Clone a given value, use Vec::resize. If you\nwant to use the Default trait to generate values, you can\npass Default::default as the second argument.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.resize_with(5, Default::default);\nassert_eq!(vec, [1, 2, 3, 0, 0]);\n\nlet mut vec = vec![];\nlet mut p = 1;\nvec.resize_with(4, || { p *= 2; p });\nassert_eq!(vec, [2, 4, 8, 16]);
\n
1.47.0 · source

pub fn leak<'a>(self) -> &'a mut [T]
where\n A: 'a,

Consumes and leaks the Vec, returning a mutable reference to the contents,\n&'a mut [T]. Note that the type T must outlive the chosen lifetime\n'a. If the type has only static references, or none at all, then this\nmay be chosen to be 'static.

\n

As of Rust 1.57, this method does not reallocate or shrink the Vec,\nso the leaked allocation may include unused capacity that is not part\nof the returned slice.

\n

This function is mainly useful for data that lives for the remainder of\nthe program’s life. Dropping the returned reference will cause a memory\nleak.

\n
§Examples
\n

Simple usage:

\n\n
let x = vec![1, 2, 3];\nlet static_ref: &'static mut [usize] = x.leak();\nstatic_ref[0] += 1;\nassert_eq!(static_ref, &[2, 2, 3]);
\n
1.60.0 · source

pub fn spare_capacity_mut(&mut self) -> &mut [MaybeUninit<T>]

Returns the remaining spare capacity of the vector as a slice of\nMaybeUninit<T>.

\n

The returned slice can be used to fill the vector with data (e.g. by\nreading from a file) before marking the data as initialized using the\nset_len method.

\n
§Examples
\n
// Allocate vector big enough for 10 elements.\nlet mut v = Vec::with_capacity(10);\n\n// Fill in the first 3 elements.\nlet uninit = v.spare_capacity_mut();\nuninit[0].write(0);\nuninit[1].write(1);\nuninit[2].write(2);\n\n// Mark the first 3 elements of the vector as being initialized.\nunsafe {\n    v.set_len(3);\n}\n\nassert_eq!(&v, &[0, 1, 2]);
\n
source

pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit<T>])

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

Returns vector content as a slice of T, along with the remaining spare\ncapacity of the vector as a slice of MaybeUninit<T>.

\n

The returned spare capacity slice can be used to fill the vector with data\n(e.g. by reading from a file) before marking the data as initialized using\nthe set_len method.

\n

Note that this is a low-level API, which should be used with care for\noptimization purposes. If you need to append data to a Vec\nyou can use push, extend, extend_from_slice,\nextend_from_within, insert, append, resize or\nresize_with, depending on your exact needs.

\n
§Examples
\n
#![feature(vec_split_at_spare)]\n\nlet mut v = vec![1, 1, 2];\n\n// Reserve additional space big enough for 10 elements.\nv.reserve(10);\n\nlet (init, uninit) = v.split_at_spare_mut();\nlet sum = init.iter().copied().sum::<u32>();\n\n// Fill in the next 4 elements.\nuninit[0].write(sum);\nuninit[1].write(sum * 2);\nuninit[2].write(sum * 3);\nuninit[3].write(sum * 4);\n\n// Mark the 4 elements of the vector as being initialized.\nunsafe {\n    let len = v.len();\n    v.set_len(len + 4);\n}\n\nassert_eq!(&v, &[1, 1, 2, 4, 8, 12, 16]);
\n
",0,"cli::ModifierList"],["
source§

impl<T> CloneableAny for Vec<T>
where\n T: 'static + Clone,

","CloneableAny","cli::ModifierList"],["
source§

impl<T, A> DerefPure for Vec<T, A>
where\n A: Allocator,

","DerefPure","cli::ModifierList"],["
1.0.0 · source§

impl<T, A> Eq for Vec<T, A>
where\n T: Eq,\n A: Allocator,

","Eq","cli::ModifierList"]], +"sim":[["
1.5.0 · source§

impl<T, A> AsMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut [T]

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut<[T]>","sim::make::load::ModifierList"],["
1.5.0 · source§

impl<T, A> AsMut<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_mut(&mut self) -> &mut Vec<T, A>

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &[T]

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef<[T]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> AsRef<Vec<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn as_ref(&self) -> &Vec<T, A>

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Borrow<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow(&self) -> &[T]

Immutably borrows from an owned value. Read more
","Borrow<[T]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> BorrowMut<[T]> for Vec<T, A>
where\n A: Allocator,

source§

fn borrow_mut(&mut self) -> &mut [T]

Mutably borrows from an owned value. Read more
","BorrowMut<[T]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Clone for Vec<T, A>
where\n T: Clone,\n A: Allocator + Clone,

source§

fn clone_from(&mut self, source: &Vec<T, A>)

Overwrites the contents of self with a clone of the contents of source.

\n

This method is preferred over simply assigning source.clone() to self,\nas it avoids reallocation if possible. Additionally, if the element type\nT overrides clone_from(), this will reuse the resources of self’s\nelements as well.

\n
§Examples
\n
let x = vec![5, 6, 7];\nlet mut y = vec![8, 9, 10];\nlet yp: *const i32 = y.as_ptr();\n\ny.clone_from(&x);\n\n// The value is the same\nassert_eq!(x, y);\n\n// And no reallocation occurred\nassert_eq!(yp, y.as_ptr());
\n
source§

fn clone(&self) -> Vec<T, A>

Returns a copy of the value. Read more
","Clone","sim::make::load::ModifierList"],["
§

impl<T> Codec for Vec<T>
where\n T: Codec + TlsListElement + Debug,

Implement Codec for lists of elements that implement TlsListElement.

\n

TlsListElement provides the size of the length prefix for the list.

\n
§

fn encode(&self, bytes: &mut Vec<u8>)

Function for encoding itself by appending itself to\nthe provided vec of bytes.
§

fn read(r: &mut Reader<'_>) -> Result<Vec<T>, InvalidMessage>

Function for decoding itself from the provided reader\nwill return Some if the decoding was successful or\nNone if it was not.
§

fn get_encoding(&self) -> Vec<u8>

Convenience function for encoding the implementation\ninto a vec and returning it
§

fn read_bytes(bytes: &[u8]) -> Result<Self, InvalidMessage>

Function for wrapping a call to the read function in\na Reader for the slice of bytes provided
","Codec","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Debug for Vec<T, A>
where\n T: Debug,\n A: Allocator,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T> Default for Vec<T>

source§

fn default() -> Vec<T>

Creates an empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
","Default","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Deref for Vec<T, A>
where\n A: Allocator,

§

type Target = [T]

The resulting type after dereferencing.
source§

fn deref(&self) -> &[T]

Dereferences the value.
","Deref","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> DerefMut for Vec<T, A>
where\n A: Allocator,

source§

fn deref_mut(&mut self) -> &mut [T]

Mutably dereferences the value.
","DerefMut","sim::make::load::ModifierList"],["
source§

impl<'de, T> Deserialize<'de> for Vec<T>
where\n T: Deserialize<'de>,

source§

fn deserialize<D>(\n deserializer: D\n) -> Result<Vec<T>, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Drop for Vec<T, A>
where\n A: Allocator,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
","Drop","sim::make::load::ModifierList"],["
1.2.0 · source§

impl<'a, T, A> Extend<&'a T> for Vec<T, A>
where\n T: Copy + 'a,\n A: Allocator,

Extend implementation that copies elements out of references before pushing them onto the Vec.

\n

This implementation is specialized for slice iterators, where it uses copy_from_slice to\nappend the entire slice at once.

\n
source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, _: &'a T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a T>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Extend<T> for Vec<T, A>
where\n A: Allocator,

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = T>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: T)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T> From<&[T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&[T]>","sim::make::load::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&[T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &[T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&[1, 2, 3]), vec![1, 2, 3]);
\n
","From<&[T; N]>","sim::make::load::ModifierList"],["
1.19.0 · source§

impl<T> From<&mut [T]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]);
\n
","From<&mut [T]>","sim::make::load::ModifierList"],["
1.74.0 · source§

impl<T, const N: usize> From<&mut [T; N]> for Vec<T>
where\n T: Clone,

source§

fn from(s: &mut [T; N]) -> Vec<T>

Allocate a Vec<T> and fill it by cloning s’s items.

\n
§Examples
\n
assert_eq!(Vec::from(&mut [1, 2, 3]), vec![1, 2, 3]);
\n
","From<&mut [T; N]>","sim::make::load::ModifierList"],["
1.44.0 · source§

impl<T, const N: usize> From<[T; N]> for Vec<T>

source§

fn from(s: [T; N]) -> Vec<T>

Allocate a Vec<T> and move s’s items into it.

\n
§Examples
\n
assert_eq!(Vec::from([1, 2, 3]), vec![1, 2, 3]);
\n
","From<[T; N]>","sim::make::load::ModifierList"],["
1.5.0 · source§

impl<T, A> From<BinaryHeap<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(heap: BinaryHeap<T, A>) -> Vec<T, A>

Converts a BinaryHeap<T> into a Vec<T>.

\n

This conversion requires no data movement or allocation, and has\nconstant time complexity.

\n
","From>","sim::make::load::ModifierList"],["
1.18.0 · source§

impl<T, A> From<Box<[T], A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(s: Box<[T], A>) -> Vec<T, A>

Convert a boxed slice into a vector by transferring ownership of\nthe existing heap allocation.

\n
§Examples
\n
let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice();\nassert_eq!(Vec::from(b), vec![1, 2, 3]);
\n
","From>","sim::make::load::ModifierList"],["
1.14.0 · source§

impl<'a, T> From<Cow<'a, [T]>> for Vec<T>
where\n [T]: ToOwned<Owned = Vec<T>>,

source§

fn from(s: Cow<'a, [T]>) -> Vec<T>

Convert a clone-on-write slice into a vector.

\n

If s already owns a Vec<T>, it will be returned directly.\nIf s is borrowing a slice, a new Vec<T> will be allocated and\nfilled by cloning s’s items into it.

\n
§Examples
\n
let o: Cow<'_, [i32]> = Cow::Owned(vec![1, 2, 3]);\nlet b: Cow<'_, [i32]> = Cow::Borrowed(&[1, 2, 3]);\nassert_eq!(Vec::from(o), Vec::from(b));
\n
","From>","sim::make::load::ModifierList"],["
1.10.0 · source§

impl<T, A> From<VecDeque<T, A>> for Vec<T, A>
where\n A: Allocator,

source§

fn from(other: VecDeque<T, A>) -> Vec<T, A>

Turn a VecDeque<T> into a Vec<T>.

\n

This never needs to re-allocate, but does need to do O(n) data movement if\nthe circular buffer doesn’t happen to be at the beginning of the allocation.

\n
§Examples
\n
use std::collections::VecDeque;\n\n// This one is *O*(1).\nlet deque: VecDeque<_> = (1..5).collect();\nlet ptr = deque.as_slices().0.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);\n\n// This one needs data rearranging.\nlet mut deque: VecDeque<_> = (1..5).collect();\ndeque.push_front(9);\ndeque.push_front(8);\nlet ptr = deque.as_slices().1.as_ptr();\nlet vec = Vec::from(deque);\nassert_eq!(vec, [8, 9, 1, 2, 3, 4]);\nassert_eq!(vec.as_ptr(), ptr);
\n
","From>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T> FromIterator<T> for Vec<T>

Collects an iterator into a Vec, commonly called via Iterator::collect()

\n

§Allocation behavior

\n

In general Vec does not guarantee any particular growth or allocation strategy.\nThat also applies to this trait impl.

\n

Note: This section covers implementation details and is therefore exempt from\nstability guarantees.

\n

Vec may use any or none of the following strategies,\ndepending on the supplied iterator:

\n
    \n
  • preallocate based on Iterator::size_hint()\n
      \n
    • and panic if the number of items is outside the provided lower/upper bounds
    • \n
    \n
  • \n
  • use an amortized growth strategy similar to pushing one item at a time
  • \n
  • perform the iteration in-place on the original allocation backing the iterator
  • \n
\n

The last case warrants some attention. It is an optimization that in many cases reduces peak memory\nconsumption and improves cache locality. But when big, short-lived allocations are created,\nonly a small fraction of their items get collected, no further use is made of the spare capacity\nand the resulting Vec is moved into a longer-lived structure, then this can lead to the large\nallocations having their lifetimes unnecessarily extended which can result in increased memory\nfootprint.

\n

In cases where this is an issue, the excess capacity can be discarded with Vec::shrink_to(),\nVec::shrink_to_fit() or by collecting into Box<[T]> instead, which additionally reduces\nthe size of the long-lived struct.

\n\n
static LONG_LIVED: Mutex<Vec<Vec<u16>>> = Mutex::new(Vec::new());\n\nfor i in 0..10 {\n    let big_temporary: Vec<u16> = (0..1024).collect();\n    // discard most items\n    let mut result: Vec<_> = big_temporary.into_iter().filter(|i| i % 100 == 0).collect();\n    // without this a lot of unused capacity might be moved into the global\n    result.shrink_to_fit();\n    LONG_LIVED.lock().unwrap().push(result);\n}
\n
source§

fn from_iter<I>(iter: I) -> Vec<T>
where\n I: IntoIterator<Item = T>,

Creates a value from an iterator. Read more
","FromIterator","sim::make::load::ModifierList"],["
§

impl<T> FromParallelIterator<T> for Vec<T>
where\n T: Send,

Collects items from a parallel iterator into a vector.

\n
§

fn from_par_iter<I>(par_iter: I) -> Vec<T>
where\n I: IntoParallelIterator<Item = T>,

Creates an instance of the collection from the parallel iterator par_iter. Read more
","FromParallelIterator","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Hash for Vec<T, A>
where\n T: Hash,\n A: Allocator,

The hash of a vector is the same as that of the corresponding slice,\nas required by the core::borrow::Borrow implementation.

\n\n
use std::hash::BuildHasher;\n\nlet b = std::hash::RandomState::new();\nlet v: Vec<u8> = vec![0xa8, 0x3c, 0x09];\nlet s: &[u8] = &[0xa8, 0x3c, 0x09];\nassert_eq!(b.hash_one(v), b.hash_one(s));
\n
source§

fn hash<H>(&self, state: &mut H)
where\n H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, I, A> Index<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

§

type Output = <I as SliceIndex<[T]>>::Output

The returned type after indexing.
source§

fn index(&self, index: I) -> &<Vec<T, A> as Index<I>>::Output

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: PatternID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: SmallIndex) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

The returned type after indexing.
§

fn index(&self, index: StateID) -> &T

Performs the indexing (container[index]) operation. Read more
","Index","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, I, A> IndexMut<I> for Vec<T, A>
where\n I: SliceIndex<[T]>,\n A: Allocator,

source§

fn index_mut(&mut self, index: I) -> &mut <Vec<T, A> as Index<I>>::Output

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<PatternID> for Vec<T>

§

fn index_mut(&mut self, index: PatternID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<SmallIndex> for Vec<T>

§

fn index_mut(&mut self, index: SmallIndex) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
§

impl<T> IndexMut<StateID> for Vec<T>

§

fn index_mut(&mut self, index: StateID) -> &mut T

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","sim::make::load::ModifierList"],["
source§

impl<'de, T, E> IntoDeserializer<'de, E> for Vec<T>
where\n T: IntoDeserializer<'de, E>,\n E: Error,

§

type Deserializer = SeqDeserializer<<Vec<T> as IntoIterator>::IntoIter, E>

The type of the deserializer being converted into.
source§

fn into_deserializer(self) -> <Vec<T> as IntoDeserializer<'de, E>>::Deserializer

Convert this value into a deserializer.
","IntoDeserializer<'de, E>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> IntoIterator for Vec<T, A>
where\n A: Allocator,

source§

fn into_iter(self) -> <Vec<T, A> as IntoIterator>::IntoIter

Creates a consuming iterator, that is, one that moves each value out of\nthe vector (from start to end). The vector cannot be used after calling\nthis.

\n
§Examples
\n
let v = vec![\"a\".to_string(), \"b\".to_string()];\nlet mut v_iter = v.into_iter();\n\nlet first_element: Option<String> = v_iter.next();\n\nassert_eq!(first_element, Some(\"a\".to_string()));\nassert_eq!(v_iter.next(), Some(\"b\".to_string()));\nassert_eq!(v_iter.next(), None);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T, A>

Which kind of iterator are we turning this into?
","IntoIterator","sim::make::load::ModifierList"],["
§

impl<T> IntoParallelIterator for Vec<T>
where\n T: Send,

§

type Item = T

The type of item that the parallel iterator will produce.
§

type Iter = IntoIter<T>

The parallel iterator type that will be created.
§

fn into_par_iter(self) -> <Vec<T> as IntoParallelIterator>::Iter

Converts self into a parallel iterator. Read more
","IntoParallelIterator","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Ord for Vec<T, A>
where\n T: Ord,\n A: Allocator,

Implements ordering of vectors, lexicographically.

\n
source§

fn cmp(&self, other: &Vec<T, A>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","sim::make::load::ModifierList"],["
§

impl<'a, T> ParallelExtend<&'a T> for Vec<T>
where\n T: 'a + Copy + Send + Sync,

Extends a vector with copied items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = &'a T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend<&'a T>","sim::make::load::ModifierList"],["
§

impl<T> ParallelExtend<T> for Vec<T>
where\n T: Send,

Extends a vector with items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = T>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<&[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&[U; N]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A> PartialEq<&mut [U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &&mut [U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&mut [U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&mut [U]>","sim::make::load::ModifierList"],["
1.48.0 · source§

impl<T, U, A> PartialEq<[U]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A, const N: usize> PartialEq<[U; N]> for Vec<T, A>
where\n A: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &[U; N]) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &[U; N]) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<[U; N]>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, U, A1, A2> PartialEq<Vec<U, A2>> for Vec<T, A1>
where\n A1: Allocator,\n A2: Allocator,\n T: PartialEq<U>,

source§

fn eq(&self, other: &Vec<U, A2>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &Vec<U, A2>) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq>","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A1, A2> PartialOrd<Vec<T, A2>> for Vec<T, A1>
where\n T: PartialOrd,\n A1: Allocator,\n A2: Allocator,

Implements comparison of vectors, lexicographically.

\n
source§

fn partial_cmp(&self, other: &Vec<T, A2>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd>","sim::make::load::ModifierList"],["
source§

impl<T> Serialize for Vec<T>
where\n T: Serialize,

source§

fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","sim::make::load::ModifierList"],["
§

impl<T> Sink<T> for Vec<T>

§

type Error = Infallible

The type of value produced by the sink when an error occurs.
§

fn poll_ready(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Attempts to prepare the Sink to receive a value. Read more
§

fn start_send(\n self: Pin<&mut Vec<T>>,\n item: T\n) -> Result<(), <Vec<T> as Sink<T>>::Error>

Begin the process of sending a value to the sink.\nEach call to this function must be preceded by a successful call to\npoll_ready which returned Poll::Ready(Ok(())). Read more
§

fn poll_flush(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output from this sink. Read more
§

fn poll_close(\n self: Pin<&mut Vec<T>>,\n _: &mut Context<'_>\n) -> Poll<Result<(), <Vec<T> as Sink<T>>::Error>>

Flush any remaining output and close this sink, if necessary. Read more
","Sink","sim::make::load::ModifierList"],["
source§

impl<T> Vec<T>

1.0.0 (const: 1.39.0) · source

pub const fn new() -> Vec<T>

Constructs a new, empty Vec<T>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::new();
\n
1.0.0 · source

pub fn with_capacity(capacity: usize) -> Vec<T>

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<()>::with_capacity(10);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity(capacity: usize) -> Result<Vec<T>, TryReserveError>

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

Constructs a new, empty Vec<T> with at least the specified capacity.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
1.0.0 · source

pub unsafe fn from_raw_parts(\n ptr: *mut T,\n length: usize,\n capacity: usize\n) -> Vec<T>

Creates a Vec<T> directly from a pointer, a length, and a capacity.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must have been allocated using the global allocator, such as via\nthe alloc::alloc function.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to be the capacity that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is normally not safe\nto build a Vec<u8> from a pointer to a C char array with length\nsize_t, doing so is only safe if the array was initially allocated by\na Vec or String.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1. To avoid\nthese issues, it is often preferable to do casting/transmuting using\nslice::from_raw_parts instead.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
use std::ptr;\nuse std::mem;\n\nlet v = vec![1, 2, 3];\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts(p, len, cap);\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
use std::alloc::{alloc, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = alloc(layout).cast::<u32>();\n        if mem.is_null() {\n            return;\n        }\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts(mem, 1, 16)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: Clone,\n A: Allocator,

1.5.0 · source

pub fn resize(&mut self, new_len: usize, value: T)

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with value.\nIf new_len is less than len, the Vec is simply truncated.

\n

This method requires T to implement Clone,\nin order to be able to clone the passed value.\nIf you need more flexibility (or want to rely on Default instead of\nClone), use Vec::resize_with.\nIf you only need to resize to a smaller size, use Vec::truncate.

\n
§Examples
\n
let mut vec = vec![\"hello\"];\nvec.resize(3, \"world\");\nassert_eq!(vec, [\"hello\", \"world\", \"world\"]);\n\nlet mut vec = vec![1, 2, 3, 4];\nvec.resize(2, 0);\nassert_eq!(vec, [1, 2]);
\n
1.6.0 · source

pub fn extend_from_slice(&mut self, other: &[T])

Clones and appends all elements in a slice to the Vec.

\n

Iterates over the slice other, clones each element, and then appends\nit to this Vec. The other slice is traversed in-order.

\n

Note that this function is same as extend except that it is\nspecialized to work with slices instead. If and when Rust gets\nspecialization this function will likely be deprecated (but still\navailable).

\n
§Examples
\n
let mut vec = vec![1];\nvec.extend_from_slice(&[2, 3, 4]);\nassert_eq!(vec, [1, 2, 3, 4]);
\n
1.53.0 · source

pub fn extend_from_within<R>(&mut self, src: R)
where\n R: RangeBounds<usize>,

Copies elements from src range to the end of the vector.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut vec = vec![0, 1, 2, 3, 4];\n\nvec.extend_from_within(2..);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4]);\n\nvec.extend_from_within(..2);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1]);\n\nvec.extend_from_within(4..8);\nassert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1, 4, 2, 3, 4]);
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n T: PartialEq,\n A: Allocator,

1.0.0 · source

pub fn dedup(&mut self)

Removes consecutive repeated elements in the vector according to the\nPartialEq trait implementation.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![1, 2, 2, 3, 2];\n\nvec.dedup();\n\nassert_eq!(vec, [1, 2, 3, 2]);
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

1.21.0 · source

pub fn splice<R, I>(\n &mut self,\n range: R,\n replace_with: I\n) -> Splice<'_, <I as IntoIterator>::IntoIter, A>
where\n R: RangeBounds<usize>,\n I: IntoIterator<Item = T>,

Creates a splicing iterator that replaces the specified range in the vector\nwith the given replace_with iterator and yields the removed items.\nreplace_with does not need to be the same length as range.

\n

range is removed even if the iterator is not consumed until the end.

\n

It is unspecified how many elements are removed from the vector\nif the Splice value is leaked.

\n

The input iterator replace_with is only consumed when the Splice value is dropped.

\n

This is optimal if:

\n
    \n
  • The tail (elements in the vector after range) is empty,
  • \n
  • or replace_with yields fewer or equal elements than range’s length
  • \n
  • or the lower bound of its size_hint() is exact.
  • \n
\n

Otherwise, a temporary vector is allocated and the tail is moved twice.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3, 4];\nlet new = [7, 8, 9];\nlet u: Vec<_> = v.splice(1..3, new).collect();\nassert_eq!(v, &[1, 7, 8, 9, 4]);\nassert_eq!(u, &[2, 3]);
\n
source

pub fn extract_if<F>(&mut self, filter: F) -> ExtractIf<'_, T, F, A>
where\n F: FnMut(&mut T) -> bool,

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

Creates an iterator which uses a closure to determine if an element should be removed.

\n

If the closure returns true, then the element is removed and yielded.\nIf the closure returns false, the element will remain in the vector and will not be yielded\nby the iterator.

\n

If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

\n

Using this method is equivalent to the following code:

\n\n
let mut i = 0;\nwhile i < vec.len() {\n    if some_predicate(&mut vec[i]) {\n        let val = vec.remove(i);\n        // your code here\n    } else {\n        i += 1;\n    }\n}\n
\n

But extract_if is easier to use. extract_if is also more efficient,\nbecause it can backshift the elements of the array in bulk.

\n

Note that extract_if also lets you mutate every element in the filter closure,\nregardless of whether you choose to keep or remove it.

\n
§Examples
\n

Splitting an array into evens and odds, reusing the original allocation:

\n\n
#![feature(extract_if)]\nlet mut numbers = vec![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];\n\nlet evens = numbers.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();\nlet odds = numbers;\n\nassert_eq!(evens, vec![2, 4, 6, 8, 14]);\nassert_eq!(odds, vec![1, 3, 5, 9, 11, 13, 15]);
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T, A> Vec<T, A>
where\n A: Allocator,

source

pub const fn new_in(alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A>.

\n

The vector will not allocate until elements are pushed onto it.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec: Vec<i32, _> = Vec::new_in(System);
\n
source

pub fn with_capacity_in(capacity: usize, alloc: A) -> Vec<T, A>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n

It is important to note that although the returned vector has the\nminimum capacity specified, the vector will have a zero length. For\nan explanation of the difference between length and capacity, see\nCapacity and reallocation.

\n

If it is important to know the exact allocated capacity of a Vec,\nalways use the capacity method after construction.

\n

For Vec<T, A> where T is a zero-sized type, there will be no allocation\nand the capacity will always be usize::MAX.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nlet mut vec = Vec::with_capacity_in(10, System);\n\n// The vector contains no items, even though it has capacity for more\nassert_eq!(vec.len(), 0);\nassert!(vec.capacity() >= 10);\n\n// These are all done without reallocating...\nfor i in 0..10 {\n    vec.push(i);\n}\nassert_eq!(vec.len(), 10);\nassert!(vec.capacity() >= 10);\n\n// ...but this may make the vector reallocate\nvec.push(11);\nassert_eq!(vec.len(), 11);\nassert!(vec.capacity() >= 11);\n\n// A vector of a zero-sized type will always over-allocate, since no\n// allocation is necessary\nlet vec_units = Vec::<(), System>::with_capacity_in(10, System);\nassert_eq!(vec_units.capacity(), usize::MAX);
\n
source

pub fn try_with_capacity_in(\n capacity: usize,\n alloc: A\n) -> Result<Vec<T, A>, TryReserveError>

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

Constructs a new, empty Vec<T, A> with at least the specified capacity\nwith the provided allocator.

\n

The vector will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is 0, the vector will not allocate.

\n
§Errors
\n

Returns an error if the capacity exceeds isize::MAX bytes,\nor if the allocator reports allocation failure.

\n
source

pub unsafe fn from_raw_parts_in(\n ptr: *mut T,\n length: usize,\n capacity: usize,\n alloc: A\n) -> Vec<T, A>

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

Creates a Vec<T, A> directly from a pointer, a length, a capacity,\nand an allocator.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • ptr must be currently allocated via the given allocator alloc.
  • \n
  • T needs to have the same alignment as what ptr was allocated with.\n(T having a less strict alignment is not sufficient, the alignment really\nneeds to be equal to satisfy the dealloc requirement that memory must be\nallocated and deallocated with the same layout.)
  • \n
  • The size of T times the capacity (ie. the allocated size in bytes) needs\nto be the same size as the pointer was allocated with. (Because similar to\nalignment, dealloc must be called with the same layout size.)
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • The first length values must be properly initialized values of type T.
  • \n
  • capacity needs to fit the layout size that the pointer was allocated with.
  • \n
  • The allocated size in bytes must be no larger than isize::MAX.\nSee the safety documentation of pointer::offset.
  • \n
\n

These requirements are always upheld by any ptr that has been allocated\nvia Vec<T, A>. Other allocation sources are allowed if the invariants are\nupheld.

\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example it is not safe\nto build a Vec<u8> from a pointer to a C char array with length size_t.\nIt’s also not safe to build one from a Vec<u16> and its length, because\nthe allocator cares about the alignment, and these two types have different\nalignments. The buffer was allocated with alignment 2 (for u16), but after\nturning it into a Vec<u8> it’ll be deallocated with alignment 1.

\n

The ownership of ptr is effectively transferred to the\nVec<T> which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::alloc::System;\n\nuse std::ptr;\nuse std::mem;\n\nlet mut v = Vec::with_capacity_in(3, System);\nv.push(1);\nv.push(2);\nv.push(3);\n\n// Prevent running `v`'s destructor so we are in complete control\n// of the allocation.\nlet mut v = mem::ManuallyDrop::new(v);\n\n// Pull out the various important pieces of information about `v`\nlet p = v.as_mut_ptr();\nlet len = v.len();\nlet cap = v.capacity();\nlet alloc = v.allocator();\n\nunsafe {\n    // Overwrite memory with 4, 5, 6\n    for i in 0..len {\n        ptr::write(p.add(i), 4 + i);\n    }\n\n    // Put everything back together into a Vec\n    let rebuilt = Vec::from_raw_parts_in(p, len, cap, alloc.clone());\n    assert_eq!(rebuilt, [4, 5, 6]);\n}
\n

Using memory that was allocated elsewhere:

\n\n
#![feature(allocator_api)]\n\nuse std::alloc::{AllocError, Allocator, Global, Layout};\n\nfn main() {\n    let layout = Layout::array::<u32>(16).expect(\"overflow cannot happen\");\n\n    let vec = unsafe {\n        let mem = match Global.allocate(layout) {\n            Ok(mem) => mem.cast::<u32>().as_ptr(),\n            Err(AllocError) => return,\n        };\n\n        mem.write(1_000_000);\n\n        Vec::from_raw_parts_in(mem, 1, 16, Global)\n    };\n\n    assert_eq!(vec, &[1_000_000]);\n    assert_eq!(vec.capacity(), 16);\n}
\n
source

pub fn into_raw_parts(self) -> (*mut T, usize, usize)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity).

\n

Returns the raw pointer to the underlying data, the length of\nthe vector (in elements), and the allocated capacity of the\ndata (in elements). These are the same arguments in the same\norder as the arguments to from_raw_parts.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(vec_into_raw_parts)]\nlet v: Vec<i32> = vec![-1, 0, 1];\n\nlet (ptr, len, cap) = v.into_raw_parts();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts(ptr, len, cap)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
source

pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A)

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

Decomposes a Vec<T> into its raw components: (pointer, length, capacity, allocator).

\n

Returns the raw pointer to the underlying data, the length of the vector (in elements),\nthe allocated capacity of the data (in elements), and the allocator. These are the same\narguments in the same order as the arguments to from_raw_parts_in.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the Vec. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a Vec with the from_raw_parts_in function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(allocator_api, vec_into_raw_parts)]\n\nuse std::alloc::System;\n\nlet mut v: Vec<i32, System> = Vec::new_in(System);\nv.push(-1);\nv.push(0);\nv.push(1);\n\nlet (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();\n\nlet rebuilt = unsafe {\n    // We can now make changes to the components, such as\n    // transmuting the raw pointer to a compatible type.\n    let ptr = ptr as *mut u32;\n\n    Vec::from_raw_parts_in(ptr, len, cap, alloc)\n};\nassert_eq!(rebuilt, [4294967295, 0, 1]);
\n
1.0.0 · source

pub fn capacity(&self) -> usize

Returns the total number of elements the vector can hold without\nreallocating.

\n
§Examples
\n
let mut vec: Vec<i32> = Vec::with_capacity(10);\nvec.push(42);\nassert!(vec.capacity() >= 10);
\n
1.0.0 · source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to\nspeculatively avoid frequent reallocations. After calling reserve,\ncapacity will be greater than or equal to self.len() + additional.\nDoes nothing if capacity is already sufficient.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve(10);\nassert!(vec.capacity() >= 11);
\n
1.0.0 · source

pub fn reserve_exact(&mut self, additional: usize)

Reserves the minimum capacity for at least additional more elements to\nbe inserted in the given Vec<T>. Unlike reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling reserve_exact, capacity will be greater than or equal to\nself.len() + additional. Does nothing if the capacity is already\nsufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer reserve if future insertions are expected.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1];\nvec.reserve_exact(10);\nassert!(vec.capacity() >= 11);
\n
1.57.0 · source

pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>

Tries to reserve capacity for at least additional more elements to be inserted\nin the given Vec<T>. The collection may reserve more space to speculatively avoid\nfrequent reallocations. After calling try_reserve, capacity will be\ngreater than or equal to self.len() + additional if it returns\nOk(()). Does nothing if capacity is already sufficient. This method\npreserves the contents even if an error occurs.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.57.0 · source

pub fn try_reserve_exact(\n &mut self,\n additional: usize\n) -> Result<(), TryReserveError>

Tries to reserve the minimum capacity for at least additional\nelements to be inserted in the given Vec<T>. Unlike try_reserve,\nthis will not deliberately over-allocate to speculatively avoid frequent\nallocations. After calling try_reserve_exact, capacity will be greater\nthan or equal to self.len() + additional if it returns Ok(()).\nDoes nothing if the capacity is already sufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer try_reserve if future insertions are expected.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    let mut output = Vec::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve_exact(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.extend(data.iter().map(|&val| {\n        val * 2 + 5 // very complicated\n    }));\n\n    Ok(output)\n}
\n
1.0.0 · source

pub fn shrink_to_fit(&mut self)

Shrinks the capacity of the vector as much as possible.

\n

The behavior of this method depends on the allocator, which may either shrink the vector\nin-place or reallocate. The resulting vector might still have some excess capacity, just as\nis the case for with_capacity. See Allocator::shrink for more details.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to_fit();\nassert!(vec.capacity() >= 3);
\n
1.56.0 · source

pub fn shrink_to(&mut self, min_capacity: usize)

Shrinks the capacity of the vector with a lower bound.

\n

The capacity will remain at least as large as both the length\nand the supplied value.

\n

If the current capacity is less than the lower limit, this is a no-op.

\n
§Examples
\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\nassert!(vec.capacity() >= 10);\nvec.shrink_to(4);\nassert!(vec.capacity() >= 4);\nvec.shrink_to(0);\nassert!(vec.capacity() >= 3);
\n
1.0.0 · source

pub fn into_boxed_slice(self) -> Box<[T], A>

Converts the vector into Box<[T]>.

\n

Before doing the conversion, this method discards excess capacity like shrink_to_fit.

\n
§Examples
\n
let v = vec![1, 2, 3];\n\nlet slice = v.into_boxed_slice();
\n

Any excess capacity is removed:

\n\n
let mut vec = Vec::with_capacity(10);\nvec.extend([1, 2, 3]);\n\nassert!(vec.capacity() >= 10);\nlet slice = vec.into_boxed_slice();\nassert_eq!(slice.into_vec().capacity(), 3);
\n
1.0.0 · source

pub fn truncate(&mut self, len: usize)

Shortens the vector, keeping the first len elements and dropping\nthe rest.

\n

If len is greater or equal to the vector’s current length, this has\nno effect.

\n

The drain method can emulate truncate, but causes the excess\nelements to be returned instead of dropped.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n

Truncating a five element vector to two elements:

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nvec.truncate(2);\nassert_eq!(vec, [1, 2]);
\n

No truncation occurs when len is greater than the vector’s current\nlength:

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(8);\nassert_eq!(vec, [1, 2, 3]);
\n

Truncating when len == 0 is equivalent to calling the clear\nmethod.

\n\n
let mut vec = vec![1, 2, 3];\nvec.truncate(0);\nassert_eq!(vec, []);
\n
1.7.0 · source

pub fn as_slice(&self) -> &[T]

Extracts a slice containing the entire vector.

\n

Equivalent to &s[..].

\n
§Examples
\n
use std::io::{self, Write};\nlet buffer = vec![1, 2, 3, 5, 8];\nio::sink().write(buffer.as_slice()).unwrap();
\n
1.7.0 · source

pub fn as_mut_slice(&mut self) -> &mut [T]

Extracts a mutable slice of the entire vector.

\n

Equivalent to &mut s[..].

\n
§Examples
\n
use std::io::{self, Read};\nlet mut buffer = vec![0; 3];\nio::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap();
\n
1.37.0 · source

pub fn as_ptr(&self) -> *const T

Returns a raw pointer to the vector’s buffer, or a dangling raw pointer\nvalid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

The caller must also ensure that the memory the pointer (non-transitively) points to\nis never written to (except inside an UnsafeCell) using this pointer or any pointer\nderived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize mutable references to the slice,\nor mutable references to specific elements you are planning on accessing through this pointer,\nas well as writing to those elements, may still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
let x = vec![1, 2, 4];\nlet x_ptr = x.as_ptr();\n\nunsafe {\n    for i in 0..x.len() {\n        assert_eq!(*x_ptr.add(i), 1 << i);\n    }\n}
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0, 1, 2];\n    let ptr1 = v.as_ptr();\n    let _ = ptr1.read();\n    let ptr2 = v.as_mut_ptr().offset(2);\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`\n    // because it mutated a different element:\n    let _ = ptr1.read();\n}
\n
1.37.0 · source

pub fn as_mut_ptr(&mut self) -> *mut T

Returns an unsafe mutable pointer to the vector’s buffer, or a dangling\nraw pointer valid for zero sized reads if the vector didn’t allocate.

\n

The caller must ensure that the vector outlives the pointer this\nfunction returns, or else it will end up pointing to garbage.\nModifying the vector may cause its buffer to be reallocated,\nwhich would also make any pointers to it invalid.

\n

This method guarantees that for the purpose of the aliasing model, this method\ndoes not materialize a reference to the underlying slice, and thus the returned pointer\nwill remain valid when mixed with other calls to as_ptr and as_mut_ptr.\nNote that calling other methods that materialize references to the slice,\nor references to specific elements you are planning on accessing through this pointer,\nmay still invalidate this pointer.\nSee the second example below for how this guarantee can be used.

\n
§Examples
\n
// Allocate vector big enough for 4 elements.\nlet size = 4;\nlet mut x: Vec<i32> = Vec::with_capacity(size);\nlet x_ptr = x.as_mut_ptr();\n\n// Initialize elements via raw pointer writes, then set length.\nunsafe {\n    for i in 0..size {\n        *x_ptr.add(i) = i as i32;\n    }\n    x.set_len(size);\n}\nassert_eq!(&*x, &[0, 1, 2, 3]);
\n

Due to the aliasing guarantee, the following code is legal:

\n\n
unsafe {\n    let mut v = vec![0];\n    let ptr1 = v.as_mut_ptr();\n    ptr1.write(1);\n    let ptr2 = v.as_mut_ptr();\n    ptr2.write(2);\n    // Notably, the write to `ptr2` did *not* invalidate `ptr1`:\n    ptr1.write(3);\n}
\n
source

pub fn allocator(&self) -> &A

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

Returns a reference to the underlying allocator.

\n
1.0.0 · source

pub unsafe fn set_len(&mut self, new_len: usize)

Forces the length of the vector to new_len.

\n

This is a low-level operation that maintains none of the normal\ninvariants of the type. Normally changing the length of a vector\nis done using one of the safe operations instead, such as\ntruncate, resize, extend, or clear.

\n
§Safety
\n
    \n
  • new_len must be less than or equal to capacity().
  • \n
  • The elements at old_len..new_len must be initialized.
  • \n
\n
§Examples
\n

This method can be useful for situations in which the vector\nis serving as a buffer for other code, particularly over FFI:

\n\n
pub fn get_dictionary(&self) -> Option<Vec<u8>> {\n    // Per the FFI method's docs, \"32768 bytes is always enough\".\n    let mut dict = Vec::with_capacity(32_768);\n    let mut dict_length = 0;\n    // SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that:\n    // 1. `dict_length` elements were initialized.\n    // 2. `dict_length` <= the capacity (32_768)\n    // which makes `set_len` safe to call.\n    unsafe {\n        // Make the FFI call...\n        let r = deflateGetDictionary(self.strm, dict.as_mut_ptr(), &mut dict_length);\n        if r == Z_OK {\n            // ...and update the length to what was initialized.\n            dict.set_len(dict_length);\n            Some(dict)\n        } else {\n            None\n        }\n    }\n}
\n

While the following example is sound, there is a memory leak since\nthe inner vectors were not freed prior to the set_len call:

\n\n
let mut vec = vec![vec![1, 0, 0],\n                   vec![0, 1, 0],\n                   vec![0, 0, 1]];\n// SAFETY:\n// 1. `old_len..0` is empty so no elements need to be initialized.\n// 2. `0 <= capacity` always holds whatever `capacity` is.\nunsafe {\n    vec.set_len(0);\n}
\n

Normally, here, one would use clear instead to correctly drop\nthe contents and thus not leak memory.

\n
1.0.0 · source

pub fn swap_remove(&mut self, index: usize) -> T

Removes an element from the vector and returns it.

\n

The removed element is replaced by the last element of the vector.

\n

This does not preserve ordering of the remaining elements, but is O(1).\nIf you need to preserve the element order, use remove instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![\"foo\", \"bar\", \"baz\", \"qux\"];\n\nassert_eq!(v.swap_remove(1), \"bar\");\nassert_eq!(v, [\"foo\", \"qux\", \"baz\"]);\n\nassert_eq!(v.swap_remove(0), \"foo\");\nassert_eq!(v, [\"baz\", \"qux\"]);
\n
1.0.0 · source

pub fn insert(&mut self, index: usize, element: T)

Inserts an element at position index within the vector, shifting all\nelements after it to the right.

\n
§Panics
\n

Panics if index > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.insert(1, 4);\nassert_eq!(vec, [1, 4, 2, 3]);\nvec.insert(4, 5);\nassert_eq!(vec, [1, 4, 2, 3, 5]);
\n
§Time complexity
\n

Takes O(Vec::len) time. All items after the insertion index must be\nshifted to the right. In the worst case, all elements are shifted when\nthe insertion index is 0.

\n
1.0.0 · source

pub fn remove(&mut self, index: usize) -> T

Removes and returns the element at position index within the vector,\nshifting all elements after it to the left.

\n

Note: Because this shifts over the remaining elements, it has a\nworst-case performance of O(n). If you don’t need the order of elements\nto be preserved, use swap_remove instead. If you’d like to remove\nelements from the beginning of the Vec, consider using\nVecDeque::pop_front instead.

\n
§Panics
\n

Panics if index is out of bounds.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nassert_eq!(v.remove(1), 2);\nassert_eq!(v, [1, 3]);
\n
1.0.0 · source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(&T) -> bool,

Retains only the elements specified by the predicate.

\n

In other words, remove all elements e for which f(&e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain(|&x| x % 2 == 0);\nassert_eq!(vec, [2, 4]);
\n

Because the elements are visited exactly once in the original order,\nexternal state may be used to decide which elements to keep.

\n\n
let mut vec = vec![1, 2, 3, 4, 5];\nlet keep = [false, true, true, false, true];\nlet mut iter = keep.iter();\nvec.retain(|_| *iter.next().unwrap());\nassert_eq!(vec, [2, 3, 5]);
\n
1.61.0 · source

pub fn retain_mut<F>(&mut self, f: F)
where\n F: FnMut(&mut T) -> bool,

Retains only the elements specified by the predicate, passing a mutable reference to it.

\n

In other words, remove all elements e such that f(&mut e) returns false.\nThis method operates in place, visiting each element exactly once in the\noriginal order, and preserves the order of the retained elements.

\n
§Examples
\n
let mut vec = vec![1, 2, 3, 4];\nvec.retain_mut(|x| if *x <= 3 {\n    *x += 1;\n    true\n} else {\n    false\n});\nassert_eq!(vec, [2, 3, 4]);
\n
1.16.0 · source

pub fn dedup_by_key<F, K>(&mut self, key: F)
where\n F: FnMut(&mut T) -> K,\n K: PartialEq,

Removes all but the first of consecutive elements in the vector that resolve to the same\nkey.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![10, 20, 21, 30, 20];\n\nvec.dedup_by_key(|i| *i / 10);\n\nassert_eq!(vec, [10, 20, 30, 20]);
\n
1.16.0 · source

pub fn dedup_by<F>(&mut self, same_bucket: F)
where\n F: FnMut(&mut T, &mut T) -> bool,

Removes all but the first of consecutive elements in the vector satisfying a given equality\nrelation.

\n

The same_bucket function is passed references to two elements from the vector and\nmust determine if the elements compare equal. The elements are passed in opposite order\nfrom their order in the slice, so if same_bucket(a, b) returns true, a is removed.

\n

If the vector is sorted, this removes all duplicates.

\n
§Examples
\n
let mut vec = vec![\"foo\", \"bar\", \"Bar\", \"baz\", \"bar\"];\n\nvec.dedup_by(|a, b| a.eq_ignore_ascii_case(b));\n\nassert_eq!(vec, [\"foo\", \"bar\", \"baz\", \"bar\"]);
\n
1.0.0 · source

pub fn push(&mut self, value: T)

Appends an element to the back of a collection.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2];\nvec.push(3);\nassert_eq!(vec, [1, 2, 3]);
\n
§Time complexity
\n

Takes amortized O(1) time. If the vector’s length would exceed its\ncapacity after the push, O(capacity) time is taken to copy the\nvector’s elements to a larger allocation. This expensive operation is\noffset by the capacity O(1) insertions it allows.

\n
source

pub fn push_within_capacity(&mut self, value: T) -> Result<(), T>

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

Appends an element if there is sufficient spare capacity, otherwise an error is returned\nwith the element.

\n

Unlike push this method will not reallocate when there’s insufficient capacity.\nThe caller should use reserve or try_reserve to ensure that there is enough capacity.

\n
§Examples
\n

A manual, panic-free alternative to FromIterator:

\n\n
#![feature(vec_push_within_capacity)]\n\nuse std::collections::TryReserveError;\nfn from_iter_fallible<T>(iter: impl Iterator<Item=T>) -> Result<Vec<T>, TryReserveError> {\n    let mut vec = Vec::new();\n    for value in iter {\n        if let Err(value) = vec.push_within_capacity(value) {\n            vec.try_reserve(1)?;\n            // this cannot fail, the previous line either returned or added at least 1 free slot\n            let _ = vec.push_within_capacity(value);\n        }\n    }\n    Ok(vec)\n}\nassert_eq!(from_iter_fallible(0..100), Ok(Vec::from_iter(0..100)));
\n
§Time complexity
\n

Takes O(1) time.

\n
1.0.0 · source

pub fn pop(&mut self) -> Option<T>

Removes the last element from a vector and returns it, or None if it\nis empty.

\n

If you’d like to pop the first element, consider using\nVecDeque::pop_front instead.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nassert_eq!(vec.pop(), Some(3));\nassert_eq!(vec, [1, 2]);
\n
§Time complexity
\n

Takes O(1) time.

\n
source

pub fn pop_if<F>(&mut self, f: F) -> Option<T>
where\n F: FnOnce(&mut T) -> bool,

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

Removes and returns the last element in a vector if the predicate\nreturns true, or None if the predicate returns false or the vector\nis empty.

\n
§Examples
\n
#![feature(vec_pop_if)]\n\nlet mut vec = vec![1, 2, 3, 4];\nlet pred = |x: &mut i32| *x % 2 == 0;\n\nassert_eq!(vec.pop_if(pred), Some(4));\nassert_eq!(vec, [1, 2, 3]);\nassert_eq!(vec.pop_if(pred), None);
\n
1.4.0 · source

pub fn append(&mut self, other: &mut Vec<T, A>)

Moves all the elements of other into self, leaving other empty.

\n
§Panics
\n

Panics if the new capacity exceeds isize::MAX bytes.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet mut vec2 = vec![4, 5, 6];\nvec.append(&mut vec2);\nassert_eq!(vec, [1, 2, 3, 4, 5, 6]);\nassert_eq!(vec2, []);
\n
1.6.0 · source

pub fn drain<R>(&mut self, range: R) -> Drain<'_, T, A>
where\n R: RangeBounds<usize>,

Removes the specified range from the vector in bulk, returning all\nremoved elements as an iterator. If the iterator is dropped before\nbeing fully consumed, it drops the remaining removed elements.

\n

The returned iterator keeps a mutable borrow on the vector to optimize\nits implementation.

\n
§Panics
\n

Panics if the starting point is greater than the end point or if\nthe end point is greater than the length of the vector.

\n
§Leaking
\n

If the returned iterator goes out of scope without being dropped (due to\nmem::forget, for example), the vector may have lost and leaked\nelements arbitrarily, including elements outside the range.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\nlet u: Vec<_> = v.drain(1..).collect();\nassert_eq!(v, &[1]);\nassert_eq!(u, &[2, 3]);\n\n// A full range clears the vector, like `clear()` does\nv.drain(..);\nassert_eq!(v, &[]);
\n
1.0.0 · source

pub fn clear(&mut self)

Clears the vector, removing all values.

\n

Note that this method has no effect on the allocated capacity\nof the vector.

\n
§Examples
\n
let mut v = vec![1, 2, 3];\n\nv.clear();\n\nassert!(v.is_empty());
\n
1.0.0 · source

pub fn len(&self) -> usize

Returns the number of elements in the vector, also referred to\nas its ‘length’.

\n
§Examples
\n
let a = vec![1, 2, 3];\nassert_eq!(a.len(), 3);
\n
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if the vector contains no elements.

\n
§Examples
\n
let mut v = Vec::new();\nassert!(v.is_empty());\n\nv.push(1);\nassert!(!v.is_empty());
\n
1.4.0 · source

pub fn split_off(&mut self, at: usize) -> Vec<T, A>
where\n A: Clone,

Splits the collection into two at the given index.

\n

Returns a newly allocated vector containing the elements in the range\n[at, len). After the call, the original vector will be left containing\nthe elements [0, at) with its previous capacity unchanged.

\n
    \n
  • If you want to take ownership of the entire contents and capacity of\nthe vector, see mem::take or mem::replace.
  • \n
  • If you don’t need the returned vector at all, see Vec::truncate.
  • \n
  • If you want to take ownership of an arbitrary subslice, or you don’t\nnecessarily want to store the removed items in a vector, see Vec::drain.
  • \n
\n
§Panics
\n

Panics if at > len.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nlet vec2 = vec.split_off(1);\nassert_eq!(vec, [1]);\nassert_eq!(vec2, [2, 3]);
\n
1.33.0 · source

pub fn resize_with<F>(&mut self, new_len: usize, f: F)
where\n F: FnMut() -> T,

Resizes the Vec in-place so that len is equal to new_len.

\n

If new_len is greater than len, the Vec is extended by the\ndifference, with each additional slot filled with the result of\ncalling the closure f. The return values from f will end up\nin the Vec in the order they have been generated.

\n

If new_len is less than len, the Vec is simply truncated.

\n

This method uses a closure to create new values on every push. If\nyou’d rather Clone a given value, use Vec::resize. If you\nwant to use the Default trait to generate values, you can\npass Default::default as the second argument.

\n
§Examples
\n
let mut vec = vec![1, 2, 3];\nvec.resize_with(5, Default::default);\nassert_eq!(vec, [1, 2, 3, 0, 0]);\n\nlet mut vec = vec![];\nlet mut p = 1;\nvec.resize_with(4, || { p *= 2; p });\nassert_eq!(vec, [2, 4, 8, 16]);
\n
1.47.0 · source

pub fn leak<'a>(self) -> &'a mut [T]
where\n A: 'a,

Consumes and leaks the Vec, returning a mutable reference to the contents,\n&'a mut [T]. Note that the type T must outlive the chosen lifetime\n'a. If the type has only static references, or none at all, then this\nmay be chosen to be 'static.

\n

As of Rust 1.57, this method does not reallocate or shrink the Vec,\nso the leaked allocation may include unused capacity that is not part\nof the returned slice.

\n

This function is mainly useful for data that lives for the remainder of\nthe program’s life. Dropping the returned reference will cause a memory\nleak.

\n
§Examples
\n

Simple usage:

\n\n
let x = vec![1, 2, 3];\nlet static_ref: &'static mut [usize] = x.leak();\nstatic_ref[0] += 1;\nassert_eq!(static_ref, &[2, 2, 3]);
\n
1.60.0 · source

pub fn spare_capacity_mut(&mut self) -> &mut [MaybeUninit<T>]

Returns the remaining spare capacity of the vector as a slice of\nMaybeUninit<T>.

\n

The returned slice can be used to fill the vector with data (e.g. by\nreading from a file) before marking the data as initialized using the\nset_len method.

\n
§Examples
\n
// Allocate vector big enough for 10 elements.\nlet mut v = Vec::with_capacity(10);\n\n// Fill in the first 3 elements.\nlet uninit = v.spare_capacity_mut();\nuninit[0].write(0);\nuninit[1].write(1);\nuninit[2].write(2);\n\n// Mark the first 3 elements of the vector as being initialized.\nunsafe {\n    v.set_len(3);\n}\n\nassert_eq!(&v, &[0, 1, 2]);
\n
source

pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit<T>])

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

Returns vector content as a slice of T, along with the remaining spare\ncapacity of the vector as a slice of MaybeUninit<T>.

\n

The returned spare capacity slice can be used to fill the vector with data\n(e.g. by reading from a file) before marking the data as initialized using\nthe set_len method.

\n

Note that this is a low-level API, which should be used with care for\noptimization purposes. If you need to append data to a Vec\nyou can use push, extend, extend_from_slice,\nextend_from_within, insert, append, resize or\nresize_with, depending on your exact needs.

\n
§Examples
\n
#![feature(vec_split_at_spare)]\n\nlet mut v = vec![1, 1, 2];\n\n// Reserve additional space big enough for 10 elements.\nv.reserve(10);\n\nlet (init, uninit) = v.split_at_spare_mut();\nlet sum = init.iter().copied().sum::<u32>();\n\n// Fill in the next 4 elements.\nuninit[0].write(sum);\nuninit[1].write(sum * 2);\nuninit[2].write(sum * 3);\nuninit[3].write(sum * 4);\n\n// Mark the 4 elements of the vector as being initialized.\nunsafe {\n    let len = v.len();\n    v.set_len(len + 4);\n}\n\nassert_eq!(&v, &[1, 1, 2, 4, 8, 12, 16]);
\n
",0,"sim::make::load::ModifierList"],["
source§

impl<T> CloneableAny for Vec<T>
where\n T: 'static + Clone,

","CloneableAny","sim::make::load::ModifierList"],["
source§

impl<T, A> DerefPure for Vec<T, A>
where\n A: Allocator,

","DerefPure","sim::make::load::ModifierList"],["
1.0.0 · source§

impl<T, A> Eq for Vec<T, A>
where\n T: Eq,\n A: Allocator,

","Eq","sim::make::load::ModifierList"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/rustdoc/type.impl/game/layer/problems_diff/struct.ProblemTypes.js b/rustdoc/type.impl/game/layer/problems_diff/struct.ProblemTypes.js index 7b9098c9a1..01577b919f 100644 --- a/rustdoc/type.impl/game/layer/problems_diff/struct.ProblemTypes.js +++ b/rustdoc/type.impl/game/layer/problems_diff/struct.ProblemTypes.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"game":[["
source§

impl Clone for ProblemTypes

source§

fn clone(&self) -> ProblemTypes

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
","Clone","game::layer::problems_diff::Options"],["
source§

impl PartialEq for ProblemTypes

source§

fn eq(&self, other: &ProblemTypes) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","game::layer::problems_diff::Options"],["
source§

impl ProblemTypes

source

pub fn new() -> Self

source

pub fn show(&self, problem: &Problem) -> bool

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>) -> Widget

source

pub fn from_controls(panel: &Panel) -> Self

",0,"game::layer::problems_diff::Options"],["
source§

impl StructuralPartialEq for ProblemTypes

","StructuralPartialEq","game::layer::problems_diff::Options"]] +"game":[["
source§

impl Clone for ProblemTypes

source§

fn clone(&self) -> ProblemTypes

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
","Clone","game::layer::problems_diff::Options"],["
source§

impl PartialEq for ProblemTypes

source§

fn eq(&self, other: &ProblemTypes) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","game::layer::problems_diff::Options"],["
source§

impl ProblemTypes

source

pub fn new() -> Self

source

pub fn show(&self, problem: &Problem) -> bool

source

pub fn to_controls(&self, ctx: &mut EventCtx<'_>) -> Widget

source

pub fn from_controls(panel: &Panel) -> Self

",0,"game::layer::problems_diff::Options"],["
source§

impl StructuralPartialEq for ProblemTypes

","StructuralPartialEq","game::layer::problems_diff::Options"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/rustdoc/type.impl/map_gui/simple_app/struct.SimpleApp.js b/rustdoc/type.impl/map_gui/simple_app/struct.SimpleApp.js index 2ff2070c90..894b0426d8 100644 --- a/rustdoc/type.impl/map_gui/simple_app/struct.SimpleApp.js +++ b/rustdoc/type.impl/map_gui/simple_app/struct.SimpleApp.js @@ -1,6 +1,6 @@ (function() {var type_impls = { -"fifteen_min":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","fifteen_min::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","fifteen_min::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"fifteen_min::App"]], -"osm_viewer":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","osm_viewer::viewer::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","osm_viewer::viewer::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"osm_viewer::viewer::App"]], -"parking_mapper":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","parking_mapper::mapper::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","parking_mapper::mapper::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"parking_mapper::mapper::App"]], -"santa":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","santa::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","santa::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"santa::App"]] +"fifteen_min":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","fifteen_min::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","fifteen_min::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"fifteen_min::App"]], +"osm_viewer":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","osm_viewer::viewer::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","osm_viewer::viewer::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"osm_viewer::viewer::App"]], +"parking_mapper":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","parking_mapper::mapper::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","parking_mapper::mapper::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"parking_mapper::mapper::App"]], +"santa":[["
§

impl<T> AppLike for SimpleApp<T>
where\n T: 'static,

§

fn map(&self) -> &Map

§

fn cs(&self) -> &ColorScheme

§

fn mut_cs(&mut self) -> &mut ColorScheme

§

fn draw_map(&self) -> &DrawMap

§

fn mut_draw_map(&mut self) -> &mut DrawMap

§

fn opts(&self) -> &Options

§

fn mut_opts(&mut self) -> &mut Options

§

fn map_switched(\n &mut self,\n ctx: &mut EventCtx<'_>,\n map: Map,\n timer: &mut Timer<'_>\n)

§

fn draw_with_opts(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

§

fn make_warper(\n &mut self,\n ctx: &EventCtx<'_>,\n pt: Pt2D,\n target_cam_zoom: Option<f64>,\n _: Option<ID>\n) -> Box<dyn State<SimpleApp<T>>>

Create a widgetry::State that warps to the given point.
§

fn sim_time(&self) -> Time

§

fn current_stage_and_remaining_time(\n &self,\n id: IntersectionID\n) -> (usize, Duration)

§

fn change_color_scheme(\n &mut self,\n ctx: &mut EventCtx<'_>,\n cs: ColorSchemeChoice\n) -> bool

Change the color scheme. Idempotent. Return true if there was a change.
","AppLike","santa::App"],["
§

impl<T> SharedAppState for SimpleApp<T>
where\n T: 'static,

§

fn draw_default(&self, g: &mut GfxCtx<'_>)

When DrawBaselayer::DefaultDraw is called, run this.
§

fn dump_before_abort(&self, canvas: &Canvas)

Will be called if State::event or State::draw panics.
§

fn before_quit(&self, canvas: &Canvas)

Called before a normal exit, like window close
§

fn free_memory(&mut self)

If widgetry determines the video card is low on memory, this may be called. The application\nshould make its best effort to delete any unused Drawables.
§

fn before_event(&mut self)

Before State::event is called, call this.
","SharedAppState","santa::App"],["
§

impl<T> SimpleApp<T>
where\n T: 'static,

pub fn new<F>(\n ctx: &mut EventCtx<'_>,\n opts: Options,\n map_name: Option<MapName>,\n cam: Option<String>,\n session: T,\n init_states: F\n) -> (SimpleApp<T>, Vec<Box<dyn State<SimpleApp<T>>>>)
where\n F: 'static + Fn(&mut EventCtx<'_>, &mut SimpleApp<T>) -> Vec<Box<dyn State<SimpleApp<T>>>>,

pub fn draw_unzoomed(&self, g: &mut GfxCtx<'_>)

pub fn draw_zoomed(&self, g: &mut GfxCtx<'_>, opts: DrawOptions)

pub fn recalculate_current_selection(&mut self, ctx: &EventCtx<'_>)

Assumes some defaults.

\n

pub fn mouseover_unzoomed_roads_and_intersections(\n &self,\n ctx: &EventCtx<'_>\n) -> Option<ID>

pub fn mouseover_unzoomed_buildings(&self, ctx: &EventCtx<'_>) -> Option<ID>

Only select buildings, and work whether zoomed in or not.

\n
",0,"santa::App"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/web/ltn/wasm_pkg/ltn_bg.wasm b/web/ltn/wasm_pkg/ltn_bg.wasm index 306b04708ad4546496ceffc91ec80396d115daea..55784824e11f3f21ad4426f2efd38563d113c67b 100644 GIT binary patch delta 122625 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%0A=spDbCl$7 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

ep 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 delta 122623 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 CsgTtG