зеркало из https://github.com/mozilla/pjs.git
Bug 313309 - Table-driven QI, part 4 (the final piece!) - this could be a test-landing depending on how perf numbers turn out, r=shaver
This commit is contained in:
Родитель
6c4fddf6b1
Коммит
d953ca7061
|
@ -232,10 +232,83 @@ NS_IMETHODIMP_(nsrefcnt) _class::Release(void) \
|
|||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
* Some convenience macros for implementing QueryInterface
|
||||
/**
|
||||
* There are two ways of implementing QueryInterface, and we use both:
|
||||
*
|
||||
* Table-driven QueryInterface uses a static table of IID->offset mappings
|
||||
* and a shared helper function. Using it tends to reduce codesize and improve
|
||||
* runtime performance (due to processor cache hits).
|
||||
*
|
||||
* Macro-driven QueryInterface generates a QueryInterface function directly
|
||||
* using common macros. This is necessary if special QueryInterface features
|
||||
* are being used (such as tearoffs and conditional interfaces).
|
||||
*
|
||||
* These methods can be combined into a table-driven function call followed
|
||||
* by custom code for tearoffs and conditionals.
|
||||
*/
|
||||
|
||||
struct QITableEntry
|
||||
{
|
||||
const nsIID *iid; // null indicates end of the QITableEntry array
|
||||
PROffset32 offset;
|
||||
};
|
||||
|
||||
NS_COM_GLUE nsresult NS_FASTCALL
|
||||
NS_TableDrivenQI(void* aThis, const QITableEntry* entries,
|
||||
REFNSIID aIID, void **aInstancePtr);
|
||||
|
||||
/**
|
||||
* Implement table-driven queryinterface
|
||||
*/
|
||||
|
||||
#define NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \
|
||||
{ \
|
||||
NS_ASSERTION(aInstancePtr, \
|
||||
"QueryInterface requires a non-NULL destination!"); \
|
||||
nsresult rv = NS_ERROR_FAILURE;;
|
||||
|
||||
#define NS_INTERFACE_TABLE_BEGIN \
|
||||
static const QITableEntry table[] = {
|
||||
|
||||
#define NS_INTERFACE_TABLE_ENTRY(_class, _interface) \
|
||||
{ &_interface::COMTypeInfo<int>::kIID, \
|
||||
NS_REINTERPRET_CAST(char*, \
|
||||
NS_STATIC_CAST(_interface*, (_class*) 0x1000)) - \
|
||||
NS_REINTERPRET_CAST(char*, (_class*) 0x1000) \
|
||||
},
|
||||
|
||||
#define NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, _interface, _implClass) \
|
||||
{ &_interface::COMTypeInfo<int>::kIID, \
|
||||
NS_REINTERPRET_CAST(char*, \
|
||||
NS_STATIC_CAST(_interface*, \
|
||||
NS_STATIC_CAST(_implClass*, \
|
||||
(_class*) 0x1000))) - \
|
||||
NS_REINTERPRET_CAST(char*, (_class*) 0x1000) \
|
||||
},
|
||||
|
||||
#define NS_INTERFACE_TABLE_END \
|
||||
{ nsnull, 0 } }; \
|
||||
rv = NS_TableDrivenQI(NS_STATIC_CAST(void*, this), \
|
||||
table, aIID, aInstancePtr);
|
||||
|
||||
#define NS_INTERFACE_TABLE_TAIL \
|
||||
return rv; \
|
||||
}
|
||||
|
||||
#define NS_INTERFACE_TABLE_TAIL_INHERITING(_baseclass) \
|
||||
if (NS_SUCCEEDED(rv)) \
|
||||
return rv; \
|
||||
return _baseclass::QueryInterface(aIID, aInstancePtr); \
|
||||
}
|
||||
|
||||
#define NS_INTERFACE_TABLE_TAIL_USING_AGGREGATOR(_aggregator) \
|
||||
if (NS_SUCCEEDED(rv)) \
|
||||
return rv; \
|
||||
NS_ASSERTION(_aggregator, "null aggregator"); \
|
||||
return _aggregator->QueryInterface(aIID, aInstancePtr) \
|
||||
}
|
||||
|
||||
/**
|
||||
* This implements query interface with two assumptions: First, the
|
||||
* class in question implements nsISupports and its own interface and
|
||||
|
@ -345,134 +418,158 @@ NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \
|
|||
NS_IMPL_QUERY_TAIL_USING_AGGREGATOR(_aggregator)
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE0(_class) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, nsISupports) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE1(_class, _i1) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE2(_class, _i1, _i2) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE3(_class, _i1, _i2, _i3) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE4(_class, _i1, _i2, _i3, _i4) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE5(_class, _i1, _i2, _i3, _i4, _i5) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE6(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE7(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE8(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE9(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i9) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i9) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE10(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9, _i10) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i9) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i10) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i9) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i10) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE11(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9, _i10, _i11) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i9) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i10) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i11) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_TABLE_HEAD(_class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i6) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i7) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i8) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i9) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i10) \
|
||||
NS_INTERFACE_TABLE_ENTRY(_class, _i12) \
|
||||
NS_INTERFACE_TABLE_ENTRY_AMBIGUOUS(_class, nsISupports, _i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL
|
||||
|
||||
|
||||
#define NS_IMPL_THREADSAFE_QUERY_INTERFACE0 NS_IMPL_QUERY_INTERFACE0
|
||||
|
@ -518,67 +615,75 @@ public: \
|
|||
#define NS_IMPL_ADDREF_INHERITED(Class, Super) \
|
||||
NS_IMETHODIMP_(nsrefcnt) Class::AddRef(void) \
|
||||
{ \
|
||||
nsrefcnt r = Super::AddRef(); \
|
||||
NS_LOG_ADDREF(this, r, #Class, sizeof(*this)); \
|
||||
return r; \
|
||||
return Super::AddRef(); \
|
||||
} \
|
||||
|
||||
#define NS_IMPL_RELEASE_INHERITED(Class, Super) \
|
||||
NS_IMETHODIMP_(nsrefcnt) Class::Release(void) \
|
||||
{ \
|
||||
nsrefcnt r = Super::Release(); \
|
||||
NS_LOG_RELEASE(this, r, #Class); \
|
||||
return r; \
|
||||
return Super::Release(); \
|
||||
} \
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE_INHERITED0(Class, Super) \
|
||||
NS_IMPL_QUERY_HEAD(Class) \
|
||||
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
|
||||
NS_INTERFACE_TABLE_HEAD(Class) \
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE_INHERITED1(Class, Super, i1) \
|
||||
NS_IMPL_QUERY_HEAD(Class) \
|
||||
NS_IMPL_QUERY_BODY(i1) \
|
||||
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
|
||||
NS_INTERFACE_TABLE_HEAD(Class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE_INHERITED2(Class, Super, i1, i2) \
|
||||
NS_IMPL_QUERY_HEAD(Class) \
|
||||
NS_IMPL_QUERY_BODY(i1) \
|
||||
NS_IMPL_QUERY_BODY(i2) \
|
||||
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
|
||||
NS_INTERFACE_TABLE_HEAD(Class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE_INHERITED3(Class, Super, i1, i2, i3) \
|
||||
NS_IMPL_QUERY_HEAD(Class) \
|
||||
NS_IMPL_QUERY_BODY(i1) \
|
||||
NS_IMPL_QUERY_BODY(i2) \
|
||||
NS_IMPL_QUERY_BODY(i3) \
|
||||
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
|
||||
NS_INTERFACE_TABLE_HEAD(Class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE_INHERITED4(Class, Super, i1, i2, i3, i4) \
|
||||
NS_IMPL_QUERY_HEAD(Class) \
|
||||
NS_IMPL_QUERY_BODY(i1) \
|
||||
NS_IMPL_QUERY_BODY(i2) \
|
||||
NS_IMPL_QUERY_BODY(i3) \
|
||||
NS_IMPL_QUERY_BODY(i4) \
|
||||
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
|
||||
NS_INTERFACE_TABLE_HEAD(Class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i4) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE_INHERITED5(Class,Super,i1,i2,i3,i4,i5) \
|
||||
NS_IMPL_QUERY_HEAD(Class) \
|
||||
NS_IMPL_QUERY_BODY(i1) \
|
||||
NS_IMPL_QUERY_BODY(i2) \
|
||||
NS_IMPL_QUERY_BODY(i3) \
|
||||
NS_IMPL_QUERY_BODY(i4) \
|
||||
NS_IMPL_QUERY_BODY(i5) \
|
||||
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
|
||||
NS_INTERFACE_TABLE_HEAD(Class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i5) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE_INHERITED6(Class,Super,i1,i2,i3,i4,i5,i6) \
|
||||
NS_IMPL_QUERY_HEAD(Class) \
|
||||
NS_IMPL_QUERY_BODY(i1) \
|
||||
NS_IMPL_QUERY_BODY(i2) \
|
||||
NS_IMPL_QUERY_BODY(i3) \
|
||||
NS_IMPL_QUERY_BODY(i4) \
|
||||
NS_IMPL_QUERY_BODY(i5) \
|
||||
NS_IMPL_QUERY_BODY(i6) \
|
||||
NS_IMPL_QUERY_TAIL_INHERITING(Super) \
|
||||
NS_INTERFACE_TABLE_HEAD(Class) \
|
||||
NS_INTERFACE_TABLE_BEGIN \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i1) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i2) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i3) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i4) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i5) \
|
||||
NS_INTERFACE_TABLE_ENTRY(Class, i6) \
|
||||
NS_INTERFACE_TABLE_END \
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Super)
|
||||
|
||||
/**
|
||||
* Convenience macros for implementing all nsISupports methods for
|
||||
|
@ -816,6 +921,372 @@ NS_IMETHODIMP_(nsrefcnt) _class::Release(void) \
|
|||
NS_IMPL_THREADSAFE_QUERY_INTERFACE11(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9, _i10, _i11)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Macros for implementing nsIClassInfo-related stuff.
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// include here instead of at the top because it requires the nsISupport decl
|
||||
#include "nsIClassInfo.h"
|
||||
|
||||
#define NS_CLASSINFO_NAME(_class) _class##_classInfoGlobal
|
||||
#define NS_CI_INTERFACE_GETTER_NAME(_class) _class##_GetInterfacesHelper
|
||||
|
||||
#define NS_DECL_CI_INTERFACE_GETTER(_class) \
|
||||
extern NS_IMETHODIMP NS_CI_INTERFACE_GETTER_NAME(_class)(PRUint32 *, \
|
||||
nsIID ***);
|
||||
|
||||
#define NS_DECL_CLASSINFO(_class) \
|
||||
NS_DECL_CI_INTERFACE_GETTER(_class) \
|
||||
nsIClassInfo *NS_CLASSINFO_NAME(_class);
|
||||
|
||||
#define NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
if ( aIID.Equals(NS_GET_IID(nsIClassInfo)) ) { \
|
||||
extern nsIClassInfo *NS_CLASSINFO_NAME(_class); \
|
||||
foundInterface = NS_STATIC_CAST(nsIClassInfo*, NS_CLASSINFO_NAME(_class));\
|
||||
} else
|
||||
|
||||
#define NS_CLASSINFO_HELPER_BEGIN(_class, _c) \
|
||||
NS_IMETHODIMP \
|
||||
NS_CI_INTERFACE_GETTER_NAME(_class)(PRUint32 *count, nsIID ***array) \
|
||||
{ \
|
||||
*count = _c; \
|
||||
*array = (nsIID **)nsMemory::Alloc(sizeof (nsIID *) * _c);
|
||||
|
||||
#define NS_CLASSINFO_HELPER_ENTRY(_i, _interface) \
|
||||
(*array)[_i] = (nsIID *)nsMemory::Clone(&NS_GET_IID(_interface), \
|
||||
sizeof(nsIID));
|
||||
|
||||
#define NS_CLASSINFO_HELPER_END \
|
||||
return NS_OK; \
|
||||
}
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _interface) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE1_CI(_class, _i1) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS1_CI(_class, _interface) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE1_CI(_class, _interface) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS2_CI(_class, _i1, _i2) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS3_CI(_class, _i1, _i2, _i3) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS4_CI(_class, _i1, _i2, _i3, _i4) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER5(_class, _i1, _i2, _i3, _i4, _i5) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 5) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE5_CI(_class, _i1, _i2, _i3, _i4, _i5) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER5(_class, _i1, _i2, _i3, _i4, _i5)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER6(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 6) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE6_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER6(_class, _i1, _i2, _i3, _i4, _i5, _i6)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER7(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 7) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE7_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER7(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER8(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 8) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE8_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER8(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER9(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 9) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i9) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE9_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER9(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9)
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER10(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9, _i10) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 10) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(9, _i10) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_CI_INTERFACE_GETTER11(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9, _i10, _i11) \
|
||||
NS_CLASSINFO_HELPER_BEGIN(_class, 11) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(0, _i1) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(1, _i2) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(2, _i3) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(3, _i4) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(4, _i5) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(5, _i6) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(6, _i7) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(7, _i8) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(8, _i9) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(9, _i10) \
|
||||
NS_CLASSINFO_HELPER_ENTRY(10, _i11) \
|
||||
NS_CLASSINFO_HELPER_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9, _i10) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i9) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i10) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_QUERY_INTERFACE11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, \
|
||||
_i7, _i8, _i9, _i10, _i11) \
|
||||
NS_INTERFACE_MAP_BEGIN(_class) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i1) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i2) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i3) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i4) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i5) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i6) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i7) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i8) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i9) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i10) \
|
||||
NS_INTERFACE_MAP_ENTRY(_i11) \
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _i1) \
|
||||
NS_IMPL_QUERY_CLASSINFO(_class) \
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define NS_IMPL_ISUPPORTS10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9, _i10) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE10_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9, _i10) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER10(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9, _i10)
|
||||
|
||||
#define NS_IMPL_ISUPPORTS11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9, _i10, _i11) \
|
||||
NS_IMPL_ADDREF(_class) \
|
||||
NS_IMPL_RELEASE(_class) \
|
||||
NS_IMPL_QUERY_INTERFACE11_CI(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9, _i10, _i11) \
|
||||
NS_IMPL_CI_INTERFACE_GETTER11(_class, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
|
||||
_i8, _i9, _i10, _i11)
|
||||
|
||||
#define NS_INTERFACE_MAP_END_THREADSAFE NS_IMPL_QUERY_TAIL_GUTS
|
||||
|
||||
#endif
|
||||
|
|
|
@ -51,6 +51,7 @@ XPCOM_GLUE_SRC_LCPPSRCS = \
|
|||
nsID.cpp \
|
||||
nsIInterfaceRequestorUtils.cpp \
|
||||
nsINIParser.cpp \
|
||||
nsISupportsImpl.cpp \
|
||||
nsMemory.cpp \
|
||||
nsWeakReference.cpp \
|
||||
nsGREGlue.cpp \
|
||||
|
|
Загрузка…
Ссылка в новой задаче