16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync# Various utilities for working with nsISupportsPrimitive
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncfrom xpcom import components
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync_primitives_map = {}
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncdef _build_map():
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync ifaces = components.interfaces
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync iface = ifaces.nsISupportsPrimitive
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m = _primitives_map
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_ID] = ifaces.nsISupportsID
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_CSTRING] = ifaces.nsISupportsCString
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_STRING] = ifaces.nsISupportsString
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRBOOL] = ifaces.nsISupportsPRBool
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRUINT8] = ifaces.nsISupportsPRUint8
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRUINT16] = ifaces.nsISupportsPRUint16
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRUINT32] = ifaces.nsISupportsPRUint32
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRUINT64] = ifaces.nsISupportsPRUint64
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRINT16] = ifaces.nsISupportsPRInt16
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRINT32] = ifaces.nsISupportsPRInt32
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRINT64] = ifaces.nsISupportsPRInt64
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_PRTIME] = ifaces.nsISupportsPRTime
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_CHAR] = ifaces.nsISupportsChar
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_FLOAT] = ifaces.nsISupportsFloat
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync m[iface.TYPE_DOUBLE] = ifaces.nsISupportsDouble
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync # Do interface pointer specially - it provides the IID.
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync #m[iface.TYPE_INTERFACE_POINTER] = ifaces.nsISupportsDouble
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsyncdef GetPrimitive(ob):
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync if len(_primitives_map)==0:
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync _build_map()
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync prin = ob.QueryInterface(components.interfaces.nsISupportsPrimitive)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync try:
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync better = _primitives_map[prin.type]
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync except KeyError:
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync raise ValueError, "This primitive type (%d) is not supported" % (prin.type,)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync prin = prin.QueryInterface(better)
16a8d09569a2ebd598cef72fa605be6fb4563607vboxsync return prin.data