@@ -2973,9 +2973,9 @@ namespace lib {
2973
2973
e->Throw (
2974
2974
" Array must have " + i2s (sumDim) +
2975
2975
" dimensions: " + e->GetParString (0 ));
2976
+
2976
2977
// Preserve , fast , has preference .
2977
2978
if (preserve) {
2978
- if (p0->Dim (sumDim)==1 ) return p0->Dup ();
2979
2979
if (!cumulative) {
2980
2980
switch (p0->Type ()) {
2981
2981
case GDL_BYTE: return total_over_dim_template<DByteGDL>(static_cast <DByteGDL*> (p0), srcDim, sumDim - 1 , false );
@@ -3012,8 +3012,8 @@ namespace lib {
3012
3012
if (useIntegerArithmetic) {
3013
3013
if (!cumulative) {
3014
3014
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 );
3017
3017
// We use GDL_LONG64 unless the input is GDL_ULONG64
3018
3018
case GDL_BYTE:
3019
3019
case GDL_INT:
@@ -3027,7 +3027,6 @@ namespace lib {
3027
3027
// Conver to Long64
3028
3028
{
3029
3029
DLong64GDL* p0L64 = static_cast <DLong64GDL*> (p0->Convert2 (GDL_LONG64, BaseGDL::COPY));
3030
- if (p0->Dim (sumDim)==1 ) return p0L64;
3031
3030
Guard<DLong64GDL> guard (p0L64);
3032
3031
return total_over_dim_template<DLong64GDL>(p0L64, srcDim, sumDim - 1 , false );
3033
3032
}
@@ -3036,8 +3035,8 @@ namespace lib {
3036
3035
3037
3036
} else {
3038
3037
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 );
3041
3040
case GDL_BYTE:
3042
3041
case GDL_INT:
3043
3042
case GDL_UINT:
@@ -3049,8 +3048,6 @@ namespace lib {
3049
3048
case GDL_COMPLEXDBL:
3050
3049
{
3051
3050
DLong64GDL* p0L64 = static_cast <DLong64GDL*> (p0->Convert2 (GDL_LONG64, BaseGDL::COPY));
3052
- if (p0->Dim (sumDim)==1 ) return p0L64;
3053
- Guard<DLong64GDL> guard (p0L64);
3054
3051
return total_over_dim_cu_template<DLong64GDL, DLong64>(p0L64, sumDim - 1 , false );
3055
3052
}
3056
3053
default : assert (false );
@@ -3060,22 +3057,6 @@ namespace lib {
3060
3057
3061
3058
// Next, upgrade single values, and downgrade result if needed
3062
3059
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
- }
3079
3060
if (!cumulative) {
3080
3061
switch (p0->Type ()) {
3081
3062
case GDL_DOUBLE: return total_over_dim_template<DDoubleGDL>(static_cast <DDoubleGDL*> (p0), srcDim, sumDim - 1 , nan );
@@ -3142,29 +3123,6 @@ namespace lib {
3142
3123
}
3143
3124
}// promote to double
3144
3125
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
- }
3168
3126
if (!cumulative) {
3169
3127
switch (p0->Type ()) {
3170
3128
case GDL_FLOAT: return total_over_dim_template<DFloatGDL>(static_cast <DFloatGDL*> (p0), srcDim, sumDim - 1 , nan );
0 commit comments