bevy/crates
Giacomo Stevanato 0d751e8809
Use HashTable in DynamicMap and fix bug in remove (#15158)
# Objective

- `DynamicMap` currently uses an `HashMap` from a `u64` hash to the
entry index in a `Vec`. This is incorrect in the presence of hash
collisions, so let's fix it;
- `DynamicMap::remove` was also buggy, as it didn't fix up the indexes
of the other elements after removal. Fix that up as well and add a
regression test.

## Solution

- Use `HashTable` in `DynamicMap` to distinguish entries that have the
same hash by using `reflect_partial_eq`, bringing it more in line with
what `DynamicSet` does;
- Reimplement `DynamicMap::remove` to properly fix up the index of moved
elements after the removal.

## Testing

- A regression test was added for the `DynamicMap::remove` issue.

---

Some kinda related considerations: the use of a separate `Vec` for
storing the entries adds some complications that I'm not sure are worth.
This is mainly used to implement an efficient `get_at`, which is relied
upon by `MapIter`. However both `HashMap` and `BTreeMap` implement
`get_at` inefficiently (and cannot do so efficiently), leading to a
`O(N^2)` complexity for iterating them. This could be removed in favor
of a `Box<dyn Iterator>` like it's done in `DynamicSet`.
2024-09-30 17:02:10 +00:00
..
bevy_a11y Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_animation Simplify AnimatableProperty::Property trait bounds (#15495) 2024-09-28 15:04:00 +00:00
bevy_app Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_asset Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_audio Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_color Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_core Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_core_pipeline Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_derive Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_dev_tools Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_diagnostic Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_dylib
bevy_ecs Reorganize SystemParamBuilder docs and examples. (#15102) 2024-09-30 16:59:52 +00:00
bevy_encase_derive Update `glam to 0.29, encase` to 0.10. (#15249) 2024-09-23 19:44:02 +00:00
bevy_gilrs Implement gamepads as entities (#12770) 2024-09-27 20:07:20 +00:00
bevy_gizmos Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_gltf feat(gltf): add name component to gltf mesh primitive (#13912) 2024-09-30 16:51:52 +00:00
bevy_hierarchy Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_input Implement gamepads as entities (#12770) 2024-09-27 20:07:20 +00:00
bevy_internal Initial implementation of the Bevy Remote Protocol (Adopted) (#14880) 2024-09-23 18:36:16 +00:00
bevy_log Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_macro_utils Modify derive_label to support no_std environments (#15465) 2024-09-27 20:23:26 +00:00
bevy_math add more Curve adaptors (#14794) 2024-09-30 16:55:32 +00:00
bevy_mikktspace Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_pbr Implement volumetric fog support for both point lights and spotlights (#15361) 2024-09-29 21:30:53 +00:00
bevy_picking Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_ptr Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_reflect Use HashTable in DynamicMap and fix bug in remove (#15158) 2024-09-30 17:02:10 +00:00
bevy_remote Refactor BRP to allow for 3rd-party transports (#15438) 2024-09-27 20:09:46 +00:00
bevy_render Clear view attachments before resizing window surfaces (#15087) 2024-09-30 16:58:04 +00:00
bevy_scene System param validation for observers, system registry and run once (#15526) 2024-09-30 01:00:39 +00:00
bevy_sprite Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_state Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_tasks bump async-channel to 2.3.0 (#15497) 2024-09-28 19:21:59 +00:00
bevy_text Make CosmicFontSystem and SwashCache pub resources. (#15479) 2024-09-28 00:00:27 +00:00
bevy_time Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_transform Migrate visibility to required components (#15474) 2024-09-27 19:06:16 +00:00
bevy_ui System param validation for observers, system registry and run once (#15526) 2024-09-30 01:00:39 +00:00
bevy_utils Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_window Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_winit Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00