|
From: Robert L. <rle...@us...> - 2007-02-28 10:54:59
|
Update of /cvsroot/ccmtools/ccmtools/src/ccmtools/CppGenerator In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv326/src/ccmtools/CppGenerator Modified Files: CppAssemblyGenerator.java Log Message: C++ assemblies Index: CppAssemblyGenerator.java =================================================================== RCS file: /cvsroot/ccmtools/ccmtools/src/ccmtools/CppGenerator/CppAssemblyGenerator.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** CppAssemblyGenerator.java 28 Feb 2007 08:03:28 -0000 1.5 --- CppAssemblyGenerator.java 28 Feb 2007 10:54:52 -0000 1.6 *************** *** 191,194 **** --- 191,214 ---- } + private static int local_var_counter_; + + private static String createLocalVar( Map<String, String> var_map, String var_type, + StringBuilder code ) + { + String local_var = var_map.get(var_type); + if (local_var == null) + { + local_var = "var" + local_var_counter_; + ++local_var_counter_; + var_map.put(var_type, local_var); + code.append(TAB); + code.append(var_type); + code.append(" "); + code.append(local_var); + code.append(";\n"); + } + return local_var; + } + protected String variable_AssemblyInnerComponentVariableCreation() { *************** *** 197,202 **** StringBuilder code_homes = new StringBuilder(); StringBuilder code_creation = new StringBuilder(); ! HashMap<String, String> home_map = new HashMap<String, String>(); ! int counter = 0; Map<String, MComponentDef> map = getAssemblyLocalComponents(); for (String key : map.keySet()) --- 217,222 ---- StringBuilder code_homes = new StringBuilder(); StringBuilder code_creation = new StringBuilder(); ! HashMap<String, String> local_var_map = new HashMap<String, String>(); ! boolean have_finder = false; Map<String, MComponentDef> map = getAssemblyLocalComponents(); for (String key : map.keySet()) *************** *** 207,228 **** { // calling home-finder ! throw new RuntimeException("no yet implemented"); // TODO } else { MHomeDef home = getHome(comp_def); String home_type = getLocalCxxName(home, "::"); ! String home_var = home_map.get(home_type); ! if (home_var == null) ! { ! home_var = "home" + counter; ! ++counter; ! home_map.put(home_type, home_var); ! code_homes.append(TAB); ! code_homes.append(home_type); ! code_homes.append(" "); ! code_homes.append(home_var); ! code_homes.append(";\n"); ! } code_creation.append(TAB); code_creation.append(key); --- 227,268 ---- { // calling home-finder ! final String finder_type = "::Components::HomeFinder*"; ! String finder_var = createLocalVar(local_var_map, finder_type, code_homes); ! if (!have_finder) ! { ! code_creation.append(TAB).append(finder_var); ! code_creation.append(" = ::Components::HomeFinder::Instance();\n"); ! code_creation.append(TAB).append("assert("); ! code_creation.append(finder_var).append(");\n"); ! have_finder = true; ! } ! final String home_type = "::Components::CCMHome::SmartPtr"; ! String home_var = createLocalVar(local_var_map, home_type, code_homes); ! code_creation.append(TAB).append(home_var); ! code_creation.append(" = ").append(finder_var); ! code_creation.append("->find_home_by_name(\""); ! code_creation.append(comp_alias).append("\");\n"); ! final String keyless_type = "::Components::KeylessCCMHome*"; ! String keyless_var = createLocalVar(local_var_map, keyless_type, code_homes); ! code_creation.append(TAB).append(keyless_var); ! code_creation.append(" = dynamic_cast< ").append(keyless_type); ! code_creation.append(">(").append(home_var).append(".ptr());\n"); ! code_creation.append(TAB).append("assert("); ! code_creation.append(keyless_var).append(");\n"); ! final String obj_type = "::wamas::platform::utils::SmartPtr< ::Components::CCMObject>"; ! String obj_var = createLocalVar(local_var_map, obj_type, code_homes); ! code_creation.append(TAB).append(obj_var); ! code_creation.append(" = ").append(keyless_var).append("->create_component();\n"); ! String cpp_type = getLocalCxxName(comp_def, "::"); ! code_creation.append(TAB).append(key); ! code_creation.append("_.eat(dynamic_cast< ").append(cpp_type); ! code_creation.append("*>(").append(obj_var).append(".ptr()));\n"); } else { + // using first home MHomeDef home = getHome(comp_def); String home_type = getLocalCxxName(home, "::"); ! String home_var = createLocalVar(local_var_map, home_type, code_homes); code_creation.append(TAB); code_creation.append(key); *************** *** 231,234 **** --- 271,276 ---- code_creation.append(".create();\n"); } + code_creation.append(TAB).append("assert("); + code_creation.append(key).append("_);\n"); } StringBuilder result = new StringBuilder(); |