Skip to content

Commit

Permalink
added get-functions to generate GetNoParams(<int>)
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1484 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
x02lucpo committed Feb 9, 2005
1 parent 3381133 commit b6d8a03
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 19 deletions.
29 changes: 28 additions & 1 deletion modeq/runtime/tornadoext.cpp
Expand Up @@ -60,11 +60,11 @@ extern "C"
search2 != variables.end();
++search2)
{
//output << search2->second.name << " : " << search2->second.direction << " = " << search2->second.type << endl;
if((search2->second.direction == direction)
&& (search2->second.type == type))
{
return_val++;

}
}
return return_val;
Expand Down Expand Up @@ -478,5 +478,32 @@ extern "C"
}
RML_END_LABEL

RML_BEGIN_LABEL(TORNADOEXT__get_5fno_5fof_5fvars_5fwith_5fdir_5fand_5ftype_5ffrom_5fclass)
{
char* dir_name = RML_STRINGDATA(rmlA0);
char* type_name = RML_STRINGDATA(rmlA1);
char* class_name = RML_STRINGDATA(rmlA2);

string str_key = string(class_name);


int ret_val = 0;
map<string, map<string,variable> >::iterator search;
search = generated_classes.find(str_key);

if(search != generated_classes.end()){

ret_val = get_no_of_direction_vars_with_type(string(dir_name),
string(type_name),
search->second);
}


rmlA0 = (void*) mk_icon(ret_val);

RML_TAILCALLK(rmlSC);
}
RML_END_LABEL


} // extern "C"
50 changes: 36 additions & 14 deletions modeq/tornado.rml
Expand Up @@ -365,7 +365,7 @@ end
relation get_start_value: (DAE.StartValue) => string =

rule SimCodegen.print_exp_cpp_str(e) => res
& print res & print " <- \n"
(* & print res & print " <- \n" *)
--------------------------------------
get_start_value(SOME(e)) => res

Expand All @@ -392,11 +392,11 @@ end
=> (string,string,
string,string,string,string,string) =

rule print "-get_direction_for_variable: " & print name
& print " in class " & print class_name & print "\n" &
int_eq(1,0) => true
---------------------------------
get_direction_for_variable(name,class_name,dae) => fail
(* rule print "-get_direction_for_variable: " & print name *)
(* & print " in class " & print class_name & print "\n" & *)
(* int_eq(1,0) => true *)
(* --------------------------------- *)
(* get_direction_for_variable(name,class_name,dae) => fail *)

