@@ -52,9 +52,13 @@ object DynamicTuple {
5252 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 ]
5353 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 ]
5454 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 ]
55- case _ => TupleXXL (xs).asInstanceOf [T ]
55+ case _ => TupleXXL .fromIArray (xs.clone(). asInstanceOf [ IArray [ Object ]] ).asInstanceOf [T ]
5656 }
5757
58+ def dynamicFromIArray [T <: Tuple ](xs : IArray [Object ]): T =
59+ if (xs.length <= 22 ) dynamicFromArray(xs.asInstanceOf [Array [Object ]])
60+ else TupleXXL .fromIArray(xs).asInstanceOf [T ]
61+
5862 def dynamicFromProduct [T <: Tuple ](xs : Product ): T = (xs.productArity match {
5963 case 1 =>
6064 xs match {
@@ -169,7 +173,7 @@ object DynamicTuple {
169173 case _ =>
170174 xs match {
171175 case xs : TupleXXL => xs
172- case xs => TupleXXL (xs.productIterator.map(_.asInstanceOf [Object ]).toArray)
176+ case xs => TupleXXL .fromIArray (xs.productIterator.map(_.asInstanceOf [Object ]).toArray. asInstanceOf [ IArray [ Object ]]) // TODO use Iterator.toIArray
173177 }
174178 }).asInstanceOf [T ]
175179
@@ -180,6 +184,12 @@ object DynamicTuple {
180184 case self : Product => productToArray(self)
181185 }
182186
187+ def dynamicToIArray (self : Tuple ): IArray [Object ] = (self : Any ) match {
188+ case self : Unit => Array .emptyObjectArray.asInstanceOf [IArray [Object ]] // TODO use IArray.emptyObjectIArray
189+ case self : TupleXXL => self.elems
190+ case self : Product => productToArray(self).asInstanceOf [IArray [Object ]]
191+ }
192+
183193 def productToArray (self : Product ): Array [Object ] = {
184194 val arr = new Array [Object ](self.productArity)
185195 for (i <- 0 until arr.length) arr(i) = self.productElement(i).asInstanceOf [Object ]
0 commit comments