adaptor code generator working

This commit is contained in:
Andreas Volz 2008-09-03 00:16:51 +02:00
parent c43ba92e50
commit bbca1b0acc

View file

@ -502,7 +502,6 @@ void generate_proxy(Xml::Document &doc, const char *filename)
if (args_out.size() == 1) if (args_out.size() == 1)
{ {
string arg_object = args_out.front()->get("object"); string arg_object = args_out.front()->get("object");
cerr << "arg_object: " << arg_object << endl;
if (arg_object.length()) if (arg_object.length())
{ {
@ -1161,51 +1160,108 @@ void generate_adaptor(Xml::Document &doc, const char *filename)
<< tab << tab << "::DBus::MessageIter ri = call.reader();" << endl << tab << tab << "::DBus::MessageIter ri = call.reader();" << endl
<< endl; << endl;
// generate the 'in' variables
unsigned int i = 1; unsigned int i = 1;
for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i) for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i)
{ {
Xml::Node &arg = **ai; Xml::Node &arg = **ai;
body << tab << tab << signature_to_type(arg.get("type")) << " argin" << i << ";" string arg_object = arg.get("object");
<< " ri >> argin" << i << ";" << endl;
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;
}
} }
// generate out variables
if (args_out.size() == 0) if (args_out.size() == 0)
{ {
body << tab << tab; body << tab << tab;
} }
else if (args_out.size() == 1) // if only one out argument exists
// TODO: is this needed? Should be same as else condition...
/*else if (args_out.size() == 1)
{ {
body << tab << tab << signature_to_type(args_out.front()->get("type")) << " argout1 = "; body << tab << tab << signature_to_type(args_out.front()->get("type")) << " argout1 = ";
} }*/
else else
{ {
unsigned int i = 1; unsigned int i = 1;
for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++i) for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++i)
{ {
Xml::Node &arg = **ao; Xml::Node &arg = **ao;
body << tab << tab << signature_to_type(arg.get("type")) << " argout" << i << ";" << endl; string arg_object = arg.get("object");
body << tab << tab << signature_to_type(arg.get("type")) << " argout" << i << ";" << endl;
// generate object types
if (arg_object.length())
{
body << tab << tab << arg_object << " _argout" << i << ";" << endl;
}
} }
body << tab << tab; //body << tab << tab;
} }
body << method.get("name") << "("; // generate in '<<' operation
i = 0;
for (unsigned int i = 0; i < args_in.size(); ++i) for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i)
{ {
body << "argin" << i+1; Xml::Node &arg = **ai;
string arg_object = arg.get("object");
if (arg_object.length())
{
body << tab << tab << "_argin" << i+1 << " << " << "argin" << i+1 << ";" << endl;
}
}
body << tab << tab << method.get("name") << "(";
// generate call stub parameters
i = 0;
for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i)
{
Xml::Node &arg = **ai;
string arg_object = arg.get("object");
if (arg_object.length())
{
body << "_argin" << i+1;
}
else
{
body << "argin" << i+1;
}
if ((i+1 != args_in.size() || args_out.size() > 1)) if ((i+1 != args_in.size() || args_out.size() > 1))
body << ", "; body << ", ";
} }
if (args_out.size() > 1) if (args_out.size() > 1)
for (unsigned int i = 0; i < args_out.size(); ++i) {
{ i = 0;
body << "argout" << i+1; for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++i)
{
Xml::Node &arg = **ao;
string arg_object = arg.get("object");
if (i+1 != args_out.size()) if (arg_object.length())
body << ", "; {
} body << "_argout" << i+1;
}
else
{
body << "argout" << i+1;
}
if (i+1 != args_out.size())
body << ", ";
}
}
body << ");" << endl; body << ");" << endl;
@ -1215,6 +1271,19 @@ void generate_adaptor(Xml::Document &doc, const char *filename)
{ {
body << tab << tab << "::DBus::MessageIter wi = reply.writer();" << endl; body << tab << tab << "::DBus::MessageIter wi = reply.writer();" << endl;
// generate out '<<' operation
i = 0;
for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++i)
{
Xml::Node &arg = **ao;
string arg_object = arg.get("object");
if (arg_object.length())
{
body << tab << tab << "argout" << i+1 << " << " << "_argout" << i+1 << ";" << endl;
}
}
for (unsigned int i = 0; i < args_out.size(); ++i) for (unsigned int i = 0; i < args_out.size(); ++i)
{ {
body << tab << tab << "wi << argout" << i+1 << ";" << endl; body << tab << tab << "wi << argout" << i+1 << ";" << endl;