diff --git a/splinterpolator.h b/splinterpolator.h index 53cece972e86328a8f8300e2642682a732432dbd..fbfd6a43a0b619a73eb99feb10b9c2c821935c15 100644 --- a/splinterpolator.h +++ b/splinterpolator.h @@ -1439,16 +1439,19 @@ void Splinterpolator<T>::assign(const Splinterpolator<T>& src) template<class T> bool Splinterpolator<T>::calc_coef(const T *data_or_coefs, bool copy, bool data_are_coefs) { - if (_order < 2 && !copy) { _cptr = data_or_coefs; return(false); } + // No copy, and nearest/interp, or pre-calculated + // coefficients - just take a pointer to the data + if (_order < 2 && !copy) { _cptr = data_or_coefs; return(false); } + if (data_are_coefs && !copy) { _cptr = data_or_coefs; return(false); } // Allocate memory and put the original data into _coef - // unsigned int ts=1; for (unsigned int i=0; i<_dim.size(); i++) ts *= _dim[i]; _coef = new T[ts]; memcpy(_coef,data_or_coefs,ts*sizeof(T)); - if (_order < 2) return(true); // If nearest neighbour or linear, that's all we need + if (_order < 2) return(true); // If nearest neighbour or linear, that's all we need + if (data_are_coefs) return(true); // User has given us pre-calculated coefficients // Loop over all non-singleton dimensions and deconvolve along them //