Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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 );
}
Example #4
0
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 );
}
Example #5
0
/*!
 * 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;
}
Example #6
0
/*!
 * 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;
}