@@ -2,7 +2,7 @@ package scala
2
2
import reflect .ClassTag
3
3
4
4
import scala .collection ._
5
- import scala .collection .mutable .ArrayBuilder
5
+ import scala .collection .mutable .IArrayBuilder
6
6
7
7
opaque type IArray [+ T ] = Array [_ <: T ]
8
8
@@ -666,194 +666,4 @@ object IArray:
666
666
667
667
end WithFilter
668
668
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
-
859
669
end IArray
0 commit comments