|
41 | 41 |
|
42 | 42 |
|
43 | 43 | (defn- reduce-column-buffer |
44 | | - [rfn acc src missing primitive-missing-value sidx eidx] |
| 44 | + [rfn acc src missing primitive-missing-value missing-value sidx eidx] |
45 | 45 | (let [sidx (long sidx) |
46 | 46 | eidx (long eidx) |
47 | 47 | ^RoaringBitmap missing missing |
|
52 | 52 | (RoaringBitmap/and missing (bitmap/->bitmap sidx eidx)))) |
53 | 53 | ^java.util.function.LongBinaryOperator next-missing |
54 | 54 | (hamf-fn/long-binary-operator |
55 | | - sidx next-missing-idx |
56 | | - (if (== sidx next-missing-idx) |
57 | | - (long (if (.hasNext int-iter) (Integer/toUnsignedLong (.next int-iter)) -1)) |
58 | | - next-missing-idx)) |
| 55 | + sidx next-missing-idx |
| 56 | + (if (== sidx next-missing-idx) |
| 57 | + (long (if (.hasNext int-iter) (Integer/toUnsignedLong (.next int-iter)) -1)) |
| 58 | + next-missing-idx)) |
59 | 59 | missing-idx (.applyAsLong next-missing 0 0)] |
60 | 60 | (cond |
61 | 61 | (instance? IFn$OLO rfn) |
|
90 | 90 | missing-idx missing-idx] |
91 | 91 | (if (< sidx eidx) |
92 | 92 | (let [acc (rfn acc (if (== sidx missing-idx) |
93 | | - nil |
| 93 | + missing-value |
94 | 94 | (.readObject src sidx)))] |
95 | 95 | (if (reduced? acc) |
96 | 96 | (deref acc) |
97 | 97 | (recur (unchecked-inc sidx) acc (.applyAsLong next-missing sidx missing-idx)))) |
98 | 98 | acc))))) |
99 | 99 |
|
100 | 100 | (defn- kv-reduce-column-buffer |
101 | | - [rfn acc src missing primitive-missing-value sidx eidx] |
| 101 | + [rfn acc src missing primitive-missing-value missing-value op-dtype sidx eidx] |
102 | 102 | (let [sidx (long sidx) |
103 | 103 | eidx (long eidx) |
104 | 104 | ^RoaringBitmap missing missing |
|
130 | 130 | (defn ^:no-doc make-column-buffer |
131 | 131 | (^Buffer [^RoaringBitmap missing data dtype op-dtype] |
132 | 132 | (let [^Buffer src (dtype-proto/->buffer data) |
133 | | - missing-value (column-base/datatype->missing-value dtype) |
| 133 | + missing-value (when (identical? dtype op-dtype) |
| 134 | + (column-base/datatype->missing-value dtype)) |
134 | 135 | primitive-missing-value (column-base/datatype->packed-missing-value dtype)] |
135 | 136 | ;;Sometimes we can utilize a pure passthrough. |
136 | 137 | (if (.isEmpty missing) |
|
170 | 171 | (readObject [rdr idx] (.readObject this (+ idx sidx))) |
171 | 172 | (reduce [this rfn acc] |
172 | 173 | (reduce-column-buffer rfn acc src missing |
173 | | - primitive-missing-value sidx eidx)) |
| 174 | + primitive-missing-value missing-value |
| 175 | + sidx eidx)) |
174 | 176 | (kvreduce [this rfn acc] |
175 | 177 | (kv-reduce-column-buffer rfn acc src missing primitive-missing-value sidx eidx)))))) |
176 | 178 | (readLong [this idx] |
|
182 | 184 | Double/NaN |
183 | 185 | (.readDouble src idx))) |
184 | 186 | (readObject [this idx] |
185 | | - (when-not (.contains missing idx) |
| 187 | + (if (.contains missing idx) |
| 188 | + missing-value |
186 | 189 | (.readObject src idx))) |
187 | 190 | (writeLong [this idx val] |
188 | 191 | (.remove missing (unchecked-int idx)) |
|
197 | 200 | (.writeObject src idx val)) |
198 | 201 | (.add missing (unchecked-int idx)))) |
199 | 202 | (reduce [this rfn acc] |
200 | | - (reduce-column-buffer rfn acc src missing primitive-missing-value |
| 203 | + (reduce-column-buffer rfn acc src missing primitive-missing-value missing-value |
201 | 204 | 0 (.lsize src))) |
202 | 205 | (kvreduce [this rfn acc] |
203 | 206 | (kv-reduce-column-buffer rfn acc src missing primitive-missing-value |
|
0 commit comments