void R_ut_convert(const double *x, int *count, char * const *units_from, char * const *units_to, double *rv) { ut_unit *from, *to; cv_converter *conv; int one = 1; if (sys == NULL) { R_ut_init(&one); } ut_trim(*units_from, enc); ut_trim(*units_to, enc); from = ut_parse(sys, *units_from, enc); if (from == NULL) { handle_error("R_ut_convert"); return; } to = ut_parse(sys, *units_to, enc); if (from == NULL) { handle_error("R_ut_convert"); return; } conv = ut_get_converter(from, to); if (conv == NULL) { handle_error("R_ut_convert"); return; } cv_convert_doubles(conv, x, (size_t) *count, rv); // Cleanup cv_free(conv); ut_free(to); ut_free(from); return; }
static double* compositeConvertDoubles( const cv_converter* const conv, const double* const in, const size_t count, double* out) { if (conv == NULL || in == NULL || out == NULL) { out = NULL; } else { out = cv_convert_doubles( conv->composite.second, cv_convert_doubles(conv->composite.first, in, count, out), count, out); } return out; }
value ml_cv_convert_array( value converter, value src, value dest ) { CAMLparam3( converter, src, dest ); size_t n; n = Wosize_val( dest ) / Double_wosize; if ( n > ( Wosize_val( src ) / Double_wosize ) ) { caml_raise_with_arg( *caml_named_value( "ut status exception" ), Val_int( UT_BAD_ARG ) ); } cv_convert_doubles( UD_cv_converter_val( converter ), (double *)src, n, (double *)dest ); CAMLreturn( Val_unit ); }
value ml_cv_convert_bigarray( value converter, value src, value dest ) { CAMLparam3( converter, src, dest ); int n; n = Bigarray_val( dest )->dim[0]; if ( n > Bigarray_val( src )->dim[0] ) { caml_raise_with_arg( *caml_named_value( "ut status exception" ), Val_int( UT_BAD_ARG ) ); } if ( (Bigarray_val( src )->flags & BIGARRAY_KIND_MASK) == BIGARRAY_FLOAT32 ) { cv_convert_floats( UD_cv_converter_val( converter ), Data_bigarray_val( src ), n, Data_bigarray_val( dest ) ); } else if ( (Bigarray_val( src )->flags & BIGARRAY_KIND_MASK) == BIGARRAY_FLOAT64 ) { cv_convert_doubles( UD_cv_converter_val( converter ), Data_bigarray_val( src ), n, Data_bigarray_val( dest ) ); } else { caml_raise_with_arg( *caml_named_value( "ut status exception" ), Val_int( UT_BAD_ARG ) ); } CAMLreturn( Val_unit ); }
/*! * Converts in-place \a values (which is expressed in the converter's from unit) * to this converter's to unit. If the converter is invalid, the behaviour is undefined. * This function returns a reference to \a values as a convenience. */ QVector<qreal> &UdUnitConverter::convert(QVector<qreal> &values) { cv_convert_doubles(m_converter, values.data(), values.size(), values.data()); return values; }
/*! * Returns \a values (which is expressed in the converter's from unit) converted * to this converter's to unit. If the converter is invalid, the behaviour is undefined. */ QVector<qreal> UdUnitConverter::convert(const QVector<qreal> values) { QVector<qreal> result(values.size()); cv_convert_doubles(m_converter, values.data(), values.size(), result.data()); return result; }