Behaviour of has_next (Fwd: dbus/qt qdbusmarshall.cpp,1.5,1.6)

Thiago Macieira thiago.macieira at
Sun May 7 04:13:17 PDT 2006


With the help of one user, I have finally figured out why the maps of maps 
weren't working in the QtDBUS bindings. I couldn't figure out why, but I 
thought libdbus-1 was telling me that the map was empty.

It turns out that it wasn't the case. It's the behaviour of 
dbus_message_iter_has_next that differs from the behaviour I expected. So 
I wonder if this isn't a change that should be implemented in the 

Java iterators (and the Qt iterators inspired by Java) have a method 
called hasNext that returns true if there are more elements in this list. 
However, the difference is that hasNext also returns true for a 
one-element list, because there *is* a next element (the first one).

Iterators don't point to elements, but to between them. When an iterator 
is initialised to the beginning of a list, it points to just before the 
first element, so hasNext = true.

This is illustrated by:

And the example code in FlashMX seems to indicate their iterators behave 
the same way too:

However, libdbus-1's dbus_message_iter_has_next returns false for a 
one-element list, as illustrated by the following code I had to change:
----------    ----------
@@ -78,8 +77,7 @@

     DBusMessageIter it;
     dbus_message_iter_recurse(arrayIt, &it);
-    if (!dbus_message_iter_has_next(&it))
+    if (dbus_message_iter_get_array_len(&it) == 0)
         return list;

     do {
@@ -157,7 +155,7 @@
             DBusMessageIter sub;

             dbus_message_iter_recurse(it, &sub);
-            if (!dbus_message_iter_has_next(&sub))
+            if (dbus_message_iter_get_array_len(&sub) == 0)
                 // empty map
                 return map;

Should we change the behaviour in libdbus-1?
Thiago José Macieira - thiago.macieira AT
Trolltech AS - Sandakerveien 116, NO-0402 Oslo, Norway
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: not available
Url :

More information about the dbus mailing list