gecko/extensions/python/xpcom/primitives.py

40 lines
1.5 KiB
Python

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