/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM /mnt/tinderbox/7.1-sdk/src/libs/xpcom18a4/xpcom/ds/nsIVariant.idl
 */

#ifndef __gen_nsIVariant_h__
#define __gen_nsIVariant_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.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:    nsIDataType */
#define NS_IDATATYPE_IID_STR "4d12e540-83d7-11d5-90ed-0010a4e73d9a"

#define NS_IDATATYPE_IID \
  {0x4d12e540, 0x83d7, 0x11d5, \
    { 0x90, 0xed, 0x00, 0x10, 0xa4, 0xe7, 0x3d, 0x9a }}

class NS_NO_VTABLE nsIDataType : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IDATATYPE_IID)

  enum { VTYPE_INT8 = 0U };

  enum { VTYPE_INT16 = 1U };

  enum { VTYPE_INT32 = 2U };

  enum { VTYPE_INT64 = 3U };

  enum { VTYPE_UINT8 = 4U };

  enum { VTYPE_UINT16 = 5U };

  enum { VTYPE_UINT32 = 6U };

  enum { VTYPE_UINT64 = 7U };

  enum { VTYPE_FLOAT = 8U };

  enum { VTYPE_DOUBLE = 9U };

  enum { VTYPE_BOOL = 10U };

  enum { VTYPE_CHAR = 11U };

  enum { VTYPE_WCHAR = 12U };

  enum { VTYPE_VOID = 13U };

  enum { VTYPE_ID = 14U };

  enum { VTYPE_DOMSTRING = 15U };

  enum { VTYPE_CHAR_STR = 16U };

  enum { VTYPE_WCHAR_STR = 17U };

  enum { VTYPE_INTERFACE = 18U };

  enum { VTYPE_INTERFACE_IS = 19U };

  enum { VTYPE_ARRAY = 20U };

  enum { VTYPE_STRING_SIZE_IS = 21U };

  enum { VTYPE_WSTRING_SIZE_IS = 22U };

  enum { VTYPE_UTF8STRING = 23U };

  enum { VTYPE_CSTRING = 24U };

  enum { VTYPE_ASTRING = 25U };

  enum { VTYPE_EMPTY_ARRAY = 254U };

  enum { VTYPE_EMPTY = 255U };

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIDATATYPE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIDATATYPE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIDATATYPE(_to) \


/* starting interface:    nsIVariant */
#define NS_IVARIANT_IID_STR "6c9eb060-8c6a-11d5-90f3-0010a4e73d9a"

#define NS_IVARIANT_IID \
  {0x6c9eb060, 0x8c6a, 0x11d5, \
    { 0x90, 0xf3, 0x00, 0x10, 0xa4, 0xe7, 0x3d, 0x9a }}

