|
From: Teiniker E. <tei...@us...> - 2007-01-22 17:34:34
|
Update of /cvsroot/ccmtools/ccmtools/src/ccmtools/CppGenerator In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv686/src/ccmtools/CppGenerator Modified Files: CppLocalGenerator.java Log Message: Added support for C++ struct (init and default) constructors. Index: CppLocalGenerator.java =================================================================== RCS file: /cvsroot/ccmtools/ccmtools/src/ccmtools/CppGenerator/CppLocalGenerator.java,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** CppLocalGenerator.java 19 Jan 2007 12:07:16 -0000 1.50 --- CppLocalGenerator.java 22 Jan 2007 17:34:30 -0000 1.51 *************** *** 3,7 **** * Leif Johnson <le...@am...> * Egon Teiniker <ego...@sa...> ! * Copyright (C) 2002 - 2005 Salomon Automation * * This library is free software; you can redistribute it and/or modify it under --- 3,7 ---- * Leif Johnson <le...@am...> * Egon Teiniker <ego...@sa...> ! * Copyright (C) 2002 - 2007 ccmtools.sf.net * * This library is free software; you can redistribute it and/or modify it under *************** *** 175,178 **** --- 175,181 ---- return data_MAttributeDef(variable, value); } + else if (currentNode instanceof MStructDef) { + return data_MStructDef(variable, value); + } else if (currentNode instanceof MFieldDef) { return data_MFieldDef(variable, value); *************** *** 185,188 **** --- 188,207 ---- } + protected String data_MStructDef(String dataType, String dataValue) + { + logger.fine("begin"); + MStructDef struct = (MStructDef)currentNode; + if(dataType.equals("StructDefaultConstructor")) + { + return generateStructDefaultConstructor(struct); + } + else if(dataType.equals("StructInitConstructor")) + { + return generateStructInitConstructor(struct); + } + logger.fine("end"); + return dataValue; + } + protected String data_MFieldDef(String dataType, String dataValue) *************** *** 217,221 **** MTyped singleType = (MTyped) idlType; MIDLType singleIdlType = singleType.getIdlType(); ! dataValue = getLanguageTypeInclude(singleIdlType); } else --- 236,240 ---- MTyped singleType = (MTyped) idlType; MIDLType singleIdlType = singleType.getIdlType(); ! dataValue = "#include <vector>\n" + getLanguageTypeInclude(singleIdlType); } else *************** *** 382,385 **** --- 401,414 ---- } + protected String data_MConstantDef(String dataType, String dataValue) + { + MConstantDef constant = (MConstantDef) currentNode; + + return dataValue; + } + + + + protected List<MAttributeDef> getAttributeList(MInterfaceDef iface) *************** *** 543,554 **** } - protected String data_MConstantDef(String dataType, String dataValue) - { - MConstantDef constant = (MConstantDef) currentNode; - - return dataValue; - } - - protected String generateConstantImpl(MInterfaceDef iface, MConstantDef constant) { --- 572,575 ---- *************** *** 1083,1088 **** --- 1104,1284 ---- //==================================================================== + + //==================================================================== + // MStructDef %(tag)s helper methods + //==================================================================== + protected String generateStructDefaultConstructor(MStructDef struct) + { + StringBuilder out = new StringBuilder(); + out.append(Text.TAB).append(struct.getIdentifier()).append("()").append(Text.NL); + out.append(Text.TAB).append(" :").append(generateStructConstructorDefaultValueList(struct)).append(Text.NL); + out.append(Text.TAB).append("{").append(Text.NL); + out.append(Text.TAB).append("}").append(Text.NL); + return out.toString(); + } + + protected String generateStructInitConstructor(MStructDef struct) + { + StringBuilder out = new StringBuilder(); + out.append(Text.TAB).append(struct.getIdentifier()).append("("); + out.append(generateStructConstructorParameterList(struct)).append(")").append(Text.NL); + out.append(Text.TAB).append(" :").append(generateStructConstructorInitList(struct)).append(Text.NL); + out.append(Text.TAB).append("{").append(Text.NL); + out.append(Text.TAB).append("}").append(Text.NL); + return out.toString(); + } + + protected String generateStructConstructorParameterList(MStructDef struct) + { + StringBuilder out = new StringBuilder(); + for(Iterator i = struct.getMembers().iterator(); i.hasNext();) + { + MFieldDef field = (MFieldDef)i.next(); + out.append(Text.NL).append(Text.tab(2)); + out.append(getLanguageType(field)).append(" "); + out.append(field.getIdentifier()).append("_").append(","); + } + String s = out.toString(); + return s.substring(0,s.length()-1); + } + + + protected String generateStructConstructorInitList(MStructDef struct) + { + StringBuilder out = new StringBuilder(); + for(Iterator i = struct.getMembers().iterator(); i.hasNext();) + { + MFieldDef field = (MFieldDef)i.next(); + out.append(Text.NL).append(Text.tab(2)); + out.append(field.getIdentifier()).append("("); + out.append(field.getIdentifier()).append("_").append("),"); + } + String s = out.toString(); + return s.substring(0, s.length()-1); + } + + protected String generateStructConstructorDefaultValueList(MStructDef struct) + { + StringBuilder out = new StringBuilder(); + for(Iterator i = struct.getMembers().iterator(); i.hasNext();) + { + MFieldDef field = (MFieldDef)i.next(); + String defaultValue = generateDefaultValue(field.getIdlType()); + if(defaultValue != null) + { + out.append(Text.NL).append(Text.tab(2)); + out.append(field.getIdentifier()).append("(").append(defaultValue).append(")").append(","); + } + } + String s = out.toString(); + return s.substring(0, s.length()-1); + } + + protected String generateDefaultValue(MIDLType type) + { + if(type instanceof MInterfaceDef) + { + MInterfaceDef iface = (MInterfaceDef)type; + return getLocalCxxName(iface,Text.SCOPE_SEPARATOR) + "::SmartPtr()"; + } + else if(type instanceof MAliasDef) + { + MAliasDef alias = (MAliasDef)type; + MIDLType idlType = ((MTyped)type).getIdlType(); + if(idlType instanceof MSequenceDef) + { + return getLocalCxxName(alias, Text.SCOPE_SEPARATOR) + "()"; + } + else + { + return generateDefaultValue(idlType); + } + } + else if(type instanceof MStringDef) + { + return "\"\""; + } + else if(type instanceof MWstringDef) + { + return "L\"\""; + } + else if(type instanceof MPrimitiveDef) + { + MPrimitiveDef primitive = (MPrimitiveDef)type; + return generateDefaultValue(primitive); + } + return null; + } + + protected String generateDefaultValue(MPrimitiveDef primitive) + { + if(primitive.getKind() == MPrimitiveKind.PK_ANY) + { + return " ::wamas::platform::utils::SmartPtr< ::wamas::platform::utils::Value>()"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_BOOLEAN) + { + return "false"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_CHAR) + { + return "' '"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_DOUBLE) + { + return "0.0"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_FLOAT) + { + return "0.0F"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_LONG) + { + return "0L"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_LONGDOUBLE) + { + return "0.0"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_LONGLONG) + { + return "0L"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_OCTET) + { + return "0x0"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_SHORT) + { + return "0"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_STRING) + { + return "\"\""; + } + else if(primitive.getKind() == MPrimitiveKind.PK_ULONG) + { + return "0U"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_ULONGLONG) + { + return "0U"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_USHORT) + { + return "0U"; + } + else if(primitive.getKind() == MPrimitiveKind.PK_WCHAR) + { + return "L' '"; + } + else + { + return null; + } + } + //==================================================================== |