adaptor code generator working
This commit is contained in:
parent
c43ba92e50
commit
bbca1b0acc
1 changed files with 86 additions and 17 deletions
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue