blob: 464f12e4db4d74d618a848148784aecc368dc9ef (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# 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
|