Git Product home page Git Product logo

Comments (4)

carllerche avatar carllerche commented on August 15, 2024

I'm not entirely sure what an implementation of BufMut would look like for VecDeque. That being said, both Cursor<T: AsRef<[u8]>> and Bytes / BytesMut support "draining" without a memmove.

from bytes.

bluetech avatar bluetech commented on August 15, 2024

Thanks for the answer.

Using a Cursor<T: AsRef<[u8]>> would not have the benefit of a ring buffer, which is that once part of the buffer is drained, it can be reused. For example, if you have a sequence like "append 2000 bytes, drain 2000 bytes, append 2000 bytes, drain 2000 bytes...", then a ring buffer can do that without allocating or memmoving, because it just wraps around.

Regarding how an implementation for VecDeque will look, I am not sure. But generally for a ring buffer, say in it's in a state like this:

# = free
x = used
        (region A)     (tail)    (region B)    (head)   (region C)
##########################xxxxxxxxxxxxxxxxxxxxxxxx####################

then:

  • remaining_mut would return the size of region C + size of region A.
  • bytes_mut would return region C, or region A if there is no region C.
  • bytes_vec_mut would return region C, region A.
  • advance_mut would advance head.

I assume it is not possible to implement this without relying on internal implementation details of VecDeque, which will never be guaranteed, unlike Vec. So this issue can probably be closed, and anyone who wants something like that would have to implement their own ring buffer. But thought I'd ask anyway.

from bytes.

carllerche avatar carllerche commented on August 15, 2024

Yes, I am familiar w/ the argument for a ring buf. There used to be an implementation of a ring buffer in crate, but it was removed a while ago.

I didn't realize that VecDeque provided as_slices which would make it plausible.

If you want to take a shot at implementing Buf / BufMut for VecDeque<u8>. I think there still may be some missing fns on VecDeque to impl it correctly though.

from bytes.

carllerche avatar carllerche commented on August 15, 2024

Closing due to inactivity. Please reopen or create a new issue. if the status changes.

from bytes.

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.