major D-Bus code update

git-svn-id: http://dev.openwengo.org/svn/openwengo/wengophone-ng/branches/wengophone-dbus-api/libs/dbus@7715 30a43799-04e7-0310-8b2b-ea0d24f86d0e
This commit is contained in:
pdurante 2006-09-23 23:25:34 +00:00
parent acfeb85b87
commit 42ea920aeb
41 changed files with 958 additions and 1506 deletions

View file

@ -33,15 +33,16 @@
using namespace DBus;
Variant::Variant()
: _msg(CallMessage()), // dummy message used as temporary storage for variant data
_it(_msg.w_iter())
: _msg(CallMessage()) // dummy message used as temporary storage for variant data
{
}
Variant::Variant( MessageIter& it )
: _msg(it.msg()),
_it(it.recurse())
: _msg(CallMessage())
{
MessageIter vi = it.recurse();
MessageIter mi = _msg.writer();
vi.copy_data(mi);
}
Variant& Variant::operator = ( const Variant& v )
@ -49,118 +50,35 @@ Variant& Variant::operator = ( const Variant& v )
if(&v != this)
{
_msg = v._msg;
_it = v._it;
_signature = v._signature;
}
return *this;
}
const char* Variant::signature() const
void Variant::clear()
{
char* sigbuf = _it.signature();
CallMessage empty;
_msg = empty;
}
_signature = sigbuf;
const Signature Variant::signature() const
{
char* sigbuf = reader().signature();
Signature signature = sigbuf;
free(sigbuf);
return _signature.c_str();
return signature;
}
MessageIter& operator << ( MessageIter& iter, const Variant& val )
{
const char* sig = val.signature();
const Signature sig = val.signature();
MessageIter rit = val.iter();
MessageIter wit = iter.new_variant(sig);
MessageIter rit = val.reader();
MessageIter wit = iter.new_variant(sig.c_str());
for(size_t i = 0; i < strlen(sig); ++i)
{
switch(sig[i])
{
case 'b':
{
Bool b; rit >> b; wit << b;
break;
}
case 'y':
{
Byte y; rit >> y; wit << y;
break;
}
case 'n':
{
Int16 n; rit >> n; wit << n;
break;
}
case 'q':
{
UInt16 q; rit >> q; wit << q;
break;
}
case 'i':
{
Int32 i; rit >> i; wit << i;
break;
}
case 'u':
{
UInt32 u; rit >> u; wit << u;
break;
}
case 'x':
{
Int64 x; rit >> x; wit << x;
break;
}
case 't':
{
UInt64 t; rit >> t; wit << t;
break;
}
case 'd':
{
Double d; rit >> d; wit << d;
break;
}
case 's':
{
String s; rit >> s; wit << s;
break;
}
case 'o':
{
Path o; rit >> o; wit << o;
break;
}
case 'g':
{
Signature g; rit >> g; wit << g;
break;
}
case 'a':
{
break;
}
case '(':
{
break;
}
case ')':
{
break;
}
case '{':
{
break;
}
case '}':
{
break;
}
}
}
//TODO: implement marshaling of compound types
rit.copy_data(wit);
iter.close_container(wit);