123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #ifndef nsISupportsUtils_h__
- #define nsISupportsUtils_h__
- #ifndef nscore_h___
- #include "nscore.h"
- #endif
- #ifndef nsISupportsBase_h__
- #include "nsISupportsBase.h"
- #endif
- #ifndef nsError_h__
- #include "nsError.h"
- #endif
- #ifndef nsDebug_h___
- #include "nsDebug.h"
- #endif
- #ifndef nsISupportsImpl_h__
- #include "nsISupportsImpl.h"
- #endif
- #define NS_NEWXPCOM(_result,_type) \
- PR_BEGIN_MACRO \
- _result = new _type(); \
- PR_END_MACRO
- #define NS_DELETEXPCOM(_ptr) \
- PR_BEGIN_MACRO \
- delete (_ptr); \
- PR_END_MACRO
- #define NS_ADDREF(_ptr) \
- (_ptr)->AddRef()
- #define NS_ADDREF_THIS() \
- AddRef()
- extern "C++" {
- template <class T>
- inline
- nsrefcnt
- ns_if_addref( T expr )
- {
- return expr ? expr->AddRef() : 0;
- }
- }
- #define NS_IF_ADDREF(_expr) ns_if_addref(_expr)
- #define NS_RELEASE(_ptr) \
- PR_BEGIN_MACRO \
- (_ptr)->Release(); \
- (_ptr) = 0; \
- PR_END_MACRO
- #define NS_RELEASE_THIS() \
- Release()
- #define NS_RELEASE2(_ptr,_rv) \
- PR_BEGIN_MACRO \
- _rv = (_ptr)->Release(); \
- if (0 == (_rv)) (_ptr) = 0; \
- PR_END_MACRO
- #define NS_IF_RELEASE(_ptr) \
- PR_BEGIN_MACRO \
- if (_ptr) { \
- (_ptr)->Release(); \
- (_ptr) = 0; \
- } \
- PR_END_MACRO
- #define NS_ISUPPORTS_CAST(__unambiguousBase, __expr) \
- NS_STATIC_CAST(nsISupports*, NS_STATIC_CAST(__unambiguousBase, __expr))
- extern "C++" {
- class nsISupports;
- template <class T>
- struct nsCOMTypeInfo
- {
- static const nsIID& GetIID() { return T::GetIID(); }
- };
- NS_SPECIALIZE_TEMPLATE
- struct nsCOMTypeInfo<nsISupports>
- {
- static const nsIID& GetIID() {
- static const nsIID iid_NS_ISUPPORTS_IID = NS_ISUPPORTS_IID; return iid_NS_ISUPPORTS_IID;
- }
- };
- #define NS_GET_IID(T) nsCOMTypeInfo<T>::GetIID()
- template <class T, class DestinationType>
- inline
- nsresult
- CallQueryInterface( T* aSource, DestinationType** aDestination )
- {
- NS_PRECONDITION(aSource, "null parameter");
- NS_PRECONDITION(aDestination, "null parameter");
-
- return aSource->QueryInterface(NS_GET_IID(DestinationType),
- NS_REINTERPRET_CAST(void**, aDestination));
- }
- }
- #endif
|