Skip to content

Commit 1bc4d15

Browse files
committed
reverted ominous oops and close #1650
1 parent d42a346 commit 1bc4d15

File tree

1 file changed

+5
-47
lines changed

1 file changed

+5
-47
lines changed

src/basic_fun.cpp

+5-47
Original file line numberDiff line numberDiff line change
@@ -2973,9 +2973,9 @@ namespace lib {
29732973
e->Throw(
29742974
"Array must have " + i2s(sumDim) +
29752975
" dimensions: " + e->GetParString(0));
2976+
29762977
// Preserve , fast , has preference .
29772978
if (preserve) {
2978-
if (p0->Dim(sumDim)==1) return p0->Dup();
29792979
if (!cumulative) {
29802980
switch (p0->Type()) {
29812981
case GDL_BYTE: return total_over_dim_template<DByteGDL>(static_cast<DByteGDL*> (p0), srcDim, sumDim - 1, false);
@@ -3012,8 +3012,8 @@ namespace lib {
30123012
if (useIntegerArithmetic) {
30133013
if (!cumulative) {
30143014
switch (p0->Type()) {
3015-
case GDL_ULONG64: if (p0->Dim(sumDim)==1) return p0->Dup(); else return total_over_dim_template<DULong64GDL>(static_cast<DULong64GDL*> (p0), srcDim, sumDim - 1, false);
3016-
case GDL_LONG64: if (p0->Dim(sumDim)==1) return p0->Dup(); else return total_over_dim_template<DLong64GDL>(static_cast<DLong64GDL*> (p0), srcDim, sumDim - 1, false);
3015+
case GDL_ULONG64: return total_over_dim_template<DULong64GDL>(static_cast<DULong64GDL*> (p0), srcDim, sumDim - 1, false);
3016+
case GDL_LONG64: return total_over_dim_template<DLong64GDL>(static_cast<DLong64GDL*> (p0), srcDim, sumDim - 1, false);
30173017
// We use GDL_LONG64 unless the input is GDL_ULONG64
30183018
case GDL_BYTE:
30193019
case GDL_INT:
@@ -3027,7 +3027,6 @@ namespace lib {
30273027
// Conver to Long64
30283028
{
30293029
DLong64GDL* p0L64 = static_cast<DLong64GDL*> (p0->Convert2(GDL_LONG64, BaseGDL::COPY));
3030-
if (p0->Dim(sumDim)==1) return p0L64;
30313030
Guard<DLong64GDL> guard(p0L64);
30323031
return total_over_dim_template<DLong64GDL>(p0L64, srcDim, sumDim - 1, false);
30333032
}
@@ -3036,8 +3035,8 @@ namespace lib {
30363035

30373036
} else {
30383037
switch (p0->Type()) {
3039-
case GDL_ULONG64: if (p0->Dim(sumDim)==1) return p0->Dup(); else return total_over_dim_cu_template<DULong64GDL, DULong64>(static_cast<DULong64GDL*> (p0->Dup()), sumDim - 1, false);
3040-
case GDL_LONG64: if (p0->Dim(sumDim)==1) return p0->Dup(); else return total_over_dim_cu_template<DLong64GDL, DLong64>(static_cast<DLong64GDL*> (p0->Dup()), sumDim - 1, false);
3038+
case GDL_ULONG64: return total_over_dim_cu_template<DULong64GDL,DULong64>(static_cast<DULong64GDL*> (p0->Dup()), sumDim - 1, false);
3039+
case GDL_LONG64: return total_over_dim_cu_template<DLong64GDL,DLong64>(static_cast<DLong64GDL*> (p0->Dup()), sumDim - 1, false);
30413040
case GDL_BYTE:
30423041
case GDL_INT:
30433042
case GDL_UINT:
@@ -3049,8 +3048,6 @@ namespace lib {
30493048
case GDL_COMPLEXDBL:
30503049
{
30513050
DLong64GDL* p0L64 = static_cast<DLong64GDL*> (p0->Convert2(GDL_LONG64, BaseGDL::COPY));
3052-
if (p0->Dim(sumDim)==1) return p0L64;
3053-
Guard<DLong64GDL> guard(p0L64);
30543051
return total_over_dim_cu_template<DLong64GDL, DLong64>(p0L64, sumDim - 1, false);
30553052
}
30563053
default: assert(false);
@@ -3060,22 +3057,6 @@ namespace lib {
30603057

30613058
// Next, upgrade single values, and downgrade result if needed
30623059
if (doublePrecision) {
3063-
if (p0->Dim(sumDim) == 1) {
3064-
switch (p0->Type()) {
3065-
case GDL_DOUBLE: return p0->Dup();
3066-
case GDL_COMPLEXDBL:return p0->Dup();
3067-
case GDL_COMPLEX: return (p0)->Convert2(GDL_COMPLEXDBL, BaseGDL::COPY);
3068-
case GDL_ULONG64:
3069-
case GDL_LONG64:
3070-
case GDL_BYTE:
3071-
case GDL_INT:
3072-
case GDL_UINT:
3073-
case GDL_LONG:
3074-
case GDL_ULONG:
3075-
case GDL_FLOAT: return (p0)->Convert2(GDL_DOUBLE, BaseGDL::COPY);
3076-
default: assert(false);
3077-
}
3078-
}
30793060
if (!cumulative) {
30803061
switch (p0->Type()) {
30813062
case GDL_DOUBLE: return total_over_dim_template<DDoubleGDL>(static_cast<DDoubleGDL*> (p0), srcDim, sumDim - 1, nan);
@@ -3142,29 +3123,6 @@ namespace lib {
31423123
}
31433124
}// promote to double
31443125
else { //does not promote, but eventually downgrade double results if downgradeDoubleResult is true
3145-
if (p0->Dim(sumDim) == 1) {
3146-
switch (p0->Type()) {
3147-
case GDL_FLOAT: return p0->Dup();
3148-
case GDL_DOUBLE:
3149-
if (downgradeDoubleResult) return p0->Convert2(GDL_FLOAT, BaseGDL::COPY);
3150-
else return p0->Dup();
3151-
case GDL_COMPLEX: return p0->Dup();
3152-
case GDL_COMPLEXDBL: if (downgradeDoubleResult) return p0->Convert2(GDL_COMPLEX, BaseGDL::COPY);
3153-
else return p0->Dup();
3154-
case GDL_ULONG64:
3155-
case GDL_LONG64:
3156-
if (downgradeDoubleResult) return p0->Convert2(GDL_FLOAT, BaseGDL::COPY);
3157-
else return p0->Convert2(GDL_DOUBLE, BaseGDL::COPY);
3158-
case GDL_BYTE:
3159-
case GDL_INT:
3160-
case GDL_UINT:
3161-
case GDL_LONG:
3162-
case GDL_ULONG:
3163-
if (downgradeDoubleResult) return p0->Convert2(GDL_FLOAT, BaseGDL::COPY);
3164-
else return p0->Convert2(GDL_DOUBLE, BaseGDL::COPY);
3165-
default: assert(false);
3166-
}
3167-
}
31683126
if (!cumulative) {
31693127
switch (p0->Type()) {
31703128
case GDL_FLOAT: return total_over_dim_template<DFloatGDL>(static_cast<DFloatGDL*> (p0), srcDim, sumDim - 1, nan);

0 commit comments

Comments
 (0)