@@ -45,11 +45,63 @@ object Liftable {
45
45
}
46
46
}
47
47
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
53
105
}
54
106
55
107
given [T : Type : Liftable ] as Liftable [Seq [T ]] = new Liftable [Seq [T ]] {
0 commit comments