@@ -2,7 +2,7 @@ package scala
22import reflect .ClassTag
33
44import scala .collection ._
5- import scala .collection .mutable .ArrayBuilder
5+ import scala .collection .mutable .IArrayBuilder
66
77opaque type IArray [+ T ] = Array [_ <: T ]
88
@@ -666,194 +666,4 @@ object IArray:
666666
667667 end WithFilter
668668
669- /** A builder class for immutable arrays.
670- *
671- * @tparam T the type of the elements for the builder.
672- */
673- @ SerialVersionUID (3L )
674- sealed abstract class IArrayBuilder [T ]
675- extends mutable.ReusableBuilder [T , IArray [T ]]
676- with Serializable {
677-
678- protected [this ] val arrayBuilder : ArrayBuilder [T ]
679-
680- override final def sizeHint (size : Int ): Unit = arrayBuilder.sizeHint(size)
681- def clear (): Unit = arrayBuilder.clear()
682-
683- /** Add all elements of an array */
684- def addAll (xs : IArray [T ]): this .type =
685- arrayBuilder.addAll(xs.asInstanceOf [Array [T ]])
686- this
687-
688- /** Add a slice of an array */
689- def addAll (xs : IArray [T ], offset : Int , length : Int ): this .type =
690- arrayBuilder.addAll(xs.asInstanceOf [Array [T ]], offset, length)
691- this
692-
693- override def addAll (xs : IterableOnce [T ]): this .type =
694- arrayBuilder.addAll(xs)
695- this
696- }
697-
698- /** A companion object for array builders.
699- */
700- object IArrayBuilder {
701-
702- /** Creates a new arraybuilder of type `T`.
703- *
704- * @tparam T type of the elements for the array builder, with a `ClassTag` context bound.
705- * @return a new empty array builder.
706- */
707- @ inline def make [T : ClassTag ]: IArrayBuilder [T ] = {
708- val tag = implicitly[ClassTag [T ]]
709- tag.runtimeClass match {
710- case java.lang.Byte .TYPE => new IArrayBuilder .ofByte().asInstanceOf [IArrayBuilder [T ]]
711- case java.lang.Short .TYPE => new IArrayBuilder .ofShort().asInstanceOf [IArrayBuilder [T ]]
712- case java.lang.Character .TYPE => new IArrayBuilder .ofChar().asInstanceOf [IArrayBuilder [T ]]
713- case java.lang.Integer .TYPE => new IArrayBuilder .ofInt().asInstanceOf [IArrayBuilder [T ]]
714- case java.lang.Long .TYPE => new IArrayBuilder .ofLong().asInstanceOf [IArrayBuilder [T ]]
715- case java.lang.Float .TYPE => new IArrayBuilder .ofFloat().asInstanceOf [IArrayBuilder [T ]]
716- case java.lang.Double .TYPE => new IArrayBuilder .ofDouble().asInstanceOf [IArrayBuilder [T ]]
717- case java.lang.Boolean .TYPE => new IArrayBuilder .ofBoolean().asInstanceOf [IArrayBuilder [T ]]
718- case java.lang.Void .TYPE => new IArrayBuilder .ofUnit().asInstanceOf [IArrayBuilder [T ]]
719- case _ => new IArrayBuilder .ofRef[T with AnyRef ]()(tag.asInstanceOf [ClassTag [T with AnyRef ]]).asInstanceOf [IArrayBuilder [T ]]
720- }
721- }
722-
723- /** A class for array builders for arrays of reference types.
724- *
725- * This builder can be reused.
726- *
727- * @tparam T type of elements for the array builder, subtype of `AnyRef` with a `ClassTag` context bound.
728- */
729- @ SerialVersionUID (3L )
730- final class ofRef [T <: AnyRef ](implicit ct : ClassTag [T ]) extends IArrayBuilder [T ] {
731- protected [this ] val arrayBuilder : ArrayBuilder [T ] = new ArrayBuilder .ofRef
732- def addOne (elem : T ): this .type = { arrayBuilder.addOne(elem); this }
733- def result (): IArray [T ] = IArray .unsafeFromArray(arrayBuilder.result())
734- override def equals (other : Any ): Boolean = other match {
735- case x : ofRef[_] => this .arrayBuilder == x.arrayBuilder
736- case _ => false
737- }
738- override def toString = " IArrayBuilder.ofRef"
739- }
740-
741- /** A class for array builders for arrays of `byte`s. It can be reused. */
742- @ SerialVersionUID (3L )
743- final class ofByte extends IArrayBuilder [Byte ] {
744- protected [this ] val arrayBuilder : ArrayBuilder [Byte ] = new ArrayBuilder .ofByte
745- def addOne (elem : Byte ): this .type = { arrayBuilder.addOne(elem); this }
746- def result (): IArray [Byte ] = IArray .unsafeFromArray(arrayBuilder.result())
747- override def equals (other : Any ): Boolean = other match {
748- case x : ofByte => this .arrayBuilder == x.arrayBuilder
749- case _ => false
750- }
751- override def toString = " IArrayBuilder.ofByte"
752- }
753-
754- /** A class for array builders for arrays of `short`s. It can be reused. */
755- @ SerialVersionUID (3L )
756- final class ofShort extends IArrayBuilder [Short ] {
757- protected [this ] val arrayBuilder : ArrayBuilder [Short ] = new ArrayBuilder .ofShort
758- def addOne (elem : Short ): this .type = { arrayBuilder.addOne(elem); this }
759- def result (): IArray [Short ] = IArray .unsafeFromArray(arrayBuilder.result())
760- override def equals (other : Any ): Boolean = other match {
761- case x : ofShort => this .arrayBuilder == x.arrayBuilder
762- case _ => false
763- }
764- override def toString = " IArrayBuilder.ofShort"
765- }
766-
767- /** A class for array builders for arrays of `char`s. It can be reused. */
768- @ SerialVersionUID (3L )
769- final class ofChar extends IArrayBuilder [Char ] {
770- protected [this ] val arrayBuilder : ArrayBuilder [Char ] = new ArrayBuilder .ofChar
771- def addOne (elem : Char ): this .type = { arrayBuilder.addOne(elem); this }
772- def result (): IArray [Char ] = IArray .unsafeFromArray(arrayBuilder.result())
773- override def equals (other : Any ): Boolean = other match {
774- case x : ofChar => this .arrayBuilder == x.arrayBuilder
775- case _ => false
776- }
777- override def toString = " IArrayBuilder.ofChar"
778- }
779-
780- /** A class for array builders for arrays of `int`s. It can be reused. */
781- @ SerialVersionUID (3L )
782- final class ofInt extends IArrayBuilder [Int ] {
783- protected [this ] val arrayBuilder : ArrayBuilder [Int ] = new ArrayBuilder .ofInt
784- def addOne (elem : Int ): this .type = { arrayBuilder.addOne(elem); this }
785- def result (): IArray [Int ] = IArray .unsafeFromArray(arrayBuilder.result())
786- override def equals (other : Any ): Boolean = other match {
787- case x : ofInt => this .arrayBuilder == x.arrayBuilder
788- case _ => false
789- }
790- override def toString = " IArrayBuilder.ofInt"
791- }
792-
793- /** A class for array builders for arrays of `long`s. It can be reused. */
794- @ SerialVersionUID (3L )
795- final class ofLong extends IArrayBuilder [Long ] {
796- protected [this ] val arrayBuilder : ArrayBuilder [Long ] = new ArrayBuilder .ofLong
797- def addOne (elem : Long ): this .type = { arrayBuilder.addOne(elem); this }
798- def result (): IArray [Long ] = IArray .unsafeFromArray(arrayBuilder.result())
799- override def equals (other : Any ): Boolean = other match {
800- case x : ofLong => this .arrayBuilder == x.arrayBuilder
801- case _ => false
802- }
803- override def toString = " IArrayBuilder.ofLong"
804- }
805-
806- /** A class for array builders for arrays of `float`s. It can be reused. */
807- @ SerialVersionUID (3L )
808- final class ofFloat extends IArrayBuilder [Float ] {
809- protected [this ] val arrayBuilder : ArrayBuilder [Float ] = new ArrayBuilder .ofFloat
810- def addOne (elem : Float ): this .type = { arrayBuilder.addOne(elem); this }
811- def result (): IArray [Float ] = IArray .unsafeFromArray(arrayBuilder.result())
812- override def equals (other : Any ): Boolean = other match {
813- case x : ofFloat => this .arrayBuilder == x.arrayBuilder
814- case _ => false
815- }
816- override def toString = " IArrayBuilder.ofFloat"
817- }
818-
819- /** A class for array builders for arrays of `double`s. It can be reused. */
820- @ SerialVersionUID (3L )
821- final class ofDouble extends IArrayBuilder [Double ] {
822- protected [this ] val arrayBuilder : ArrayBuilder [Double ] = new ArrayBuilder .ofDouble
823- def addOne (elem : Double ): this .type = { arrayBuilder.addOne(elem); this }
824- def result (): IArray [Double ] = IArray .unsafeFromArray(arrayBuilder.result())
825- override def equals (other : Any ): Boolean = other match {
826- case x : ofDouble => this .arrayBuilder == x.arrayBuilder
827- case _ => false
828- }
829- override def toString = " IArrayBuilder.ofDouble"
830- }
831-
832- /** A class for array builders for arrays of `boolean`s. It can be reused. */
833- @ SerialVersionUID (3L )
834- class ofBoolean extends IArrayBuilder [Boolean ] {
835- protected [this ] val arrayBuilder : ArrayBuilder [Boolean ] = new ArrayBuilder .ofBoolean
836- def addOne (elem : Boolean ): this .type = { arrayBuilder.addOne(elem); this }
837- def result (): IArray [Boolean ] = IArray .unsafeFromArray(arrayBuilder.result())
838- override def equals (other : Any ): Boolean = other match {
839- case x : ofBoolean => this .arrayBuilder == x.arrayBuilder
840- case _ => false
841- }
842- override def toString = " IArrayBuilder.ofBoolean"
843- }
844-
845- /** A class for array builders for arrays of `Unit` type. It can be reused. */
846- @ SerialVersionUID (3L )
847- final class ofUnit extends IArrayBuilder [Unit ] {
848- protected [this ] val arrayBuilder : ArrayBuilder [Unit ] = new ArrayBuilder .ofUnit
849- def addOne (elem : Unit ): this .type = { arrayBuilder.addOne(elem); this }
850- def result (): IArray [Unit ] = IArray .unsafeFromArray(arrayBuilder.result())
851- override def equals (other : Any ): Boolean = other match {
852- case x : ofUnit => this .arrayBuilder == x.arrayBuilder
853- case _ => false
854- }
855- override def toString = " IArrayBuilder.ofUnit"
856- }
857- }
858-
859669end IArray
0 commit comments