@@ -45,11 +45,63 @@ object Liftable {
4545 }
4646 }
4747
48- given [T : Type : Liftable : ClassTag ] as Liftable [IArray [T ]] = new Liftable [IArray [T ]] {
49- def toExpr (iarray : IArray [T ]): given QuoteContext => Expr [IArray [T ]] = ' {
50- val array = new Array [T ]($ {iarray.length.toExpr})(ClassTag ($ {the[ClassTag [T ]].runtimeClass.toExpr}))
51- $ { Expr .block(List .tabulate(iarray.length)(i => ' { array($ {i.toExpr}) = $ {iarray(i).toExpr} }), ' { array.asInstanceOf [IArray [T ]] }) }
52- }
48+ given [T : Type ] as Liftable [ClassTag [T ]] = new Liftable [ClassTag [T ]] {
49+ def toExpr (x : ClassTag [T ]): given QuoteContext => Expr [ClassTag [T ]] =
50+ ' { ClassTag ($ {x.runtimeClass.toExpr}) }
51+ }
52+
53+ given IArrayIsLiftable [T : Type : Liftable : ClassTag ] as Liftable [IArray [T ]] = new Liftable [IArray [T ]] {
54+ def toExpr (iarray : IArray [T ]): given QuoteContext => Expr [IArray [T ]] =
55+ if (iarray.length == 0 ) ' { IArray .empty[T ]($ {the[ClassTag [T ]].toExpr}) }
56+ else ' { IArray ($ {iarray.asInstanceOf [Array [T ]].toSeq.toExpr}: _* )($ {the[ClassTag [T ]].toExpr}) }
57+ }
58+
59+ given IArrayOfBooleanIsLiftable as Liftable [IArray [Boolean ]] = new Liftable [IArray [Boolean ]] {
60+ def toExpr (iarray : IArray [Boolean ]): given QuoteContext => Expr [IArray [Boolean ]] =
61+ if (iarray.length == 0 ) ' { Array .emptyBooleanArray.asInstanceOf [IArray [Boolean ]] } // TODO use IArray.emptyBooleanIArray
62+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Boolean ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
63+ }
64+
65+ given IArrayOfByteIsLiftable as Liftable [IArray [Byte ]] = new Liftable [IArray [Byte ]] {
66+ def toExpr (iarray : IArray [Byte ]): given QuoteContext => Expr [IArray [Byte ]] =
67+ if (iarray.length == 0 ) ' { Array .emptyByteArray.asInstanceOf [IArray [Byte ]] } // TODO use IArray.emptyByteIArray
68+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Byte ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
69+ }
70+
71+ given IArrayOfShortIsLiftable as Liftable [IArray [Short ]] = new Liftable [IArray [Short ]] {
72+ def toExpr (iarray : IArray [Short ]): given QuoteContext => Expr [IArray [Short ]] =
73+ if (iarray.length == 0 ) ' { Array .emptyShortArray.asInstanceOf [IArray [Short ]] } // TODO use IArray.emptyShortIArray
74+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Short ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
75+ }
76+
77+ given IArrayOfCharIsLiftable as Liftable [IArray [Char ]] = new Liftable [IArray [Char ]] {
78+ def toExpr (iarray : IArray [Char ]): given QuoteContext => Expr [IArray [Char ]] =
79+ if (iarray.length == 0 ) ' { Array .emptyCharArray.asInstanceOf [IArray [Char ]] } // TODO use IArray.emptyCharIArray
80+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Char ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
81+ }
82+
83+ given IArrayOfIntIsLiftable as Liftable [IArray [Int ]] = new Liftable [IArray [Int ]] {
84+ def toExpr (iarray : IArray [Int ]): given QuoteContext => Expr [IArray [Int ]] =
85+ if (iarray.length == 0 ) ' { Array .emptyIntArray.asInstanceOf [IArray [Int ]] } // TODO use IArray.emptyIntIArray
86+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Int ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
87+ }
88+
89+ given IArrayOfLongIsLiftable as Liftable [IArray [Long ]] = new Liftable [IArray [Long ]] {
90+ def toExpr (iarray : IArray [Long ]): given QuoteContext => Expr [IArray [Long ]] =
91+ if (iarray.length == 0 ) ' { Array .emptyLongArray.asInstanceOf [IArray [Long ]] } // TODO use IArray.emptyLongIArray
92+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Long ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
93+ }
94+
95+ given IArrayOfFloatIsLiftable as Liftable [IArray [Float ]] = new Liftable [IArray [Float ]] {
96+ def toExpr (iarray : IArray [Float ]): given QuoteContext => Expr [IArray [Float ]] =
97+ if (iarray.length == 0 ) ' { Array .emptyFloatArray.asInstanceOf [IArray [Float ]] } // TODO use IArray.emptyFloatIArray
98+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Float ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
99+ }
100+
101+ given IArrayOfDoubleIsLiftable as Liftable [IArray [Double ]] = new Liftable [IArray [Double ]] {
102+ def toExpr (iarray : IArray [Double ]): given QuoteContext => Expr [IArray [Double ]] =
103+ if (iarray.length == 0 ) ' { Array .emptyDoubleArray.asInstanceOf [IArray [Double ]] } // TODO use IArray.emptyDoubleIArray
104+ else ' { IArray ($ {iarray(0 ).toExpr}, $ {iarray.asInstanceOf [Array [Double ]].toSeq.tail.toExpr}: _* ) } // TODO use IArray.toSeq
53105 }
54106
55107 given [T : Type : Liftable ] as Liftable [Seq [T ]] = new Liftable [Seq [T ]] {
0 commit comments