rule find_dae_var(name,class_name,dae)
=> (var as DAELow.VAR(cr,DAELow.VARIABLE,DAE.OUTPUT,_,_,_,_,start,_,_,_)) &
Expand Down Expand Up @@ -666,9 +666,11 @@ end
generate_constructor_parameters(dae) => (parameters,noParamsVar_str') &
generate_links(dae,comp_name_list) => (links) &

generate_no_of_strings("AlgStateVarValues") => no_alg_values_str &
generate_no_of_strings("ParamValues") => no_param_values_str &
generate_no_of_strings("DerStateVarValues") => no_of_der_state_values_str &
generate_no_of_strings("","parameter",cname," SetNoParams") => no_param_var_str &

generate_no_of_values_strings("AlgStateVarValues") => no_alg_values_str &
generate_no_of_values_strings("ParamValues") => no_param_values_str &
generate_no_of_values_strings("DerStateVarValues") => no_of_der_state_values_str &

Util.string_append_list(["C",cname,"::\n",
"C",cname,"(const wchar_t* Name)\n",
Expand All @@ -677,6 +679,8 @@ end
" SetDesc(L\"",cname," test.\");\n",
"\n",
"CDummy m_Dummy;\n\n",
no_param_var_str,
"\n",
parameters,
"\n",
" SetNoIndepVars(1);\n",
Expand Down Expand Up @@ -719,18 +723,36 @@ end
(**
** generates the strings for "SetNo<...>VarValues(<int>)"
**)
relation generate_no_of_strings:(string) => string =
relation generate_no_of_values_strings:(string) => string =

rule TORNADOEXT.get_no_of_vars_with_type(name) => no_of_values &
no_of_values = 0
-------------------------------------
generate_no_of_strings(name) => ""
generate_no_of_values_strings(name) => ""

rule TORNADOEXT.get_no_of_vars_with_type(name) => no_of_values &
int_string(no_of_values) => values &
Util.string_append_list([" SetNo",name,"(",values,");\n"]) => res
-------------------------------------
generate_no_of_strings(name) => res
generate_no_of_values_strings(name) => res


end
(**
** generates the strings for "SetNo<...>Var(<int>)"
**)
relation generate_no_of_strings:(string,string,string,string) => string =

rule TORNADOEXT.get_no_of_vars_with_dir_and_type_from_class(dir,var_type,name) => no_of_values &
no_of_values = 0
-------------------------------------
generate_no_of_strings(dir,var_type,name,call) => ""

rule TORNADOEXT.get_no_of_vars_with_dir_and_type_from_class(dir,var_type,name) => no_of_values &
int_string(no_of_values) => values &
Util.string_append_list([call,"(",values,");\n"]) => res
-------------------------------------
generate_no_of_strings(dir,var_type,name,call) => res


end
Expand Down Expand Up @@ -758,7 +780,7 @@ end
** This relation update the index in the map in TORNADOEXT
** algebraic variable links.
** ARG1 the daelow.var list
** DO NOT CHANGE THE STRING FOR THE DIFFERENT TYPES BECAUSE THERE ARE USED IN generate_no_of_strings
** DO NOT CHANGE THE STRING FOR THE DIFFERENT TYPES BECAUSE THERE ARE USED IN generate_no_of_values_strings
**)
relation add_dae_var_to_index_map2:(DAELow.Var list) => () =

Expand Down Expand Up @@ -1595,7 +1617,7 @@ relation generate_constructor_parameters:(DAELow.DAELow) => (string, string) =
Util.string_delimit_list(lst,"\n") => res &

int_string no_of_vars => lenstr &
Util.string_append_list([" "(*SetNoParams(",lenstr,");\n"*)]) => prefix1 &
Util.string_append_list([""(*SetNoParams(",lenstr,");\n"*)]) => prefix1 &
Util.string_append_list([" SetNoParamValues(",lenstr,");\n"]) => prefix2 &
Util.string_append_list([prefix1,res,"\n"]) => res'
-------------------------------------------
Expand Down
11 changes: 8 additions & 3 deletions modeq/tornadoext.rml
Expand Up @@ -80,10 +80,15 @@ module TORNADOEXT:
relation get_flat_var_index: (string,string ) => int

(**
** arg1 the class name where is instatiated i.e. "Temp" for Temp_foo
** arg3 the type of the variable (algstatevar, parameter)
**
** arg1 the type of variables: "parameter"
**)
relation get_no_of_vars_with_type:(string) => int
(**
** arg1 the directio of variables: "output"
** arg1 the type of variables: "parameter"
** arg2 the class name
**
**)
relation get_no_of_vars_with_dir_and_type_from_class:(string,string,string) => int
end

29 changes: 28 additions & 1 deletion modeq/winruntime/tornadoext.cpp
Expand Up @@ -60,11 +60,11 @@ extern "C"
search2 != variables.end();
++search2)
{
//output << search2->second.name << " : " << search2->second.direction << " = " << search2->second.type << endl;
if((search2->second.direction == direction)
&& (search2->second.type == type))
{
return_val++;

}
}
return return_val;
Expand Down Expand Up @@ -478,5 +478,32 @@ extern "C"
}
RML_END_LABEL

RML_BEGIN_LABEL(TORNADOEXT__get_5fno_5fof_5fvars_5fwith_5fdir_5fand_5ftype_5ffrom_5fclass)
{
char* dir_name = RML_STRINGDATA(rmlA0);
char* type_name = RML_STRINGDATA(rmlA1);
char* class_name = RML_STRINGDATA(rmlA2);

string str_key = string(class_name);


int ret_val = 0;
map<string, map<string,variable> >::iterator search;
search = generated_classes.find(str_key);

if(search != generated_classes.end()){

ret_val = get_no_of_direction_vars_with_type(string(dir_name),
string(type_name),
search->second);
}


rmlA0 = (void*) mk_icon(ret_val);

RML_TAILCALLK(rmlSC);
}
RML_END_LABEL


} // extern "C"

0 comments on commit b6d8a03

Please sign in to comment.