debox icon indicating copy to clipboard operation
debox copied to clipboard

Implement Buffer.toSeq like `WrappedArray` but with length cut-off

Open denisrosset opened this issue 10 years ago • 1 comments

The contract of Iterable[A] does not prescribe an order for the elements; thus methods take Seq[A] parameters to document this fact --- and not especially to prescribe fast linear/indexed access.

As debox.Buffer has its elements ordered, a toSeq array wrapper would be a great addition. Right now, collection.mutable.WrappedArray cannot be used because the underlying debox.Buffer.elems array could be longer than the buffer itself.

Thus I propose to create an ArrayView class implementing Seq, with private fields array, offset and length and a few methods overridden for speed: I'm thinking of head, tail, apply, foreach, iterator, drop, take. The implementation trait for the other methods would have to be carefully chosen from the Scala collections to use linear access.

I can try a proof of concept PR: any interest ?

denisrosset avatar Aug 17 '14 09:08 denisrosset

So, there are issues with mixing specialization and Seq[A]. Feel free to give it a shot -- we might need to extensively modify you code to try to get it to work with specialization properly. In any case, having a .toSeq conversion seems useful.

non avatar Aug 17 '14 15:08 non