/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // IWYU pragma: private, include "nsISupports.h" #ifndef nsISupportsBase_h__ #define nsISupportsBase_h__ #ifndef nscore_h___ #include "nscore.h" #endif #ifndef nsID_h__ #include "nsID.h" #endif /*@{*/ /** * IID for the nsISupports interface * {00000000-0000-0000-c000-000000000046} * * To maintain binary compatibility with COM's IUnknown, we define the IID * of nsISupports to be the same as that of COM's IUnknown. */ #define NS_ISUPPORTS_IID \ { 0x00000000, 0x0000, 0x0000, \ {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} } /** * Basic component object model interface. Objects which implement * this interface support runtime interface discovery (QueryInterface) * and a reference counted memory model (AddRef/Release). This is * modelled after the win32 IUnknown API. */ class NS_NO_VTABLE nsISupports { public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISUPPORTS_IID) /** * @name Methods */ //@{ /** * A run time mechanism for interface discovery. * @param aIID [in] A requested interface IID * @param aInstancePtr [out] A pointer to an interface pointer to * receive the result. * @return NS_OK if the interface is supported by the associated * instance, NS_NOINTERFACE if it is not. * * aInstancePtr must not be null. */ NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) = 0; /** * Increases the reference count for this interface. * The associated instance will not be deleted unless * the reference count is returned to zero. * * @return The resulting reference count. */ NS_IMETHOD_(MozExternalRefCountType) AddRef(void) = 0; /** * Decreases the reference count for this interface. * Generally, if the reference count returns to zero, * the associated instance is deleted. * * @return The resulting reference count. */ NS_IMETHOD_(MozExternalRefCountType) Release(void) = 0; //@} }; NS_DEFINE_STATIC_IID_ACCESSOR(nsISupports, NS_ISUPPORTS_IID) /*@}*/ #endif