Comments (7)
Unfortunately we can't really guarantee that elements aren't shuffled around on removal. However have you had a look at the RawTable
API that can be enabled with the raw
feature? You might be able to build something on top of that.
from hashbrown.
Thanks @Amanieu . Does the RawTable
provide the no-shuffle-on-remove guarantee then?
The other functionality needed is iteration (well, one step at a time) starting from an existing T
known to be in the table. I can't see a way of doing that efficiently as is - it would still need a way of creating a RawIter<T>
from a given starting position (e.g. from a Bucket<T>
obtained from find(hash, eq)
).
from hashbrown.
RawTable
does guarantee no-shuffle-on-remove.
You can get a Bucket<T>
from an index by calling the bucket
function. You wouldn't use RawIter
at all for your style of iteration.
from hashbrown.
I think I'm still missing something (or have not explained things very well) - I still need to use some of the machinery from RawIter
to step from an item (I start with a T
) to the next one.
I want to implement something like this function:
impl MyTable<T:Hash> {
fn next(&self, item: &T) -> Option<&T> {
// find the "next" entry in the table following the passed in item, if any
...
}
Given a T
I can get a Bucket<T>
from the table via find
. I don't see how to get an index for the current item (except via pointer subtraction), but definitely can't see a way (I'm looking at https://docs.rs/hashbrown/0.6.3/hashbrown/raw/struct.RawTable.html) of finding the next occupied bucket after that.
Thanks for bearing with me!
from hashbrown.
Oh, it seems that the bucket_index
function is not marked pub
. If you send a PR changing that I'll accept it and push a new version.
from hashbrown.
Thanks, I've opened the PR. Now that I've been looking at other private methods, it looks like I'll probably also need RawTable::ctrl()
and raw::is_full()
to be pub
as well, and then I can just loop over an index looking for occupied buckets. I can add those to the PR (or open another) if that sounds right.
from hashbrown.
This would be useful to me as well. I have the requirement that the iterator cannot borrow from the map itself, it must borrow from a &RefCell<HashMap>
, so an index based iteration API would be useful.
from hashbrown.
Related Issues (20)
- `hashbrown` fails to compile as a transitive dependency HOT 2
- allocator-api2 default-feature? HOT 2
- Compiling hashbrown 0.14.2 for aarch64-unknown-linux-gnu with "target-cpu=cortex-a53" generates illegal instructions HOT 2
- Switching to GxHash? HOT 9
- Feature: increase capacity according to the actual size returned by the allocator HOT 2
- Hashbrown crash due to bad malloc HOT 1
- 0.14.3 - no method named `clear` found for struct `HashMap` in the current scope HOT 5
- Benchmark biaised due to no fence around input
- assertion failed: buckets.is_power_of_two() HOT 8
- Build breaks on nightly due to use of `stdsimd` rust feature in ahash 0.8.6 HOT 2
- Was swap-remove behavior ever considered when removing entries? HOT 10
- Consider returning to 1.63.0 MSRV HOT 1
- How to calculate the size of the hashbrown::HashMap at runtime? HOT 1
- LLVM failed to use the knowledge from a never-overflow assumption HOT 13
- Library test `map::test_map::test_clone_from_memory_leaks` errors with using uninitialized data under valgrind and miri
- update to ahash 0.8.7 or after to use new stdsimd feature portable_simd HOT 1
- Insertion performance with arena allocators HOT 3
- Do not grow the raw table when lots of deletion and insertion is performed HOT 3
- Unsound usages of unsafe implementation from `usize` to `T` HOT 2
- Support lower maximum size
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hashbrown.