diff options
| author | Andreas Volz <andreas@frodo.mittelerde> | 2009-03-28 13:46:03 +0100 |
|---|---|---|
| committer | Andreas Volz <andreas@frodo.mittelerde> | 2009-03-28 13:46:03 +0100 |
| commit | 3b3ffe166bb01405e75e1f558ccb76ab668d6711 (patch) | |
| tree | f68c914b6096fc096f222f8b96e2eb523cf7ddaf /tools/xml2cpp.cpp | |
| parent | eefe20a40da700d5e29f5925262609cbcce68175 (diff) | |
| download | dbus-c++-3b3ffe166bb01405e75e1f558ccb76ab668d6711.tar.gz | |
- stripped not needed code from /ecore-integration
- bugfix for xml2cpp generator with out parameters
Diffstat (limited to 'tools/xml2cpp.cpp')
| -rw-r--r-- | tools/xml2cpp.cpp | 58 |
1 files changed, 43 insertions, 15 deletions
diff --git a/tools/xml2cpp.cpp b/tools/xml2cpp.cpp index dcde076..870b2cc 100644 --- a/tools/xml2cpp.cpp +++ b/tools/xml2cpp.cpp @@ -1287,6 +1287,16 @@ void generate_adaptor(Xml::Document &doc, const char *filename) for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i) { Xml::Node &arg = **ai; + + body << tab << tab << signature_to_type(arg.get("type")) << " argin" << i << ";" << " "; + body << "ri >> argin" << i << ";" << endl; + } + + // generate the 'in' object variables + i = 1; + for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i) + { + Xml::Node &arg = **ai; Xml::Nodes annotations = arg["annotation"]; Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); string arg_object; @@ -1296,17 +1306,36 @@ void generate_adaptor(Xml::Document &doc, const char *filename) arg_object = annotations_object.front()->get("value"); } - body << tab << tab << signature_to_type(arg.get("type")) << " argin" << i << ";" << endl; - body << tab << tab << "ri >> argin" << i << ";" << endl; - if (arg_object.length()) { - body << tab << tab << arg_object << " _argin" << i << ";" << endl; + body << tab << tab << arg_object << " _argin" << i << ";"; + body << " " << "_argin" << i << " << " << "argin" << i << ";" << endl; } } - // generate out variables - if (args_out.size() != 0) + // generate 'out' variables + if (args_out.size() > 0) + { + unsigned int i = 1; + for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++i) + { + Xml::Node &arg = **ao; + + body << tab << tab << signature_to_type(arg.get("type")) << " argout" << i; + + if (args_out.size() == 1) // a single 'out' parameter will be assigned + { + body << " = "; + } + else // multible 'out' parameters will be handled as parameters below + { + body << ";" << endl; + } + } + } + + // generate 'out' object variables + if (args_out.size() > 0) { unsigned int i = 1; for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++i) @@ -1320,9 +1349,7 @@ void generate_adaptor(Xml::Document &doc, const char *filename) { arg_object = annotations_object.front()->get("value"); } - - body << tab << tab << signature_to_type(arg.get("type")) << " argout" << i << ";" << endl; - + // generate object types if (arg_object.length()) { @@ -1344,14 +1371,15 @@ void generate_adaptor(Xml::Document &doc, const char *filename) { arg_object = annotations_object.front()->get("value"); } - - if (arg_object.length()) - { - body << tab << tab << "_argin" << i+1 << " << " << "argin" << i+1 << ";" << endl; - } + } + + // do correct indent + if (args_out.size() != 1 ) + { + body << tab << tab; } - body << tab << tab << method.get("name") << "("; + body << method.get("name") << "("; // generate call stub parameters i = 0; |
