@@ -52,7 +52,7 @@ class SparseIntArray:
52
52
/** Transform each defined value with transformation `op`.
53
53
* The transformation takes the element index and value as parameters.
54
54
*/
55
- def transform (op : ( Int , Value ) => Value ): Unit =
55
+ def transform (op : Transform ): Unit =
56
56
root.transform(op, 0 )
57
57
58
58
/** Access to some info about low-level representation */
@@ -71,6 +71,9 @@ class SparseIntArray:
71
71
object SparseIntArray :
72
72
type Value = Int
73
73
74
+ trait Transform :
75
+ def apply (key : Int , v : Value ): Value
76
+
74
77
private inline val NodeSizeLog = 5
75
78
private inline val NodeSize = 1 << NodeSizeLog
76
79
@@ -91,7 +94,7 @@ object SparseIntArray:
91
94
def isEmpty : Boolean
92
95
def keysIterator (offset : Int ): Iterator [Int ]
93
96
def foreachBinding (op : (Int , Value ) => Unit , offset : Int ): Unit
94
- def transform (op : ( Int , Value ) => Value , offset : Int ): Unit
97
+ def transform (op : Transform , offset : Int ): Unit
95
98
def nodeCount : Int
96
99
end Node
97
100
@@ -136,7 +139,7 @@ object SparseIntArray:
136
139
if contains(i) then op(offset + i, elems(i))
137
140
i += 1
138
141
139
- def transform (op : ( Int , Value ) => Value , offset : Int ): Unit =
142
+ def transform (op : Transform , offset : Int ): Unit =
140
143
var i = 0
141
144
while i < NodeSize do
142
145
if contains(i) then elems(i) = op(offset + i, elems(i))
@@ -210,7 +213,7 @@ object SparseIntArray:
210
213
elems(i).foreachBinding(op, offset + i * elemSize)
211
214
i += 1
212
215
213
- def transform (op : ( Int , Value ) => Value , offset : Int ): Unit =
216
+ def transform (op : Transform , offset : Int ): Unit =
214
217
var i = 0
215
218
while i < NodeSize do
216
219
if elems(i) != null then
0 commit comments