7
7
import org .enso .table .data .column .operation .StorageIterators ;
8
8
import org .enso .table .data .column .operation .map .BinaryMapOperation ;
9
9
import org .enso .table .data .column .operation .map .MapOperationProblemAggregator ;
10
- import org .enso .table .data .column .storage .*;
10
+ import org .enso .table .data .column .storage .ColumnDoubleStorage ;
11
+ import org .enso .table .data .column .storage .ColumnLongStorage ;
12
+ import org .enso .table .data .column .storage .ColumnStorage ;
13
+ import org .enso .table .data .column .storage .ColumnStorageFacade ;
14
+ import org .enso .table .data .column .storage .Storage ;
11
15
import org .enso .table .data .column .storage .numeric .BigDecimalStorage ;
12
16
import org .enso .table .data .column .storage .numeric .BigIntegerStorage ;
13
17
import org .enso .table .data .column .storage .numeric .DoubleStorage ;
20
24
/** An operation expecting a numeric argument and returning a numeric column. */
21
25
public abstract class NumericBinaryOpImplementation <T extends Number , I extends Storage <? super T >>
22
26
extends BinaryMapOperation <T , I > {
27
+ public static ColumnStorage <BigDecimal > asBigDecimal (ColumnStorage <BigInteger > storage ) {
28
+ return new ColumnStorageFacade <>(storage , BigDecimal ::new );
29
+ }
30
+
31
+ public static ColumnStorage <BigDecimal > asBigDecimal (ColumnDoubleStorage storage ) {
32
+ return new ColumnStorageFacade <>(storage , BigDecimal ::valueOf );
33
+ }
34
+
35
+ public static ColumnStorage <BigDecimal > asBigDecimal (ColumnLongStorage storage ) {
36
+ return new ColumnStorageFacade <>(storage , BigDecimal ::valueOf );
37
+ }
38
+
39
+ public static ColumnStorage <BigInteger > asBigInteger (ColumnLongStorage storage ) {
40
+ return new ColumnStorageFacade <>(storage , BigInteger ::valueOf );
41
+ }
23
42
24
43
protected abstract double doDouble (
25
44
double a , double b , long ix , MapOperationProblemAggregator problemAggregator );
@@ -76,20 +95,17 @@ public Storage<?> runBinaryMap(
76
95
case BigDecimalStorage s -> runBigDecimalMap (
77
96
s , BigDecimal .valueOf (argAsDouble ), problemAggregator );
78
97
case BigIntegerStorage s -> runDoubleMap (
79
- new DoubleStorageFacade <>( s , BigInteger :: doubleValue ), argAsDouble , problemAggregator );
98
+ DoubleStorageFacade . forBigInteger ( s ), argAsDouble , problemAggregator );
80
99
case ColumnDoubleStorage s -> runDoubleMap (s , argAsDouble , problemAggregator );
81
100
case ColumnLongStorage s -> runDoubleLongMap (s , argAsDouble , problemAggregator );
82
101
default -> throw newUnsupported (storage );
83
102
};
84
103
} else if (arg instanceof BigDecimal bd ) {
85
104
return switch (storage ) {
86
105
case BigDecimalStorage s -> runBigDecimalMap (s , bd , problemAggregator );
87
- case BigIntegerStorage s -> runBigDecimalMap (
88
- new ColumnStorageFacade <>(s , BigDecimal ::new ), bd , problemAggregator );
89
- case ColumnDoubleStorage s -> runBigDecimalMap (
90
- new ColumnStorageFacade <>(s , BigDecimal ::valueOf ), bd , problemAggregator );
91
- case ColumnLongStorage s -> runBigDecimalMap (
92
- new ColumnStorageFacade <>(s , BigDecimal ::valueOf ), bd , problemAggregator );
106
+ case BigIntegerStorage s -> runBigDecimalMap (asBigDecimal (s ), bd , problemAggregator );
107
+ case ColumnDoubleStorage s -> runBigDecimalMap (asBigDecimal (s ), bd , problemAggregator );
108
+ case ColumnLongStorage s -> runBigDecimalMap (asBigDecimal (s ), bd , problemAggregator );
93
109
default -> throw newUnsupported (storage );
94
110
};
95
111
} else {
@@ -102,46 +118,38 @@ public Storage<? extends Number> runZip(
102
118
I storage , Storage <?> arg , MapOperationProblemAggregator problemAggregator ) {
103
119
if (storage instanceof ColumnDoubleStorage lhs ) {
104
120
return switch (arg ) {
105
- case BigDecimalStorage rhs -> runBigDecimalZip (
106
- new ColumnStorageFacade <>(lhs , BigDecimal ::valueOf ), rhs , problemAggregator );
121
+ case BigDecimalStorage rhs -> runBigDecimalZip (asBigDecimal (lhs ), rhs , problemAggregator );
107
122
case BigIntegerStorage rhs -> runDoubleZip (
108
- lhs , new DoubleStorageFacade <> (rhs , BigInteger :: doubleValue ), problemAggregator );
123
+ lhs , DoubleStorageFacade . forBigInteger (rhs ), problemAggregator );
109
124
case ColumnDoubleStorage rhs -> runDoubleZip (lhs , rhs , problemAggregator );
110
125
case ColumnLongStorage rhs -> runDoubleZip (
111
- lhs , new DoubleStorageFacade <> (rhs , Long :: doubleValue ), problemAggregator );
126
+ lhs , DoubleStorageFacade . forLong (rhs ), problemAggregator );
112
127
default -> throw newUnsupported (arg );
113
128
};
114
129
} else if (storage instanceof ColumnLongStorage lhs ) {
115
130
return switch (arg ) {
116
- case BigDecimalStorage rhs -> runBigDecimalZip (
117
- new ColumnStorageFacade <>(lhs , BigDecimal ::valueOf ), rhs , problemAggregator );
118
- case BigIntegerStorage rhs -> runBigIntegerZip (
119
- new ColumnStorageFacade <>(lhs , BigInteger ::valueOf ), rhs , problemAggregator );
131
+ case BigDecimalStorage rhs -> runBigDecimalZip (asBigDecimal (lhs ), rhs , problemAggregator );
132
+ case BigIntegerStorage rhs -> runBigIntegerZip (asBigInteger (lhs ), rhs , problemAggregator );
120
133
case ColumnDoubleStorage rhs -> runDoubleZip (
121
- new DoubleStorageFacade <> (lhs , Long :: doubleValue ), rhs , problemAggregator );
134
+ DoubleStorageFacade . forLong (lhs ), rhs , problemAggregator );
122
135
case ColumnLongStorage rhs -> runLongZip (lhs , rhs , problemAggregator );
123
136
default -> throw newUnsupported (arg );
124
137
};
125
138
} else if (storage instanceof BigIntegerStorage lhs ) {
126
139
return switch (arg ) {
127
- case BigDecimalStorage rhs -> runBigDecimalZip (
128
- new ColumnStorageFacade <>(lhs , BigDecimal ::new ), rhs , problemAggregator );
140
+ case BigDecimalStorage rhs -> runBigDecimalZip (asBigDecimal (lhs ), rhs , problemAggregator );
129
141
case BigIntegerStorage rhs -> runBigIntegerZip (lhs , rhs , problemAggregator );
130
142
case ColumnDoubleStorage rhs -> runDoubleZip (
131
- new DoubleStorageFacade <>(lhs , BigInteger ::doubleValue ), rhs , problemAggregator );
132
- case ColumnLongStorage rhs -> runBigIntegerZip (
133
- lhs , new ColumnStorageFacade <>(rhs , BigInteger ::valueOf ), problemAggregator );
143
+ DoubleStorageFacade .forBigInteger (lhs ), rhs , problemAggregator );
144
+ case ColumnLongStorage rhs -> runBigIntegerZip (lhs , asBigInteger (rhs ), problemAggregator );
134
145
default -> throw newUnsupported (arg );
135
146
};
136
147
} else if (storage instanceof BigDecimalStorage lhs ) {
137
148
return switch (arg ) {
138
149
case BigDecimalStorage rhs -> runBigDecimalZip (lhs , rhs , problemAggregator );
139
- case BigIntegerStorage rhs -> runBigDecimalZip (
140
- lhs , new ColumnStorageFacade <>(rhs , BigDecimal ::new ), problemAggregator );
141
- case ColumnDoubleStorage rhs -> runBigDecimalZip (
142
- lhs , new ColumnStorageFacade <>(rhs , BigDecimal ::valueOf ), problemAggregator );
143
- case ColumnLongStorage rhs -> runBigDecimalZip (
144
- lhs , new ColumnStorageFacade <>(rhs , BigDecimal ::valueOf ), problemAggregator );
150
+ case BigIntegerStorage rhs -> runBigDecimalZip (lhs , asBigDecimal (rhs ), problemAggregator );
151
+ case ColumnDoubleStorage rhs -> runBigDecimalZip (lhs , asBigDecimal (rhs ), problemAggregator );
152
+ case ColumnLongStorage rhs -> runBigDecimalZip (lhs , asBigDecimal (rhs ), problemAggregator );
145
153
default -> throw newUnsupported (arg );
146
154
};
147
155
} else {
@@ -155,8 +163,7 @@ private static Storage<? extends Number> allNullStorageOfSameType(Storage<?> sto
155
163
case BigIntegerStorage s -> BigIntegerStorage .makeEmpty (storage .getSize ());
156
164
case BigDecimalStorage s -> BigDecimalStorage .makeEmpty (storage .getSize ());
157
165
case ColumnDoubleStorage s -> DoubleStorage .makeEmpty (storage .getSize ());
158
- default -> throw new IllegalStateException (
159
- "Unsupported storage: " + storage .getClass ().getCanonicalName ());
166
+ default -> throw newUnsupported (storage );
160
167
};
161
168
}
162
169
0 commit comments