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 ?
The contract of
Iterable[A]does not prescribe an order for the elements; thus methods takeSeq[A]parameters to document this fact --- and not especially to prescribe fast linear/indexed access.As
debox.Bufferhas its elements ordered, atoSeqarray wrapper would be a great addition. Right now,collection.mutable.WrappedArraycannot be used because the underlyingdebox.Buffer.elemsarray could be longer than the buffer itself.Thus I propose to create an
ArrayViewclass implementingSeq, with private fieldsarray,offsetandlengthand a few methods overridden for speed: I'm thinking ofhead,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 ?