class NS_NO_VTABLE nsIVariant : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IVARIANT_IID)

  /* readonly attribute PRUint16 dataType; */
  NS_IMETHOD GetDataType(PRUint16 *aDataType) = 0;

  /* [noscript] PRUint8 getAsInt8 (); */
  NS_IMETHOD GetAsInt8(PRUint8 *_retval) = 0;

  /* [noscript] PRInt16 getAsInt16 (); */
  NS_IMETHOD GetAsInt16(PRInt16 *_retval) = 0;

  /* [noscript] PRInt32 getAsInt32 (); */
  NS_IMETHOD GetAsInt32(PRInt32 *_retval) = 0;

  /* [noscript] PRInt64 getAsInt64 (); */
  NS_IMETHOD GetAsInt64(PRInt64 *_retval) = 0;

  /* [noscript] PRUint8 getAsUint8 (); */
  NS_IMETHOD GetAsUint8(PRUint8 *_retval) = 0;

  /* [noscript] PRUint16 getAsUint16 (); */
  NS_IMETHOD GetAsUint16(PRUint16 *_retval) = 0;

  /* [noscript] PRUint32 getAsUint32 (); */
  NS_IMETHOD GetAsUint32(PRUint32 *_retval) = 0;

  /* [noscript] PRUint64 getAsUint64 (); */
  NS_IMETHOD GetAsUint64(PRUint64 *_retval) = 0;

  /* [noscript] float getAsFloat (); */
  NS_IMETHOD GetAsFloat(float *_retval) = 0;

  /* [noscript] double getAsDouble (); */
  NS_IMETHOD GetAsDouble(double *_retval) = 0;

  /* [noscript] PRBool getAsBool (); */
  NS_IMETHOD GetAsBool(PRBool *_retval) = 0;

  /* [noscript] char getAsChar (); */
  NS_IMETHOD GetAsChar(char *_retval) = 0;

  /* [noscript] wchar getAsWChar (); */
  NS_IMETHOD GetAsWChar(PRUnichar *_retval) = 0;

  /* [notxpcom] nsresult getAsID (out nsID retval); */
  NS_IMETHOD_(nsresult) GetAsID(nsID *retval) = 0;

  /* [noscript] AString getAsAString (); */
  NS_IMETHOD GetAsAString(nsAString & _retval) = 0;

  /* [noscript] DOMString getAsDOMString (); */
  NS_IMETHOD GetAsDOMString(nsAString & _retval) = 0;

  /* [noscript] ACString getAsACString (); */
  NS_IMETHOD GetAsACString(nsACString & _retval) = 0;

  /* [noscript] AUTF8String getAsAUTF8String (); */
  NS_IMETHOD GetAsAUTF8String(nsACString & _retval) = 0;

  /* [noscript] string getAsString (); */
  NS_IMETHOD GetAsString(char **_retval) = 0;

  /* [noscript] wstring getAsWString (); */
  NS_IMETHOD GetAsWString(PRUnichar **_retval) = 0;

  /* [noscript] nsISupports getAsISupports (); */
  NS_IMETHOD GetAsISupports(nsISupports * *_retval) = 0;

  /* [noscript] void getAsInterface (out nsIIDPtr iid, [iid_is (iid), retval] out nsQIResult iface); */
  NS_IMETHOD GetAsInterface(nsIID * *iid, void * *iface) = 0;

  /* [notxpcom] nsresult getAsArray (out PRUint16 type, out nsIID iid, out PRUint32 count, out voidPtr ptr); */
  NS_IMETHOD_(nsresult) GetAsArray(PRUint16 *type, nsIID *iid, PRUint32 *count, void * *ptr) = 0;

  /* [noscript] void getAsStringWithSize (out PRUint32 size, [size_is (size), retval] out string str); */
  NS_IMETHOD GetAsStringWithSize(PRUint32 *size, char **str) = 0;

  /* [noscript] void getAsWStringWithSize (out PRUint32 size, [size_is (size), retval] out wstring str); */
  NS_IMETHOD GetAsWStringWithSize(PRUint32 *size, PRUnichar **str) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIVARIANT \
  NS_IMETHOD GetDataType(PRUint16 *aDataType) NS_OVERRIDE; \
  NS_IMETHOD GetAsInt8(PRUint8 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsInt16(PRInt16 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsInt32(PRInt32 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsInt64(PRInt64 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsUint8(PRUint8 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsUint16(PRUint16 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsUint32(PRUint32 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsUint64(PRUint64 *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsFloat(float *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsDouble(double *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsBool(PRBool *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsChar(char *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsWChar(PRUnichar *_retval) NS_OVERRIDE; \
  NS_IMETHOD_(nsresult) GetAsID(nsID *retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsAString(nsAString & _retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsDOMString(nsAString & _retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsACString(nsACString & _retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsAUTF8String(nsACString & _retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsString(char **_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsWString(PRUnichar **_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsISupports(nsISupports * *_retval) NS_OVERRIDE; \
  NS_IMETHOD GetAsInterface(nsIID * *iid, void * *iface) NS_OVERRIDE; \
  NS_IMETHOD_(nsresult) GetAsArray(PRUint16 *type, nsIID *iid, PRUint32 *count, void * *ptr) NS_OVERRIDE; \
  NS_IMETHOD GetAsStringWithSize(PRUint32 *size, char **str) NS_OVERRIDE; \
  NS_IMETHOD GetAsWStringWithSize(PRUint32 *size, PRUnichar **str) NS_OVERRIDE; 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIVARIANT(_to) \
  NS_IMETHOD GetDataType(PRUint16 *aDataType) { return _to GetDataType(aDataType); } \
  NS_IMETHOD GetAsInt8(PRUint8 *_retval) { return _to GetAsInt8(PRUint8 *_retval); } \
  NS_IMETHOD GetAsInt16(PRInt16 *_retval) { return _to GetAsInt16(PRInt16 *_retval); } \
  NS_IMETHOD GetAsInt32(PRInt32 *_retval) { return _to GetAsInt32(PRInt32 *_retval); } \
  NS_IMETHOD GetAsInt64(PRInt64 *_retval) { return _to GetAsInt64(PRInt64 *_retval); } \
  NS_IMETHOD GetAsUint8(PRUint8 *_retval) { return _to GetAsUint8(PRUint8 *_retval); } \
  NS_IMETHOD GetAsUint16(PRUint16 *_retval) { return _to GetAsUint16(PRUint16 *_retval); } \
  NS_IMETHOD GetAsUint32(PRUint32 *_retval) { return _to GetAsUint32(PRUint32 *_retval); } \
  NS_IMETHOD GetAsUint64(PRUint64 *_retval) { return _to GetAsUint64(PRUint64 *_retval); } \
  NS_IMETHOD GetAsFloat(float *_retval) { return _to GetAsFloat(float *_retval); } \
  NS_IMETHOD GetAsDouble(double *_retval) { return _to GetAsDouble(double *_retval); } \
  NS_IMETHOD GetAsBool(PRBool *_retval) { return _to GetAsBool(PRBool *_retval); } \
  NS_IMETHOD GetAsChar(char *_retval) { return _to GetAsChar(char *_retval); } \
  NS_IMETHOD GetAsWChar(PRUnichar *_retval) { return _to GetAsWChar(PRUnichar *_retval); } \
  NS_IMETHOD_(nsresult) GetAsID(nsID *retval) { return _to GetAsID(retval); } \
  NS_IMETHOD GetAsAString(nsAString & _retval) { return _to GetAsAString(nsAString & _retval); } \
  NS_IMETHOD GetAsDOMString(nsAString & _retval) { return _to GetAsDOMString(nsAString & _retval); } \
  NS_IMETHOD GetAsACString(nsACString & _retval) { return _to GetAsACString(nsACString & _retval); } \
  NS_IMETHOD GetAsAUTF8String(nsACString & _retval) { return _to GetAsAUTF8String(nsACString & _retval); } \
  NS_IMETHOD GetAsString(char **_retval) { return _to GetAsString(char **_retval); } \
  NS_IMETHOD GetAsWString(PRUnichar **_retval) { return _to GetAsWString(PRUnichar **_retval); } \
  NS_IMETHOD GetAsISupports(nsISupports * *_retval) { return _to GetAsISupports(nsISupports * *_retval); } \
  NS_IMETHOD GetAsInterface(nsIID * *iid, void * *iface) { return _to GetAsInterface(iid, iface); } \
  NS_IMETHOD_(nsresult) GetAsArray(PRUint16 *type, nsIID *iid, PRUint32 *count, void * *ptr) { return _to GetAsArray(type, iid, count, ptr); } \
  NS_IMETHOD GetAsStringWithSize(PRUint32 *size, char **str) { return _to GetAsStringWithSize(size, str); } \
  NS_IMETHOD GetAsWStringWithSize(PRUint32 *size, PRUnichar **str) { return _to GetAsWStringWithSize(size, str); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIVARIANT(_to) \
  NS_IMETHOD GetDataType(PRUint16 *aDataType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDataType(aDataType); } \
  NS_IMETHOD GetAsInt8(PRUint8 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt8(PRUint8 *_retval); } \
  NS_IMETHOD GetAsInt16(PRInt16 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt16(PRInt16 *_retval); } \
  NS_IMETHOD GetAsInt32(PRInt32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt32(PRInt32 *_retval); } \
  NS_IMETHOD GetAsInt64(PRInt64 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt64(PRInt64 *_retval); } \
  NS_IMETHOD GetAsUint8(PRUint8 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint8(PRUint8 *_retval); } \
  NS_IMETHOD GetAsUint16(PRUint16 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint16(PRUint16 *_retval); } \
  NS_IMETHOD GetAsUint32(PRUint32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint32(PRUint32 *_retval); } \
  NS_IMETHOD GetAsUint64(PRUint64 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint64(PRUint64 *_retval); } \
  NS_IMETHOD GetAsFloat(float *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsFloat(float *_retval); } \
  NS_IMETHOD GetAsDouble(double *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsDouble(double *_retval); } \
  NS_IMETHOD GetAsBool(PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsBool(PRBool *_retval); } \
  NS_IMETHOD GetAsChar(char *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsChar(char *_retval); } \
  NS_IMETHOD GetAsWChar(PRUnichar *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsWChar(PRUnichar *_retval); } \
  NS_IMETHOD_(nsresult) GetAsID(nsID *retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsID(retval); } \
  NS_IMETHOD GetAsAString(nsAString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsAString(nsAString & _retval); } \
  NS_IMETHOD GetAsDOMString(nsAString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsDOMString(nsAString & _retval); } \
  NS_IMETHOD GetAsACString(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsACString(nsACString & _retval); } \
  NS_IMETHOD GetAsAUTF8String(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsAUTF8String(nsACString & _retval); } \
  NS_IMETHOD GetAsString(char **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsString(char **_retval); } \
  NS_IMETHOD GetAsWString(PRUnichar **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsWString(PRUnichar **_retval); } \
  NS_IMETHOD GetAsISupports(nsISupports * *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsISupports(nsISupports * *_retval); } \
  NS_IMETHOD GetAsInterface(nsIID * *iid, void * *iface) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInterface(iid, iface); } \
  NS_IMETHOD_(nsresult) GetAsArray(PRUint16 *type, nsIID *iid, PRUint32 *count, void * *ptr) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsArray(type, iid, count, ptr); } \
  NS_IMETHOD GetAsStringWithSize(PRUint32 *size, char **str) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsStringWithSize(size, str); } \
  NS_IMETHOD GetAsWStringWithSize(PRUint32 *size, PRUnichar **str) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsWStringWithSize(size, str); } 


/* starting interface:    nsIWritableVariant */
#define NS_IWRITABLEVARIANT_IID_STR "5586a590-8c82-11d5-90f3-0010a4e73d9a"

#define NS_IWRITABLEVARIANT_IID \
  {0x5586a590, 0x8c82, 0x11d5, \
    { 0x90, 0xf3, 0x00, 0x10, 0xa4, 0xe7, 0x3d, 0x9a }}

class NS_NO_VTABLE nsIWritableVariant : public nsIVariant {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IWRITABLEVARIANT_IID)

  /* attribute PRBool writable; */
  NS_IMETHOD GetWritable(PRBool *aWritable) = 0;
  NS_IMETHOD SetWritable(PRBool aWritable) = 0;

  /* void setAsInt8 (in PRUint8 aValue); */
  NS_IMETHOD SetAsInt8(PRUint8 aValue) = 0;

  /* void setAsInt16 (in PRInt16 aValue); */
  NS_IMETHOD SetAsInt16(PRInt16 aValue) = 0;

  /* void setAsInt32 (in PRInt32 aValue); */
  NS_IMETHOD SetAsInt32(PRInt32 aValue) = 0;

  /* void setAsInt64 (in PRInt64 aValue); */
  NS_IMETHOD SetAsInt64(PRInt64 aValue) = 0;

  /* void setAsUint8 (in PRUint8 aValue); */
  NS_IMETHOD SetAsUint8(PRUint8 aValue) = 0;

  /* void setAsUint16 (in PRUint16 aValue); */
  NS_IMETHOD SetAsUint16(PRUint16 aValue) = 0;

  /* void setAsUint32 (in PRUint32 aValue); */
  NS_IMETHOD SetAsUint32(PRUint32 aValue) = 0;

  /* void setAsUint64 (in PRUint64 aValue); */
  NS_IMETHOD SetAsUint64(PRUint64 aValue) = 0;

  /* void setAsFloat (in float aValue); */
  NS_IMETHOD SetAsFloat(float aValue) = 0;

  /* void setAsDouble (in double aValue); */
  NS_IMETHOD SetAsDouble(double aValue) = 0;

  /* void setAsBool (in PRBool aValue); */
  NS_IMETHOD SetAsBool(PRBool aValue) = 0;

  /* void setAsChar (in char aValue); */
  NS_IMETHOD SetAsChar(char aValue) = 0;

  /* void setAsWChar (in wchar aValue); */
  NS_IMETHOD SetAsWChar(PRUnichar aValue) = 0;

  /* void setAsID (in nsIDRef aValue); */
  NS_IMETHOD SetAsID(const nsID & aValue) = 0;

  /* void setAsAString (in AString aValue); */
  NS_IMETHOD SetAsAString(const nsAString & aValue) = 0;

  /* void setAsDOMString (in DOMString aValue); */
  NS_IMETHOD SetAsDOMString(const nsAString & aValue) = 0;

  /* void setAsACString (in ACString aValue); */
  NS_IMETHOD SetAsACString(const nsACString & aValue) = 0;

  /* void setAsAUTF8String (in AUTF8String aValue); */
  NS_IMETHOD SetAsAUTF8String(const nsACString & aValue) = 0;

  /* void setAsString (in string aValue); */
  NS_IMETHOD SetAsString(const char *aValue) = 0;

  /* void setAsWString (in wstring aValue); */
  NS_IMETHOD SetAsWString(const PRUnichar *aValue) = 0;

  /* void setAsISupports (in nsISupports aValue); */
  NS_IMETHOD SetAsISupports(nsISupports * aValue) = 0;

  /* void setAsInterface (in nsIIDRef iid, [iid_is (iid)] in nsQIResult iface); */
  NS_IMETHOD SetAsInterface(const nsIID & iid, void * iface) = 0;

  /* [noscript] void setAsArray (in PRUint16 type, in nsIIDPtr iid, in PRUint32 count, in voidPtr ptr); */
  NS_IMETHOD SetAsArray(PRUint16 type, const nsIID * iid, PRUint32 count, void * ptr) = 0;

  /* void setAsStringWithSize (in PRUint32 size, [size_is (size)] in string str); */
  NS_IMETHOD SetAsStringWithSize(PRUint32 size, const char *str) = 0;

  /* void setAsWStringWithSize (in PRUint32 size, [size_is (size)] in wstring str); */
  NS_IMETHOD SetAsWStringWithSize(PRUint32 size, const PRUnichar *str) = 0;

  /* void setAsVoid (); */
  NS_IMETHOD SetAsVoid(void) = 0;

  /* void setAsEmpty (); */
  NS_IMETHOD SetAsEmpty(void) = 0;

  /* void setAsEmptyArray (); */
  NS_IMETHOD SetAsEmptyArray(void) = 0;

  /* void setFromVariant (in nsIVariant aValue); */
  NS_IMETHOD SetFromVariant(nsIVariant * aValue) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIWRITABLEVARIANT \
  NS_IMETHOD GetWritable(PRBool *aWritable) NS_OVERRIDE; \
  NS_IMETHOD SetWritable(PRBool aWritable) NS_OVERRIDE; \
  NS_IMETHOD SetAsInt8(PRUint8 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsInt16(PRInt16 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsInt32(PRInt32 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsInt64(PRInt64 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsUint8(PRUint8 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsUint16(PRUint16 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsUint32(PRUint32 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsUint64(PRUint64 aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsFloat(float aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsDouble(double aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsBool(PRBool aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsChar(char aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsWChar(PRUnichar aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsID(const nsID & aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsAString(const nsAString & aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsDOMString(const nsAString & aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsACString(const nsACString & aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsAUTF8String(const nsACString & aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsString(const char *aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsWString(const PRUnichar *aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsISupports(nsISupports * aValue) NS_OVERRIDE; \
  NS_IMETHOD SetAsInterface(const nsIID & iid, void * iface) NS_OVERRIDE; \
  NS_IMETHOD SetAsArray(PRUint16 type, const nsIID * iid, PRUint32 count, void * ptr) NS_OVERRIDE; \
  NS_IMETHOD SetAsStringWithSize(PRUint32 size, const char *str) NS_OVERRIDE; \
  NS_IMETHOD SetAsWStringWithSize(PRUint32 size, const PRUnichar *str) NS_OVERRIDE; \
  NS_IMETHOD SetAsVoid(void) NS_OVERRIDE; \
  NS_IMETHOD SetAsEmpty(void) NS_OVERRIDE; \
  NS_IMETHOD SetAsEmptyArray(void) NS_OVERRIDE; \
  NS_IMETHOD SetFromVariant(nsIVariant * aValue) NS_OVERRIDE; 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIWRITABLEVARIANT(_to) \
  NS_IMETHOD GetWritable(PRBool *aWritable) { return _to GetWritable(aWritable); } \
  NS_IMETHOD SetWritable(PRBool aWritable) { return _to SetWritable(aWritable); } \
  NS_IMETHOD SetAsInt8(PRUint8 aValue) { return _to SetAsInt8(aValue); } \
  NS_IMETHOD SetAsInt16(PRInt16 aValue) { return _to SetAsInt16(aValue); } \
  NS_IMETHOD SetAsInt32(PRInt32 aValue) { return _to SetAsInt32(aValue); } \
  NS_IMETHOD SetAsInt64(PRInt64 aValue) { return _to SetAsInt64(aValue); } \
  NS_IMETHOD SetAsUint8(PRUint8 aValue) { return _to SetAsUint8(aValue); } \
  NS_IMETHOD SetAsUint16(PRUint16 aValue) { return _to SetAsUint16(aValue); } \
  NS_IMETHOD SetAsUint32(PRUint32 aValue) { return _to SetAsUint32(aValue); } \
  NS_IMETHOD SetAsUint64(PRUint64 aValue) { return _to SetAsUint64(aValue); } \
  NS_IMETHOD SetAsFloat(float aValue) { return _to SetAsFloat(aValue); } \
  NS_IMETHOD SetAsDouble(double aValue) { return _to SetAsDouble(aValue); } \
  NS_IMETHOD SetAsBool(PRBool aValue) { return _to SetAsBool(aValue); } \
  NS_IMETHOD SetAsChar(char aValue) { return _to SetAsChar(aValue); } \
  NS_IMETHOD SetAsWChar(PRUnichar aValue) { return _to SetAsWChar(aValue); } \
  NS_IMETHOD SetAsID(const nsID & aValue) { return _to SetAsID(aValue); } \
  NS_IMETHOD SetAsAString(const nsAString & aValue) { return _to SetAsAString(aValue); } \
  NS_IMETHOD SetAsDOMString(const nsAString & aValue) { return _to SetAsDOMString(aValue); } \
  NS_IMETHOD SetAsACString(const nsACString & aValue) { return _to SetAsACString(aValue); } \
  NS_IMETHOD SetAsAUTF8String(const nsACString & aValue) { return _to SetAsAUTF8String(aValue); } \
  NS_IMETHOD SetAsString(const char *aValue) { return _to SetAsString(aValue); } \
  NS_IMETHOD SetAsWString(const PRUnichar *aValue) { return _to SetAsWString(aValue); } \
  NS_IMETHOD SetAsISupports(nsISupports * aValue) { return _to SetAsISupports(aValue); } \
  NS_IMETHOD SetAsInterface(const nsIID & iid, void * iface) { return _to SetAsInterface(iid, iface); } \
  NS_IMETHOD SetAsArray(PRUint16 type, const nsIID * iid, PRUint32 count, void * ptr) { return _to SetAsArray(type, iid, count, ptr); } \
  NS_IMETHOD SetAsStringWithSize(PRUint32 size, const char *str) { return _to SetAsStringWithSize(size, str); } \
  NS_IMETHOD SetAsWStringWithSize(PRUint32 size, const PRUnichar *str) { return _to SetAsWStringWithSize(size, str); } \
  NS_IMETHOD SetAsVoid(void) { return _to SetAsVoid(); } \
  NS_IMETHOD SetAsEmpty(void) { return _to SetAsEmpty(); } \
  NS_IMETHOD SetAsEmptyArray(void) { return _to SetAsEmptyArray(); } \
  NS_IMETHOD SetFromVariant(nsIVariant * aValue) { return _to SetFromVariant(aValue); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIWRITABLEVARIANT(_to) \
  NS_IMETHOD GetWritable(PRBool *aWritable) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetWritable(aWritable); } \
  NS_IMETHOD SetWritable(PRBool aWritable) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetWritable(aWritable); } \
  NS_IMETHOD SetAsInt8(PRUint8 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt8(aValue); } \
  NS_IMETHOD SetAsInt16(PRInt16 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt16(aValue); } \
  NS_IMETHOD SetAsInt32(PRInt32 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt32(aValue); } \
  NS_IMETHOD SetAsInt64(PRInt64 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt64(aValue); } \
  NS_IMETHOD SetAsUint8(PRUint8 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint8(aValue); } \
  NS_IMETHOD SetAsUint16(PRUint16 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint16(aValue); } \
  NS_IMETHOD SetAsUint32(PRUint32 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint32(aValue); } \
  NS_IMETHOD SetAsUint64(PRUint64 aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint64(aValue); } \
  NS_IMETHOD SetAsFloat(float aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsFloat(aValue); } \
  NS_IMETHOD SetAsDouble(double aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsDouble(aValue); } \
  NS_IMETHOD SetAsBool(PRBool aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsBool(aValue); } \
  NS_IMETHOD SetAsChar(char aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsChar(aValue); } \
  NS_IMETHOD SetAsWChar(PRUnichar aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsWChar(aValue); } \
  NS_IMETHOD SetAsID(const nsID & aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsID(aValue); } \
  NS_IMETHOD SetAsAString(const nsAString & aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsAString(aValue); } \
  NS_IMETHOD SetAsDOMString(const nsAString & aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsDOMString(aValue); } \
  NS_IMETHOD SetAsACString(const nsACString & aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsACString(aValue); } \
  NS_IMETHOD SetAsAUTF8String(const nsACString & aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsAUTF8String(aValue); } \
  NS_IMETHOD SetAsString(const char *aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsString(aValue); } \
  NS_IMETHOD SetAsWString(const PRUnichar *aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsWString(aValue); } \
  NS_IMETHOD SetAsISupports(nsISupports * aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsISupports(aValue); } \
  NS_IMETHOD SetAsInterface(const nsIID & iid, void * iface) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInterface(iid, iface); } \
  NS_IMETHOD SetAsArray(PRUint16 type, const nsIID * iid, PRUint32 count, void * ptr) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsArray(type, iid, count, ptr); } \
  NS_IMETHOD SetAsStringWithSize(PRUint32 size, const char *str) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsStringWithSize(size, str); } \
  NS_IMETHOD SetAsWStringWithSize(PRUint32 size, const PRUnichar *str) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsWStringWithSize(size, str); } \
  NS_IMETHOD SetAsVoid(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsVoid(); } \
  NS_IMETHOD SetAsEmpty(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsEmpty(); } \
  NS_IMETHOD SetAsEmptyArray(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsEmptyArray(); } \
  NS_IMETHOD SetFromVariant(nsIVariant * aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetFromVariant(aValue); } 


// The contractID for the generic implementation built in to xpcom.
#define NS_VARIANT_CONTRACTID "@mozilla.org/variant;1"

#endif /* __gen_nsIVariant_h__ */
