Skip to content

Commit bddb371

Browse files
committed
no extra array copies for iarray
1 parent f08de70 commit bddb371

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

library/src/scala/IArray.scala

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ object IArray:
258258
arr.clone.asInstanceOf[Array[T]]
259259

260260
extension [T](arr: IArray[T])
261-
def ++[U >: T: ClassTag](suffix: IArray[U]): IArray[U] = genericArrayOps(arr) ++ suffix.toSeq
261+
def ++[U >: T: ClassTag](suffix: IArray[U]): IArray[U] = genericArrayOps(arr) ++ IArray.genericWrapArray(suffix)
262262
def ++[U >: T: ClassTag](suffix: IterableOnce[U]): IArray[U] = genericArrayOps(arr) ++ suffix
263263
def :+ [U >: T: ClassTag](x: U): IArray[U] = genericArrayOps(arr) :+ x
264264
def :++ [U >: T: ClassTag](suffix: IArray[U]): IArray[U] = genericArrayOps(arr) :++ suffix
@@ -268,11 +268,11 @@ object IArray:
268268
def appendedAll[U >: T: ClassTag](suffix: IterableOnce[U]^): IArray[U] = genericArrayOps(arr).appendedAll(suffix)
269269
def collect[U: ClassTag](pf: PartialFunction[T, U]^): IArray[U] = genericArrayOps(arr).collect(pf)
270270
def collectFirst[U](f: PartialFunction[T, U]^): Option[U] = genericArrayOps(arr).collectFirst(f)
271-
def combinations(n: Int): Iterator[IArray[T]] = genericArrayOps(arr).combinations(n)
271+
def combinations(n: Int): Iterator[IArray[T]] = IArray.genericWrapArray(arr).combinations(n).map(_.unsafeArray.asInstanceOf[IArray[T]])
272272
def concat[U >: T: ClassTag](suffix: IArray[U]): IArray[U] = genericArrayOps(arr).concat(suffix)
273273
def concat[U >: T: ClassTag](suffix: IterableOnce[U]^): IArray[U] = genericArrayOps(arr).concat(suffix)
274-
def diff[U >: T](that: IArray[U]): IArray[T] = genericArrayOps(arr).diff(that.toSeq)
275-
def diff[U >: T](that: Seq[U]): IArray[T] = genericArrayOps(arr).diff(that)
274+
def diff[U >: T](that: IArray[U]): IArray[T] = IArray.genericWrapArray(arr).diff(IArray.genericWrapArray(that)).unsafeArray.asInstanceOf[IArray[T]]
275+
def diff[U >: T](that: Seq[U]): IArray[T] = IArray.genericWrapArray(arr).diff(that).unsafeArray.asInstanceOf[IArray[T]]
276276
def distinct: IArray[T] = genericArrayOps(arr).distinct
277277
def distinctBy[U](f: T -> U): IArray[T] = genericArrayOps(arr).distinctBy(f)
278278
def startsWith[U >: T](that: IArray[U]): Boolean = genericArrayOps(arr).startsWith(that, 0)
@@ -285,24 +285,24 @@ object IArray:
285285
def groupMap[K, U: ClassTag](key: T => K)(f: T => U): Map[K, IArray[U]] = genericArrayOps(arr).groupMap(key)(f)
286286
def grouped(size: Int): Iterator[IArray[T]] = genericArrayOps(arr).grouped(size)
287287
def inits: Iterator[IArray[T]] = genericArrayOps(arr).inits
288-
def intersect[U >: T](that: IArray[U]): IArray[T] = genericArrayOps(arr).intersect(that)
289-
def intersect[U >: T](that: Seq[U]): IArray[T] = genericArrayOps(arr).intersect(that)
288+
def intersect[U >: T](that: IArray[U]): IArray[T] = IArray.genericWrapArray(arr).intersect(IArray.genericWrapArray(that)).unsafeArray.asInstanceOf[IArray[T]]
289+
def intersect[U >: T](that: Seq[U]): IArray[T] = IArray.genericWrapArray(arr).intersect(that).unsafeArray.asInstanceOf[IArray[T]]
290290
def lazyZip[U](that: IArray[U]): LazyZip2[T, U, IArray[T]] = genericArrayOps(arr).lazyZip[U](that).asInstanceOf[LazyZip2[T, U, IArray[T]]]
291291
def lazyZip[U](that: Iterable[U]^): LazyZip2[T, U, IArray[T]] = genericArrayOps(arr).lazyZip[U](that).asInstanceOf[LazyZip2[T, U, IArray[T]]]
292292
def lengthCompare(len: Int): Int = genericArrayOps(arr).lengthCompare(len)
293293
def padTo[U >: T: ClassTag](len: Int, elem: U): IArray[U] = genericArrayOps(arr).padTo(len, elem)
294294
def partitionMap[T1: ClassTag, T2: ClassTag](f: T => Either[T1, T2]): (IArray[T1], IArray[T2]) = genericArrayOps(arr).partitionMap(f)
295295
def patch[U >: T: ClassTag](from: Int, other: IterableOnce[U], replaced: Int): IArray[U] = genericArrayOps(arr).patch(from, other, replaced)
296-
def permutations: Iterator[IArray[T]] = genericArrayOps(arr).permutations
296+
def permutations: Iterator[IArray[T]] = IArray.genericWrapArray(arr).permutations.map(_.unsafeArray.asInstanceOf[IArray[T]])
297297
def prepended[U >: T: ClassTag](x: U): IArray[U] = genericArrayOps(arr).prepended(x)
298298
def prependedAll[U >: T: ClassTag](prefix: IterableOnce[U]^): IArray[U] = genericArrayOps(arr).prependedAll(prefix)
299299
def reverseIterator: Iterator[T] = genericArrayOps(arr).reverseIterator
300-
def search[U >: T](elem: U)(using Ordering[U]): Searching.SearchResult = arr.toSeq.search(elem)
301-
def search[U >: T](elem: U, from: Int, to: Int)(using Ordering[U]): Searching.SearchResult = arr.toSeq.search(elem, from, to)
302-
def sizeCompare(that: IArray[Any]): Int = arr.toSeq.sizeCompare(that)
303-
def sizeCompare(that: Iterable[?]): Int = arr.toSeq.sizeCompare(that)
300+
def search[U >: T](elem: U)(using Ordering[U]): Searching.SearchResult = IArray.genericWrapArray(arr).search(elem)
301+
def search[U >: T](elem: U, from: Int, to: Int)(using Ordering[U]): Searching.SearchResult = IArray.genericWrapArray(arr).search(elem, from, to)
302+
def sizeCompare(that: IArray[Any]): Int = IArray.genericWrapArray(arr).sizeCompare(that)
303+
def sizeCompare(that: Iterable[?]): Int = IArray.genericWrapArray(arr).sizeCompare(that)
304304
def sizeCompare(otherSize: Int): Int = genericArrayOps(arr).sizeCompare(otherSize)
305-
def sliding(size: Int, step: Int = 1): Iterator[IArray[T]] = genericArrayOps(arr).sliding(size, step)
305+
def sliding(size: Int, step: Int = 1): Iterator[IArray[T]] = IArray.genericWrapArray(arr).sliding(size, step).map(_.unsafeArray.asInstanceOf[IArray[T]])
306306
def stepper[S <: Stepper[?]](using StepperShape[T, S]): S = genericArrayOps(arr).stepper[S]
307307
def tails: Iterator[IArray[T]] = genericArrayOps(arr).tails
308308
def tapEach[U](f: (T) => U): IArray[T] =

0 commit comments

Comments
 (0)