Git Product home page Git Product logo

Comments (7)

Amanieu avatar Amanieu commented on July 17, 2024

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.

jugglerchris avatar jugglerchris commented on July 17, 2024

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.

Amanieu avatar Amanieu commented on July 17, 2024

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.

jugglerchris avatar jugglerchris commented on July 17, 2024

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.

Amanieu avatar Amanieu commented on July 17, 2024

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.

jugglerchris avatar jugglerchris commented on July 17, 2024

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.

ibraheemdev avatar ibraheemdev commented on July 17, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.