/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM /mnt/tinderbox/7.2-sdk/src/libs/xpcom18a4/xpcom/base/nsIExceptionService.idl
 */

#ifndef __gen_nsIExceptionService_h__
#define __gen_nsIExceptionService_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

#ifndef __gen_nsIException_h__
#include "nsIException.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif

/* starting interface:    nsIExceptionProvider */
#define NS_IEXCEPTIONPROVIDER_IID_STR "0577744c-c1d2-47f2-8bcc-ce7a9e5a88fc"

#define NS_IEXCEPTIONPROVIDER_IID \
  {0x0577744c, 0xc1d2, 0x47f2, \
    { 0x8b, 0xcc, 0xce, 0x7a, 0x9e, 0x5a, 0x88, 0xfc }}

class NS_NO_VTABLE nsIExceptionProvider : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IEXCEPTIONPROVIDER_IID)

  /* nsIException getException (in nsresult result, in nsIException defaultException); */
  NS_IMETHOD GetException(nsresult result, nsIException * defaultException, nsIException * *_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIEXCEPTIONPROVIDER \
  NS_IMETHOD GetException(nsresult result, nsIException * defaultException, nsIException * *_retval) NS_OVERRIDE; 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIEXCEPTIONPROVIDER(_to) \
  NS_IMETHOD GetException(nsresult result, nsIException * defaultException, nsIException * *_retval) { return _to GetException(result, defaultException, nsIException * *_retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIEXCEPTIONPROVIDER(_to) \
  NS_IMETHOD GetException(nsresult result, nsIException * defaultException, nsIException * *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetException(result, defaultException, nsIException * *_retval); } 


/* starting interface:    nsIExceptionManager */
#define NS_IEXCEPTIONMANAGER_IID_STR "efc9d00b-231c-4feb-852c-ac017266a415"

#define NS_IEXCEPTIONMANAGER_IID \
  {0xefc9d00b, 0x231c, 0x4feb, \
    { 0x85, 0x2c, 0xac, 0x01, 0x72, 0x66, 0xa4, 0x15 }}

class NS_NO_VTABLE nsIExceptionManager : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IEXCEPTIONMANAGER_IID)

  /* void setCurrentException (in nsIException error); */
  NS_IMETHOD SetCurrentException(nsIException * error) = 0;

  /* nsIException getCurrentException (); */
  NS_IMETHOD GetCurrentException(nsIException * *_retval) = 0;

  /* nsIException getExceptionFromProvider (in nsresult rc, in nsIException defaultException); */
  NS_IMETHOD GetExceptionFromProvider(nsresult rc, nsIException * defaultException, nsIException * *_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIEXCEPTIONMANAGER \
  NS_IMETHOD SetCurrentException(nsIException * error) NS_OVERRIDE; \
  NS_IMETHOD GetCurrentException(nsIException * *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetExceptionFromProvider(nsresult rc, nsIException * defaultException, nsIException * *_retval) NS_OVERRIDE; 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIEXCEPTIONMANAGER(_to) \
  NS_IMETHOD SetCurrentException(nsIException * error) { return _to SetCurrentException(error); } \
  NS_IMETHOD GetCurrentException(nsIException * *_retval) { return _to GetCurrentException(nsIException * *_retval); } \
  NS_IMETHOD GetExceptionFromProvider(nsresult rc, nsIException * defaultException, nsIException * *_retval) { return _to GetExceptionFromProvider(rc, defaultException, nsIException * *_retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIEXCEPTIONMANAGER(_to) \
  NS_IMETHOD SetCurrentException(nsIException * error) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCurrentException(error); } \
  NS_IMETHOD GetCurrentException(nsIException * *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCurrentException(nsIException * *_retval); } \
  NS_IMETHOD GetExceptionFromProvider(nsresult rc, nsIException * defaultException, nsIException * *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetExceptionFromProvider(rc, defaultException, nsIException * *_retval); } 


/* starting interface:    nsIExceptionService */
#define NS_IEXCEPTIONSERVICE_IID_STR "35a88f54-f267-4414-92a7-191f6454ab52"

#define NS_IEXCEPTIONSERVICE_IID \
  {0x35a88f54, 0xf267, 0x4414, \
    { 0x92, 0xa7, 0x19, 0x1f, 0x64, 0x54, 0xab, 0x52 }}

class NS_NO_VTABLE nsIExceptionService : public nsIExceptionManager {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IEXCEPTIONSERVICE_IID)

  /* readonly attribute nsIExceptionManager currentExceptionManager; */
  NS_IMETHOD GetCurrentExceptionManager(nsIExceptionManager * *aCurrentExceptionManager) = 0;

  /* void registerExceptionProvider (in nsIExceptionProvider provider, in PRUint32 moduleCode); */
  NS_IMETHOD RegisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) = 0;

  /* void unregisterExceptionProvider (in nsIExceptionProvider provider, in PRUint32 moduleCode); */
  NS_IMETHOD UnregisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIEXCEPTIONSERVICE \
  NS_IMETHOD GetCurrentExceptionManager(nsIExceptionManager * *aCurrentExceptionManager) NS_OVERRIDE; \
  NS_IMETHOD RegisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) NS_OVERRIDE; \
  NS_IMETHOD UnregisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) NS_OVERRIDE; 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIEXCEPTIONSERVICE(_to) \
  NS_IMETHOD GetCurrentExceptionManager(nsIExceptionManager * *aCurrentExceptionManager) { return _to GetCurrentExceptionManager(aCurrentExceptionManager); } \
  NS_IMETHOD RegisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) { return _to RegisterExceptionProvider(provider, moduleCode); } \
  NS_IMETHOD UnregisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) { return _to UnregisterExceptionProvider(provider, moduleCode); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIEXCEPTIONSERVICE(_to) \
  NS_IMETHOD GetCurrentExceptionManager(nsIExceptionManager * *aCurrentExceptionManager) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCurrentExceptionManager(aCurrentExceptionManager); } \
  NS_IMETHOD RegisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) { return !_to ? NS_ERROR_NULL_POINTER : _to->RegisterExceptionProvider(provider, moduleCode); } \
  NS_IMETHOD UnregisterExceptionProvider(nsIExceptionProvider * provider, PRUint32 moduleCode) { return !_to ? NS_ERROR_NULL_POINTER : _to->UnregisterExceptionProvider(provider, moduleCode); } 


#define NS_EXCEPTIONSERVICE_CLASSNAME "Exception Service"
// {35A88F54-F267-4414-92A7-191F6454AB52}
#define NS_EXCEPTIONSERVICE_CID \
{ 0x35a88f54, 0xf267, 0x4414, { 0x92, 0xa7, 0x19, 0x1f, 0x64, 0x54, 0xab, 0x52 } }
#define NS_EXCEPTIONSERVICE_CONTRACTID "@mozilla.org/exceptionservice;1"

#endif /* __gen_nsIExceptionService_h__ */
