Problems with empty Arrays and Dicts in untyped languages

John (J5) Palmieri johnp at redhat.com
Thu Jul 28 06:10:39 EST 2005


Hmm, ok so it seems like it would be a pita for other languages.  Havoc
suggests I just get off my lazy ass and implement Introspection ;-)   I
tend to agree.  If DBUS_TYPE_ARRAY_EMPTY is not dead simple to implement
everywhere I don't think we should do it. Will spend my time
implementing introspection and adding explcit type casting for arrays
and dicts.

On Wed, 2005-07-27 at 15:52 -0400, Joe Shaw wrote:
> On Wed, 2005-07-27 at 15:31 -0400, Colin Walters wrote:
> > Joe, can you give some sample code for receiving arrays with Mono?  Does
> > the caller specify what type of array/dictionary they're expecting to
> > receive?
> 
> Sheesh, you're going to make me work?
> 
> Here's the code which demarshals an array:
> 
>         int elementTypeCode = dbus_message_iter_get_element_type (iter);
>         dbus_message_iter_recurse (iter, arrayIter);
>         this.elementType = (Type) Arguments.DBusTypes [(char) elementTypeCode];
>         
>         elements = new ArrayList ();
>         
>         if (dbus_message_iter_get_arg_type (arrayIter) != 0) {
>           do {
>             object [] pars = new Object[2];
>             pars[0] = arrayIter;
>             pars[1] = service;
>             DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars);
>             elements.Add(dbusType);
>           } while (dbus_message_iter_next(arrayIter));
>         }
> 
> Later an array of elementType is instantiated and the objects in
> elements are copied into it.  If elementType becomes a new EMPTY_ARRAY,
> there's no easy way for us to map this to what the user is expecting.
> The mono bindings pretty heavily rely on emitting IL, which makes it
> kind of hard to follow and a little gross to use.
> 
> Joe
> 
-- 



More information about the dbus mailing list