Exemple #1
0
/* Get the list of all the variables in the model */
fmi1_import_variable_list_t* fmi1_import_get_variable_list(fmi1_import_t* fmu) {
	jm_vector(jm_voidp)* vars;
    fmi1_import_variable_list_t* vl;
    size_t nv, i;
	if(!fmu->md) {
		jm_log_error(fmu->callbacks, module,"No FMU is loaded");
		return 0;
	}
	vars = fmi1_xml_get_variables_original_order(fmu->md);
	if(vars)
		nv = jm_vector_get_size(jm_voidp)(vars);
	else
		nv = 0;
    vl = fmi1_import_alloc_variable_list(fmu, nv);
    if(!vl) return 0;
    for(i = 0; i< nv; i++) {
        jm_vector_set_item(jm_voidp)(&vl->variables, i, jm_vector_get_item(jm_voidp)(vars, i));
    }
    return vl;
}
/**
	\brief Collect model information by counting the number of variables with specific properties and fillinf in fmi1_import_model_counts_t struct.
	\param fmu - An fmu object as returned by fmi1_import_parse_xml().
	\param counts - a pointer to a preallocated struct.
*/
void fmi1_import_collect_model_counts(fmi1_import_t* fmu, fmi1_import_model_counts_t* counts) {
	jm_vector(jm_voidp)* vars = fmi1_xml_get_variables_original_order(fmu->md);
    size_t nv, i;
	memset(counts,0,sizeof(fmi1_import_model_counts_t));
	if(!vars) return;
    nv = jm_vector_get_size(jm_voidp)(vars);	
    for(i = 0; i< nv; i++) {
		fmi1_xml_variable_t* var = (fmi1_xml_variable_t*)jm_vector_get_item(jm_voidp)(vars, i); 
		switch (fmi1_xml_get_variability(var)) {
		case fmi1_variability_enu_constant:
			counts->num_constants++;
			break;
		case fmi1_variability_enu_parameter:
			counts->num_parameters++;
			break;
		case fmi1_variability_enu_discrete:
			counts->num_discrete++;
			break;
		case fmi1_variability_enu_continuous:
			counts->num_continuous++;
			break;
		default:
			assert(0);
		}
		switch(fmi1_xml_get_causality(var)) {
		case fmi1_causality_enu_none:
			counts->num_causality_none++;
			break;
		case fmi1_causality_enu_input:
			counts->num_inputs++;
			break;
		case fmi1_causality_enu_output:
			counts->num_outputs++;
			break;
		case fmi1_causality_enu_internal:
			counts->num_internal++;
			break;
		default: assert(0);
		}
		switch(fmi1_xml_get_variable_base_type(var)) {
		case fmi1_base_type_real:
			counts->num_real_vars++;
			break;
		case fmi1_base_type_int:
			counts->num_integer_vars++;
			break;
		case fmi1_base_type_bool:
			counts->num_bool_vars++;
			break;
		case fmi1_base_type_str:
			counts->num_string_vars++;
			break;
		case fmi1_base_type_enum:
			counts->num_enum_vars++;
			break;
		default:
			assert(0);
		}
    }
    return;
}