@@ -4,32 +4,10 @@ import typelevel._
4
4
5
5
sealed trait Tuple extends Any {
6
6
import Tuple ._
7
+ import StagedTuple ._
7
8
8
9
inline def toArray : Array [Object ] =
9
- /* if (specialize)
10
- inline constValueOpt[BoundedSize[this.type]] match {
11
- case Some(0) =>
12
- $emptyArray
13
- case Some(1) =>
14
- val t = asInstanceOf[Tuple1[Object]]
15
- Array(t._1)
16
- case Some(2) =>
17
- val t = asInstanceOf[Tuple2[Object, Object]]
18
- Array(t._1, t._2)
19
- case Some(3) =>
20
- val t = asInstanceOf[Tuple3[Object, Object, Object]]
21
- Array(t._1, t._2, t._3)
22
- case Some(4) =>
23
- val t = asInstanceOf[Tuple4[Object, Object, Object, Object]]
24
- Array(t._1, t._2, t._3, t._4)
25
- case Some(n) if n <= $MaxSpecialized =>
26
- $toArray(this, n)
27
- case Some(n) =>
28
- asInstanceOf[TupleXXL].elems
29
- case None =>
30
- dynamicToArray(this)
31
- }
32
- else*/ dynamicToArray(this )
10
+ ~ toArrayStaged('(this), constValueOpt[BoundedSize[this.type]])
33
11
34
12
inline def *: [H ] (x : H ): H *: this .type =
35
13
/* if (specialize) {
@@ -101,17 +79,13 @@ sealed trait Tuple extends Any {
101
79
fromArray[T ](xs.toArray ++ ys.toArray)
102
80
103
81
inline def size : Size [this .type ] =
104
- /* if (specialize) {
105
- type Result = Size[this.type]
106
- inline constValueOpt[BoundedSize[this.type]] match {
107
- case Some(n) => n.asInstanceOf[Result]
108
- case _ => dynamicSize(this)
109
- }
110
- }
111
- else*/ dynamicSize(this )
82
+ ~ sizeStaged[Size [this .type ]]('(this), constValueOpt[BoundedSize[this.type]])
83
+
112
84
}
113
85
114
86
object Tuple {
87
+ import StagedTuple ._
88
+
115
89
inline val $MaxSpecialized = 22
116
90
inline private val XXL = $MaxSpecialized + 1
117
91
@@ -175,34 +149,7 @@ object Tuple {
175
149
}
176
150
177
151
inline def fromArray [T <: Tuple ](xs : Array [Object ]): T =
178
- /* if (specialize)
179
- inline constValue[BoundedSize[T]] match {
180
- case 0 => ().asInstanceOf[T]
181
- case 1 => Tuple1(xs(0)).asInstanceOf[T]
182
- case 2 => Tuple2(xs(0), xs(1)).asInstanceOf[T]
183
- case 3 => Tuple3(xs(0), xs(1), xs(2)).asInstanceOf[T]
184
- case 4 => Tuple4(xs(0), xs(1), xs(2), xs(3)).asInstanceOf[T]
185
- case 5 => Tuple5(xs(0), xs(1), xs(2), xs(3), xs(4)).asInstanceOf[T]
186
- case 6 => Tuple6(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5)).asInstanceOf[T]
187
- case 7 => Tuple7(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6)).asInstanceOf[T]
188
- case 8 => Tuple8(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7)).asInstanceOf[T]
189
- case 9 => Tuple9(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8)).asInstanceOf[T]
190
- case 10 => Tuple10(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9)).asInstanceOf[T]
191
- case 11 => Tuple11(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10)).asInstanceOf[T]
192
- case 12 => Tuple12(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11)).asInstanceOf[T]
193
- case 13 => Tuple13(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12)).asInstanceOf[T]
194
- case 14 => Tuple14(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13)).asInstanceOf[T]
195
- case 15 => Tuple15(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14)).asInstanceOf[T]
196
- case 16 => Tuple16(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14), xs(15)).asInstanceOf[T]
197
- case 17 => Tuple17(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14), xs(15), xs(16)).asInstanceOf[T]
198
- case 18 => Tuple18(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14), xs(15), xs(16), xs(17)).asInstanceOf[T]
199
- case 19 => Tuple19(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14), xs(15), xs(16), xs(17), xs(18)).asInstanceOf[T]
200
- case 20 => Tuple20(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14), xs(15), xs(16), xs(17), xs(18), xs(19)).asInstanceOf[T]
201
- case 21 => Tuple21(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14), xs(15), xs(16), xs(17), xs(18), xs(19), xs(20)).asInstanceOf[T]
202
- case 22 => Tuple22(xs(0), xs(1), xs(2), xs(3), xs(4), xs(5), xs(6), xs(7), xs(8), xs(9), xs(10), xs(11), xs(12), xs(13), xs(14), xs(15), xs(16), xs(17), xs(18), xs(19), xs(20), xs(21)).asInstanceOf[T]
203
- case _ => TupleXXL(xs).asInstanceOf[T]
204
- }
205
- else */ dynamicFromArray[T ](xs)
152
+ ~ fromArrayStaged[T ]('(xs), constValue[BoundedSize[this.type]])
206
153
207
154
def dynamicFromArray [T <: Tuple ](xs : Array [Object ]): T = xs.length match {
208
155
case 0 => ().asInstanceOf [T ]
@@ -433,7 +380,7 @@ object NonEmptyTuple {
433
380
case self : Tuple2 [_, _] => Tuple1 (self._2)
434
381
case self : Tuple3 [_, _, _] => Tuple2 (self._2, self._3)
435
382
case self : Tuple4 [_, _, _, _] => Tuple3 (self._2, self._3, self._4)
436
- case _ => dynamicFromArray[Result ](self.toArray .tail)
383
+ case _ => dynamicFromArray[Result ](dynamicToArray( self) .tail)
437
384
}
438
385
res.asInstanceOf [Result ]
439
386
}
0 commit comments