Omit cv_convert_double for trivial conversions

Refs #982
This commit is contained in:
Derek Bankieris 2022-07-08 12:32:43 -05:00
parent c988052f85
commit 8fcd83e5e1

View File

@ -129,13 +129,23 @@ int vs_format_ascii(Trick::VariableReference * var, char *value) {
sprintf(value, "%s%u", value, (unsigned int)cv_convert_double(var->conversion_factor,*(unsigned int *)buf_ptr)); sprintf(value, "%s%u", value, (unsigned int)cv_convert_double(var->conversion_factor,*(unsigned int *)buf_ptr));
break; break;
case TRICK_LONG: case TRICK_LONG: {
sprintf(value, "%s%ld", value, (long)cv_convert_double(var->conversion_factor,*(long *)buf_ptr)); long l = *(long *)buf_ptr;
if (var->conversion_factor != cv_get_trivial()) {
l = (long)cv_convert_double(var->conversion_factor, l);
}
sprintf(value, "%s%ld", value, l);
break; break;
}
case TRICK_UNSIGNED_LONG: case TRICK_UNSIGNED_LONG: {
sprintf(value, "%s%lu", value, (unsigned long)cv_convert_double(var->conversion_factor,*(unsigned long *)buf_ptr)); unsigned long ul = *(unsigned long *)buf_ptr;
if (var->conversion_factor != cv_get_trivial()) {
ul = (unsigned long)cv_convert_double(var->conversion_factor, ul);
}
sprintf(value, "%s%lu", value, ul);
break; break;
}
case TRICK_FLOAT: case TRICK_FLOAT:
sprintf(value, "%s%.8g", value, cv_convert_float(var->conversion_factor,*(float *)buf_ptr)); sprintf(value, "%s%.8g", value, cv_convert_float(var->conversion_factor,*(float *)buf_ptr));
@ -145,21 +155,23 @@ int vs_format_ascii(Trick::VariableReference * var, char *value) {
sprintf(value, "%s%.16g", value, cv_convert_double(var->conversion_factor,*(double *)buf_ptr)); sprintf(value, "%s%.16g", value, cv_convert_double(var->conversion_factor,*(double *)buf_ptr));
break; break;
case TRICK_LONG_LONG: case TRICK_LONG_LONG: {
// This is a work-round for when terminate_time is not defined and is requested through variable server. long long ll = *(long long *)buf_ptr;
// When sim terminate time is not defined, the related variable is the max of the type. if (var->conversion_factor != cv_get_trivial()) {
// The unit conversion calculation will throw floating point exception. ll = (long long)cv_convert_double(var->conversion_factor, ll);
// For trick_sys.sched.terminate_time, there is no need to perform such conversion.
if (!var_name.compare("trick_sys.sched.terminate_time")) {
sprintf(value, "%s%lld", value, *(long long *)buf_ptr);
} else {
sprintf(value, "%s%lld", value, (long long)cv_convert_double(var->conversion_factor,*(long long *)buf_ptr));
} }
sprintf(value, "%s%lld", value, ll);
break; break;
}
case TRICK_UNSIGNED_LONG_LONG: case TRICK_UNSIGNED_LONG_LONG: {
sprintf(value, "%s%llu", value,(unsigned long long)cv_convert_double(var->conversion_factor,*(unsigned long long *)buf_ptr)); unsigned long long ull = *(unsigned long long *)buf_ptr;
if (var->conversion_factor != cv_get_trivial()) {
ull = (unsigned long long)cv_convert_double(var->conversion_factor, ull);
}
sprintf(value, "%s%llu", value, ull);
break; break;
}
case TRICK_NUMBER_OF_TYPES: case TRICK_NUMBER_OF_TYPES:
sprintf(value, "BAD_REF" ); sprintf(value, "BAD_REF" );