1 | # Various utilities for working with nsISupportsPrimitive
|
---|
2 | from xpcom import components
|
---|
3 |
|
---|
4 | _primitives_map = {}
|
---|
5 |
|
---|
6 | def _build_map():
|
---|
7 | ifaces = components.interfaces
|
---|
8 | iface = ifaces.nsISupportsPrimitive
|
---|
9 | m = _primitives_map
|
---|
10 |
|
---|
11 | m[iface.TYPE_ID] = ifaces.nsISupportsID
|
---|
12 | m[iface.TYPE_CSTRING] = ifaces.nsISupportsCString
|
---|
13 | m[iface.TYPE_STRING] = ifaces.nsISupportsString
|
---|
14 | m[iface.TYPE_PRBOOL] = ifaces.nsISupportsPRBool
|
---|
15 | m[iface.TYPE_PRUINT8] = ifaces.nsISupportsPRUint8
|
---|
16 | m[iface.TYPE_PRUINT16] = ifaces.nsISupportsPRUint16
|
---|
17 | m[iface.TYPE_PRUINT32] = ifaces.nsISupportsPRUint32
|
---|
18 | m[iface.TYPE_PRUINT64] = ifaces.nsISupportsPRUint64
|
---|
19 | m[iface.TYPE_PRINT16] = ifaces.nsISupportsPRInt16
|
---|
20 | m[iface.TYPE_PRINT32] = ifaces.nsISupportsPRInt32
|
---|
21 | m[iface.TYPE_PRINT64] = ifaces.nsISupportsPRInt64
|
---|
22 | m[iface.TYPE_PRTIME] = ifaces.nsISupportsPRTime
|
---|
23 | m[iface.TYPE_CHAR] = ifaces.nsISupportsChar
|
---|
24 | m[iface.TYPE_FLOAT] = ifaces.nsISupportsFloat
|
---|
25 | m[iface.TYPE_DOUBLE] = ifaces.nsISupportsDouble
|
---|
26 | # Do interface pointer specially - it provides the IID.
|
---|
27 | #m[iface.TYPE_INTERFACE_POINTER] = ifaces.nsISupportsDouble
|
---|
28 |
|
---|
29 | def GetPrimitive(ob):
|
---|
30 | if len(_primitives_map)==0:
|
---|
31 | _build_map()
|
---|
32 |
|
---|
33 | prin = ob.QueryInterface(components.interfaces.nsISupportsPrimitive)
|
---|
34 | try:
|
---|
35 | better = _primitives_map[prin.type]
|
---|
36 | except KeyError:
|
---|
37 | raise ValueError("This primitive type (%d) is not supported" % (prin.type,))
|
---|
38 | prin = prin.QueryInterface(better)
|
---|
39 | return prin.data
|
---|