summaryrefslogtreecommitdiff
path: root/tools/generator_utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/generator_utils.cpp')
-rw-r--r--tools/generator_utils.cpp112
1 files changed, 104 insertions, 8 deletions
diff --git a/tools/generator_utils.cpp b/tools/generator_utils.cpp
index e08ad27..3c121af 100644
--- a/tools/generator_utils.cpp
+++ b/tools/generator_utils.cpp
@@ -87,12 +87,90 @@ const char *atomic_type_to_string(char t)
void _parse_signature(const string &signature, string &type, unsigned int &i)
{
+ cout << "signature: " << signature << endl;
+ cout << "type: " << type << endl;
+ cout << "i: " << i << ", signature[i]: " << signature[i] << endl;
+
+ for (; i < signature.length(); ++i)
+ {
+ switch (signature[i])
+ {
+ case 'a':
+ {
+ switch (signature[++i])
+ {
+ case '{':
+ {
+ type += "std::map< ";
+ ++i;
+ _parse_signature(signature, type, i);
+ type += " >";
+
+ break;
+ }
+ case '(':
+ {
+ type += "std::vector< ::DBus::Struct< ";
+ ++i;
+ _parse_signature(signature, type, i);
+ type += " > >";
+
+ break;
+ }
+ default:
+ {
+ type += "std::vector< ";
+ _parse_signature(signature, type, i);
+
+ type += " >";
+
+ break;
+ }
+ }
+
+ if (i+1 < signature.length() && signature[i+1] != ')' && signature[i+1] != '}')
+ {
+ type += ", ";
+ }
+
+ break;
+ }
+ case ')':
+ case '}':
+ {
+ return;
+ }
+ default:
+ {
+ const char *atom = atomic_type_to_string(signature[i]);
+ if (!atom)
+ {
+ cerr << "invalid signature" << endl;
+ exit(-1);
+ }
+ type += atom;
+
+ if (i+1 < signature.length() && signature[i+1] != ')' && signature[i+1] != '}')
+ {
+ type += ", ";
+ }
+ break;
+ }
+ }
+ }
+}
+
+/*{
for (; i < signature.length(); ++i)
{
+ cout << "i: " << i << ", sig(i): " << signature[i] << endl;
+ cout << "Type: " << type << endl;
+
switch (signature[i])
{
case 'a':
{
+ bool multi = false;
switch (signature[++i])
{
case '{':
@@ -108,16 +186,27 @@ void _parse_signature(const string &signature, string &type, unsigned int &i)
type += atom;
type += ", ";
++i;
+ _parse_signature(signature, type, i);
+ multi = true;
break;
}
default:
{
type += "std::vector< ";
+ _parse_signature(signature, type, i);
+ type += " >V";
+ multi = true;
break;
}
}
- _parse_signature(signature, type, i);
- type += " >";
+ if (!multi)
+ {
+ _parse_signature(signature, type, i);
+ }
+ cout << "signature1: " << signature << endl;
+ cout << "type1: " << type << endl;
+ cout << "i1: " << i << ", sig(i): " << signature[i-1] << endl;
+
continue;
}
case '(':
@@ -125,9 +214,12 @@ void _parse_signature(const string &signature, string &type, unsigned int &i)
type += "::DBus::Struct< ";
++i;
_parse_signature(signature, type, i);
- type += " >";
- if (signature[i+1])
- {
+ type += " >S";
+ cout << "signature2: " << signature << endl;
+ cout << "type2: " << type << endl;
+ cout << "i2: " << i << ", sig(i): " << signature[i] << endl;
+ if ((i+1 < signature.length()) && (signature[i+1] != ')') )
+ {
type += ", ";
}
continue;
@@ -135,7 +227,11 @@ void _parse_signature(const string &signature, string &type, unsigned int &i)
case ')':
case '}':
{
- return;
+ type += " >?";
+ cout << "close tag>" << endl;
+ cout << "type3: " << type << endl;
+
+ return;
}
default:
{
@@ -147,7 +243,7 @@ void _parse_signature(const string &signature, string &type, unsigned int &i)
}
type += atom;
- if (signature[i+1] != ')' && signature[i+1] != '}' && i+1 < signature.length())
+ if (i+1 < signature.length() && signature[i+1] != ')' && signature[i+1] != '}')
{
type += ", ";
}
@@ -155,7 +251,7 @@ void _parse_signature(const string &signature, string &type, unsigned int &i)
}
}
}
-}
+}*/
string signature_to_type(const string &signature)
{