/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM $SRCDIR/xpcom/ds/nsIVariant.idl
 */

#ifndef __gen_nsIVariant_h__
#define __gen_nsIVariant_h__


#include "nsISupports.h"

#include "js/Value.h"

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
// %{C++:11-51
#include "xptinfo.h"

// This enum class used to be a const-only XPIDL interface, containing literal
// integer descriptions of the different fields. Instead, it now directly
// references the nsXPTTypeTag variants VTYPE_ are intended to match.
struct nsIDataType
{
    enum {
        // These MUST match the declarations in xptinfo.h.
        // Otherwise the world is likely to explode.
        VTYPE_INT8              = TD_INT8             ,
        VTYPE_INT16             = TD_INT16            ,
        VTYPE_INT32             = TD_INT32            ,
        VTYPE_INT64             = TD_INT64            ,
        VTYPE_UINT8             = TD_UINT8            ,
        VTYPE_UINT16            = TD_UINT16           ,
        VTYPE_UINT32            = TD_UINT32           ,
        VTYPE_UINT64            = TD_UINT64           ,
        VTYPE_FLOAT             = TD_FLOAT            ,
        VTYPE_DOUBLE            = TD_DOUBLE           ,
        VTYPE_BOOL              = TD_BOOL             ,
        VTYPE_CHAR              = TD_CHAR             ,
        VTYPE_WCHAR             = TD_WCHAR            ,
        VTYPE_VOID              = TD_VOID             ,
        VTYPE_ID                = TD_NSIDPTR          ,
        VTYPE_CHAR_STR          = TD_PSTRING          ,
        VTYPE_WCHAR_STR         = TD_PWSTRING         ,
        VTYPE_INTERFACE         = TD_INTERFACE_TYPE   ,
        VTYPE_INTERFACE_IS      = TD_INTERFACE_IS_TYPE,
        VTYPE_ARRAY             = TD_LEGACY_ARRAY     ,
        VTYPE_STRING_SIZE_IS    = TD_PSTRING_SIZE_IS  ,
        VTYPE_WSTRING_SIZE_IS   = TD_PWSTRING_SIZE_IS ,
        VTYPE_UTF8STRING        = TD_UTF8STRING       ,
        VTYPE_CSTRING           = TD_CSTRING          ,
        VTYPE_ASTRING           = TD_ASTRING          ,

        // Non-xpt variant types
        VTYPE_EMPTY_ARRAY       = 254                 ,
        VTYPE_EMPTY             = 255
    };
};
// %}

/* starting interface:    nsIVariant */
#define NS_IVARIANT_IID_STR "81e4c2de-acac-4ad6-901a-b5fb1b851a0d"

#define NS_IVARIANT_IID \
  {0x81e4c2de, 0xacac, 0x4ad6, \
    { 0x90, 0x1a, 0xb5, 0xfb, 0x1b, 0x85, 0x1a, 0x0d }}

class NS_NO_VTABLE MOZ_BINDING(binding_to, idl, class, XPIDL_nsIVariant) nsIVariant : public nsISupports {
 public:

  NS_INLINE_DECL_STATIC_IID(NS_IVARIANT_IID)

  /* Used by ToJSValue to check which scriptable interface is implemented. */
  using ScriptableInterfaceType = nsIVariant;

  /* [nostdcall,notxpcom] readonly attribute uint16_t dataType; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIVariant_dataType)
  virtual uint16_t GetDataType() = 0;

  /* [noscript] uint8_t getAsInt8 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt8)
  NS_IMETHOD GetAsInt8(uint8_t *_retval) = 0;

  /* [noscript] int16_t getAsInt16 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt16)
  NS_IMETHOD GetAsInt16(int16_t *_retval) = 0;

  /* [noscript] int32_t getAsInt32 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt32)
  NS_IMETHOD GetAsInt32(int32_t *_retval) = 0;

  /* [noscript] int64_t getAsInt64 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt64)
  NS_IMETHOD GetAsInt64(int64_t *_retval) = 0;

  /* [noscript] uint8_t getAsUint8 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint8)
  NS_IMETHOD GetAsUint8(uint8_t *_retval) = 0;

  /* [noscript] uint16_t getAsUint16 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint16)
  NS_IMETHOD GetAsUint16(uint16_t *_retval) = 0;

  /* [noscript] uint32_t getAsUint32 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint32)
  NS_IMETHOD GetAsUint32(uint32_t *_retval) = 0;

  /* [noscript] uint64_t getAsUint64 (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint64)
  NS_IMETHOD GetAsUint64(uint64_t *_retval) = 0;

  /* [noscript] float getAsFloat (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsFloat)
  NS_IMETHOD GetAsFloat(float *_retval) = 0;

  /* [noscript] double getAsDouble (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsDouble)
  NS_IMETHOD GetAsDouble(double *_retval) = 0;

  /* [noscript] boolean getAsBool (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsBool)
  NS_IMETHOD GetAsBool(bool *_retval) = 0;

  /* [noscript] char getAsChar (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsChar)
  NS_IMETHOD GetAsChar(char *_retval) = 0;

  /* [noscript] wchar getAsWChar (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsWChar)
  NS_IMETHOD GetAsWChar(char16_t *_retval) = 0;

  /* [notxpcom] nsresult getAsID (out nsID retval); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsID)
  NS_IMETHOD GetAsID(nsID * retval) = 0;

  /* [noscript] AString getAsAString (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsAString)
  NS_IMETHOD GetAsAString(nsAString& _retval) = 0;

  /* [noscript] ACString getAsACString (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsACString)
  NS_IMETHOD GetAsACString(nsACString& _retval) = 0;

  /* [noscript] AUTF8String getAsAUTF8String (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsAUTF8String)
  NS_IMETHOD GetAsAUTF8String(nsACString& _retval) = 0;

  /* [noscript] string getAsString (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsString)
  NS_IMETHOD GetAsString(char * *_retval) = 0;

  /* [noscript] wstring getAsWString (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsWString)
  NS_IMETHOD GetAsWString(char16_t * *_retval) = 0;

  /* [noscript] nsISupports getAsISupports (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsISupports)
  NS_IMETHOD GetAsISupports(nsISupports **_retval) = 0;

  /* [noscript] jsval getAsJSVal (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsJSVal)
  NS_IMETHOD GetAsJSVal(JS::MutableHandle<JS::Value> _retval) = 0;

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

  /* [notxpcom] nsresult getAsArray (out uint16_t type, out nsIID iid, out uint32_t count, out voidPtr ptr); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsArray)
  NS_IMETHOD GetAsArray(uint16_t *type, nsIID * iid, uint32_t *count, void * * ptr) = 0;

  /* [noscript] void getAsStringWithSize (out uint32_t size, [size_is (size), retval] out string str); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsStringWithSize)
  NS_IMETHOD GetAsStringWithSize(uint32_t *size, char * *str) = 0;

  /* [noscript] void getAsWStringWithSize (out uint32_t size, [size_is (size), retval] out wstring str); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsWStringWithSize)
  NS_IMETHOD GetAsWStringWithSize(uint32_t *size, char16_t * *str) = 0;

};


/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIVARIANT \
  virtual uint16_t GetDataType() override; \
  NS_IMETHOD GetAsInt8(uint8_t *_retval) override; \
  NS_IMETHOD GetAsInt16(int16_t *_retval) override; \
  NS_IMETHOD GetAsInt32(int32_t *_retval) override; \
  NS_IMETHOD GetAsInt64(int64_t *_retval) override; \
  NS_IMETHOD GetAsUint8(uint8_t *_retval) override; \
  NS_IMETHOD GetAsUint16(uint16_t *_retval) override; \
  NS_IMETHOD GetAsUint32(uint32_t *_retval) override; \
  NS_IMETHOD GetAsUint64(uint64_t *_retval) override; \
  NS_IMETHOD GetAsFloat(float *_retval) override; \
  NS_IMETHOD GetAsDouble(double *_retval) override; \
  NS_IMETHOD GetAsBool(bool *_retval) override; \
  NS_IMETHOD GetAsChar(char *_retval) override; \
  NS_IMETHOD GetAsWChar(char16_t *_retval) override; \
  NS_IMETHOD GetAsID(nsID * retval) override; \
  NS_IMETHOD GetAsAString(nsAString& _retval) override; \
  NS_IMETHOD GetAsACString(nsACString& _retval) override; \
  NS_IMETHOD GetAsAUTF8String(nsACString& _retval) override; \
  NS_IMETHOD GetAsString(char * *_retval) override; \
  NS_IMETHOD GetAsWString(char16_t * *_retval) override; \
  NS_IMETHOD GetAsISupports(nsISupports **_retval) override; \
  NS_IMETHOD GetAsJSVal(JS::MutableHandle<JS::Value> _retval) override; \
  NS_IMETHOD GetAsInterface(nsIID * * iid, void * * iface) override; \
  NS_IMETHOD GetAsArray(uint16_t *type, nsIID * iid, uint32_t *count, void * * ptr) override; \
  NS_IMETHOD GetAsStringWithSize(uint32_t *size, char * *str) override; \
  NS_IMETHOD GetAsWStringWithSize(uint32_t *size, char16_t * *str) override; 

/* Use this macro when declaring the members of this interface when the
   class doesn't implement the interface. This is useful for forwarding. */
#define NS_DECL_NON_VIRTUAL_NSIVARIANT \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIVariant_dataType)\
  uint16_t GetDataType(); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt8)\
  nsresult GetAsInt8(uint8_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt16)\
  nsresult GetAsInt16(int16_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt32)\
  nsresult GetAsInt32(int32_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInt64)\
  nsresult GetAsInt64(int64_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint8)\
  nsresult GetAsUint8(uint8_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint16)\
  nsresult GetAsUint16(uint16_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint32)\
  nsresult GetAsUint32(uint32_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsUint64)\
  nsresult GetAsUint64(uint64_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsFloat)\
  nsresult GetAsFloat(float *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsDouble)\
  nsresult GetAsDouble(double *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsBool)\
  nsresult GetAsBool(bool *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsChar)\
  nsresult GetAsChar(char *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsWChar)\
  nsresult GetAsWChar(char16_t *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsID)\
  nsresult GetAsID(nsID * retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsAString)\
  nsresult GetAsAString(nsAString& _retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsACString)\
  nsresult GetAsACString(nsACString& _retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsAUTF8String)\
  nsresult GetAsAUTF8String(nsACString& _retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsString)\
  nsresult GetAsString(char * *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsWString)\
  nsresult GetAsWString(char16_t * *_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsISupports)\
  nsresult GetAsISupports(nsISupports **_retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsJSVal)\
  nsresult GetAsJSVal(JS::MutableHandle<JS::Value> _retval); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsInterface)\
  nsresult GetAsInterface(nsIID * * iid, void * * iface); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsArray)\
  nsresult GetAsArray(uint16_t *type, nsIID * iid, uint32_t *count, void * * ptr); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsStringWithSize)\
  nsresult GetAsStringWithSize(uint32_t *size, char * *str); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIVariant_getAsWStringWithSize)\
  nsresult GetAsWStringWithSize(uint32_t *size, char16_t * *str); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIVARIANT(_to) \
  virtual uint16_t GetDataType() override { return _to GetDataType(); } \
  NS_IMETHOD GetAsInt8(uint8_t *_retval) override { return _to GetAsInt8(_retval); } \
  NS_IMETHOD GetAsInt16(int16_t *_retval) override { return _to GetAsInt16(_retval); } \
  NS_IMETHOD GetAsInt32(int32_t *_retval) override { return _to GetAsInt32(_retval); } \
  NS_IMETHOD GetAsInt64(int64_t *_retval) override { return _to GetAsInt64(_retval); } \
  NS_IMETHOD GetAsUint8(uint8_t *_retval) override { return _to GetAsUint8(_retval); } \
  NS_IMETHOD GetAsUint16(uint16_t *_retval) override { return _to GetAsUint16(_retval); } \
  NS_IMETHOD GetAsUint32(uint32_t *_retval) override { return _to GetAsUint32(_retval); } \
  NS_IMETHOD GetAsUint64(uint64_t *_retval) override { return _to GetAsUint64(_retval); } \
  NS_IMETHOD GetAsFloat(float *_retval) override { return _to GetAsFloat(_retval); } \
  NS_IMETHOD GetAsDouble(double *_retval) override { return _to GetAsDouble(_retval); } \
  NS_IMETHOD GetAsBool(bool *_retval) override { return _to GetAsBool(_retval); } \
  NS_IMETHOD GetAsChar(char *_retval) override { return _to GetAsChar(_retval); } \
  NS_IMETHOD GetAsWChar(char16_t *_retval) override { return _to GetAsWChar(_retval); } \
  NS_IMETHOD GetAsID(nsID * retval) override { return _to GetAsID(retval); } \
  NS_IMETHOD GetAsAString(nsAString& _retval) override { return _to GetAsAString(_retval); } \
  NS_IMETHOD GetAsACString(nsACString& _retval) override { return _to GetAsACString(_retval); } \
  NS_IMETHOD GetAsAUTF8String(nsACString& _retval) override { return _to GetAsAUTF8String(_retval); } \
  NS_IMETHOD GetAsString(char * *_retval) override { return _to GetAsString(_retval); } \
  NS_IMETHOD GetAsWString(char16_t * *_retval) override { return _to GetAsWString(_retval); } \
  NS_IMETHOD GetAsISupports(nsISupports **_retval) override { return _to GetAsISupports(_retval); } \
  NS_IMETHOD GetAsJSVal(JS::MutableHandle<JS::Value> _retval) override { return _to GetAsJSVal(_retval); } \
  NS_IMETHOD GetAsInterface(nsIID * * iid, void * * iface) override { return _to GetAsInterface(iid, iface); } \
  NS_IMETHOD GetAsArray(uint16_t *type, nsIID * iid, uint32_t *count, void * * ptr) override { return _to GetAsArray(type, iid, count, ptr); } \
  NS_IMETHOD GetAsStringWithSize(uint32_t *size, char * *str) override { return _to GetAsStringWithSize(size, str); } \
  NS_IMETHOD GetAsWStringWithSize(uint32_t *size, char16_t * *str) override { 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) \
  virtual uint16_t GetDataType() override; \
  NS_IMETHOD GetAsInt8(uint8_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt8(_retval); } \
  NS_IMETHOD GetAsInt16(int16_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt16(_retval); } \
  NS_IMETHOD GetAsInt32(int32_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt32(_retval); } \
  NS_IMETHOD GetAsInt64(int64_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInt64(_retval); } \
  NS_IMETHOD GetAsUint8(uint8_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint8(_retval); } \
  NS_IMETHOD GetAsUint16(uint16_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint16(_retval); } \
  NS_IMETHOD GetAsUint32(uint32_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint32(_retval); } \
  NS_IMETHOD GetAsUint64(uint64_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsUint64(_retval); } \
  NS_IMETHOD GetAsFloat(float *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsFloat(_retval); } \
  NS_IMETHOD GetAsDouble(double *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsDouble(_retval); } \
  NS_IMETHOD GetAsBool(bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsBool(_retval); } \
  NS_IMETHOD GetAsChar(char *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsChar(_retval); } \
  NS_IMETHOD GetAsWChar(char16_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsWChar(_retval); } \
  NS_IMETHOD GetAsID(nsID * retval) override; \
  NS_IMETHOD GetAsAString(nsAString& _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsAString(_retval); } \
  NS_IMETHOD GetAsACString(nsACString& _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsACString(_retval); } \
  NS_IMETHOD GetAsAUTF8String(nsACString& _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsAUTF8String(_retval); } \
  NS_IMETHOD GetAsString(char * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsString(_retval); } \
  NS_IMETHOD GetAsWString(char16_t * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsWString(_retval); } \
  NS_IMETHOD GetAsISupports(nsISupports **_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsISupports(_retval); } \
  NS_IMETHOD GetAsJSVal(JS::MutableHandle<JS::Value> _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsJSVal(_retval); } \
  NS_IMETHOD GetAsInterface(nsIID * * iid, void * * iface) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsInterface(iid, iface); } \
  NS_IMETHOD GetAsArray(uint16_t *type, nsIID * iid, uint32_t *count, void * * ptr) override; \
  NS_IMETHOD GetAsStringWithSize(uint32_t *size, char * *str) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAsStringWithSize(size, str); } \
  NS_IMETHOD GetAsWStringWithSize(uint32_t *size, char16_t * *str) override { 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 MOZ_BINDING(binding_to, idl, class, XPIDL_nsIWritableVariant) nsIWritableVariant : public nsIVariant {
 public:

  NS_INLINE_DECL_STATIC_IID(NS_IWRITABLEVARIANT_IID)

  /* Used by ToJSValue to check which scriptable interface is implemented. */
  using ScriptableInterfaceType = nsIWritableVariant;

  /* attribute boolean writable; */
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIWritableVariant_writable)
  NS_IMETHOD GetWritable(bool *aWritable) = 0;
  MOZ_BINDING(binding_to, idl, setter, XPIDL_nsIWritableVariant_writable)
  NS_IMETHOD SetWritable(bool aWritable) = 0;

  /* void setAsInt8 (in uint8_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt8)
  NS_IMETHOD SetAsInt8(uint8_t aValue) = 0;

  /* void setAsInt16 (in int16_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt16)
  NS_IMETHOD SetAsInt16(int16_t aValue) = 0;

  /* void setAsInt32 (in int32_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt32)
  NS_IMETHOD SetAsInt32(int32_t aValue) = 0;

  /* void setAsInt64 (in int64_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt64)
  NS_IMETHOD SetAsInt64(int64_t aValue) = 0;

  /* void setAsUint8 (in uint8_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint8)
  NS_IMETHOD SetAsUint8(uint8_t aValue) = 0;

  /* void setAsUint16 (in uint16_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint16)
  NS_IMETHOD SetAsUint16(uint16_t aValue) = 0;

  /* void setAsUint32 (in uint32_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint32)
  NS_IMETHOD SetAsUint32(uint32_t aValue) = 0;

  /* void setAsUint64 (in uint64_t aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint64)
  NS_IMETHOD SetAsUint64(uint64_t aValue) = 0;

  /* void setAsFloat (in float aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsFloat)
  NS_IMETHOD SetAsFloat(float aValue) = 0;

  /* void setAsDouble (in double aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsDouble)
  NS_IMETHOD SetAsDouble(double aValue) = 0;

  /* void setAsBool (in boolean aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsBool)
  NS_IMETHOD SetAsBool(bool aValue) = 0;

  /* void setAsChar (in char aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsChar)
  NS_IMETHOD SetAsChar(char aValue) = 0;

  /* void setAsWChar (in wchar aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsWChar)
  NS_IMETHOD SetAsWChar(char16_t aValue) = 0;

  /* void setAsID (in nsIDRef aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsID)
  NS_IMETHOD SetAsID(const nsID & aValue) = 0;

  /* void setAsAString (in AString aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsAString)
  NS_IMETHOD SetAsAString(const nsAString& aValue) = 0;

  /* void setAsACString (in ACString aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsACString)
  NS_IMETHOD SetAsACString(const nsACString& aValue) = 0;

  /* void setAsAUTF8String (in AUTF8String aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsAUTF8String)
  NS_IMETHOD SetAsAUTF8String(const nsACString& aValue) = 0;

  /* void setAsString (in string aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsString)
  NS_IMETHOD SetAsString(const char * aValue) = 0;

  /* void setAsWString (in wstring aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsWString)
  NS_IMETHOD SetAsWString(const char16_t * aValue) = 0;

  /* void setAsISupports (in nsISupports aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsISupports)
  NS_IMETHOD SetAsISupports(nsISupports *aValue) = 0;

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

  /* [noscript] void setAsArray (in uint16_t type, in nsIIDPtr iid, in uint32_t count, in voidPtr ptr); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsArray)
  NS_IMETHOD SetAsArray(uint16_t type, const nsIID * iid, uint32_t count, void * ptr) = 0;

  /* void setAsStringWithSize (in uint32_t size, [size_is (size)] in string str); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsStringWithSize)
  NS_IMETHOD SetAsStringWithSize(uint32_t size, const char * str) = 0;

  /* void setAsWStringWithSize (in uint32_t size, [size_is (size)] in wstring str); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsWStringWithSize)
  NS_IMETHOD SetAsWStringWithSize(uint32_t size, const char16_t * str) = 0;

  /* void setAsVoid (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsVoid)
  NS_IMETHOD SetAsVoid(void) = 0;

  /* void setAsEmpty (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsEmpty)
  NS_IMETHOD SetAsEmpty(void) = 0;

  /* void setAsEmptyArray (); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsEmptyArray)
  NS_IMETHOD SetAsEmptyArray(void) = 0;

  /* void setFromVariant (in nsIVariant aValue); */
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setFromVariant)
  NS_IMETHOD SetFromVariant(nsIVariant *aValue) = 0;

};


/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIWRITABLEVARIANT \
  NS_IMETHOD GetWritable(bool *aWritable) override; \
  NS_IMETHOD SetWritable(bool aWritable) override; \
  NS_IMETHOD SetAsInt8(uint8_t aValue) override; \
  NS_IMETHOD SetAsInt16(int16_t aValue) override; \
  NS_IMETHOD SetAsInt32(int32_t aValue) override; \
  NS_IMETHOD SetAsInt64(int64_t aValue) override; \
  NS_IMETHOD SetAsUint8(uint8_t aValue) override; \
  NS_IMETHOD SetAsUint16(uint16_t aValue) override; \
  NS_IMETHOD SetAsUint32(uint32_t aValue) override; \
  NS_IMETHOD SetAsUint64(uint64_t aValue) override; \
  NS_IMETHOD SetAsFloat(float aValue) override; \
  NS_IMETHOD SetAsDouble(double aValue) override; \
  NS_IMETHOD SetAsBool(bool aValue) override; \
  NS_IMETHOD SetAsChar(char aValue) override; \
  NS_IMETHOD SetAsWChar(char16_t aValue) override; \
  NS_IMETHOD SetAsID(const nsID & aValue) override; \
  NS_IMETHOD SetAsAString(const nsAString& aValue) override; \
  NS_IMETHOD SetAsACString(const nsACString& aValue) override; \
  NS_IMETHOD SetAsAUTF8String(const nsACString& aValue) override; \
  NS_IMETHOD SetAsString(const char * aValue) override; \
  NS_IMETHOD SetAsWString(const char16_t * aValue) override; \
  NS_IMETHOD SetAsISupports(nsISupports *aValue) override; \
  NS_IMETHOD SetAsInterface(const nsIID & iid, void * iface) override; \
  NS_IMETHOD SetAsArray(uint16_t type, const nsIID * iid, uint32_t count, void * ptr) override; \
  NS_IMETHOD SetAsStringWithSize(uint32_t size, const char * str) override; \
  NS_IMETHOD SetAsWStringWithSize(uint32_t size, const char16_t * str) override; \
  NS_IMETHOD SetAsVoid(void) override; \
  NS_IMETHOD SetAsEmpty(void) override; \
  NS_IMETHOD SetAsEmptyArray(void) override; \
  NS_IMETHOD SetFromVariant(nsIVariant *aValue) override; 

/* Use this macro when declaring the members of this interface when the
   class doesn't implement the interface. This is useful for forwarding. */
#define NS_DECL_NON_VIRTUAL_NSIWRITABLEVARIANT \
  MOZ_BINDING(binding_to, idl, getter, XPIDL_nsIWritableVariant_writable)\
  nsresult GetWritable(bool *aWritable); \
  MOZ_BINDING(binding_to, idl, setter, XPIDL_nsIWritableVariant_writable)\
  nsresult SetWritable(bool aWritable); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt8)\
  nsresult SetAsInt8(uint8_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt16)\
  nsresult SetAsInt16(int16_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt32)\
  nsresult SetAsInt32(int32_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInt64)\
  nsresult SetAsInt64(int64_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint8)\
  nsresult SetAsUint8(uint8_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint16)\
  nsresult SetAsUint16(uint16_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint32)\
  nsresult SetAsUint32(uint32_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsUint64)\
  nsresult SetAsUint64(uint64_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsFloat)\
  nsresult SetAsFloat(float aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsDouble)\
  nsresult SetAsDouble(double aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsBool)\
  nsresult SetAsBool(bool aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsChar)\
  nsresult SetAsChar(char aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsWChar)\
  nsresult SetAsWChar(char16_t aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsID)\
  nsresult SetAsID(const nsID & aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsAString)\
  nsresult SetAsAString(const nsAString& aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsACString)\
  nsresult SetAsACString(const nsACString& aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsAUTF8String)\
  nsresult SetAsAUTF8String(const nsACString& aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsString)\
  nsresult SetAsString(const char * aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsWString)\
  nsresult SetAsWString(const char16_t * aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsISupports)\
  nsresult SetAsISupports(nsISupports *aValue); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsInterface)\
  nsresult SetAsInterface(const nsIID & iid, void * iface); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsArray)\
  nsresult SetAsArray(uint16_t type, const nsIID * iid, uint32_t count, void * ptr); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsStringWithSize)\
  nsresult SetAsStringWithSize(uint32_t size, const char * str); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsWStringWithSize)\
  nsresult SetAsWStringWithSize(uint32_t size, const char16_t * str); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsVoid)\
  nsresult SetAsVoid(void); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsEmpty)\
  nsresult SetAsEmpty(void); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setAsEmptyArray)\
  nsresult SetAsEmptyArray(void); \
  MOZ_BINDING(binding_to, idl, method, XPIDL_nsIWritableVariant_setFromVariant)\
  nsresult SetFromVariant(nsIVariant *aValue); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIWRITABLEVARIANT(_to) \
  NS_IMETHOD GetWritable(bool *aWritable) override { return _to GetWritable(aWritable); } \
  NS_IMETHOD SetWritable(bool aWritable) override { return _to SetWritable(aWritable); } \
  NS_IMETHOD SetAsInt8(uint8_t aValue) override { return _to SetAsInt8(aValue); } \
  NS_IMETHOD SetAsInt16(int16_t aValue) override { return _to SetAsInt16(aValue); } \
  NS_IMETHOD SetAsInt32(int32_t aValue) override { return _to SetAsInt32(aValue); } \
  NS_IMETHOD SetAsInt64(int64_t aValue) override { return _to SetAsInt64(aValue); } \
  NS_IMETHOD SetAsUint8(uint8_t aValue) override { return _to SetAsUint8(aValue); } \
  NS_IMETHOD SetAsUint16(uint16_t aValue) override { return _to SetAsUint16(aValue); } \
  NS_IMETHOD SetAsUint32(uint32_t aValue) override { return _to SetAsUint32(aValue); } \
  NS_IMETHOD SetAsUint64(uint64_t aValue) override { return _to SetAsUint64(aValue); } \
  NS_IMETHOD SetAsFloat(float aValue) override { return _to SetAsFloat(aValue); } \
  NS_IMETHOD SetAsDouble(double aValue) override { return _to SetAsDouble(aValue); } \
  NS_IMETHOD SetAsBool(bool aValue) override { return _to SetAsBool(aValue); } \
  NS_IMETHOD SetAsChar(char aValue) override { return _to SetAsChar(aValue); } \
  NS_IMETHOD SetAsWChar(char16_t aValue) override { return _to SetAsWChar(aValue); } \
  NS_IMETHOD SetAsID(const nsID & aValue) override { return _to SetAsID(aValue); } \
  NS_IMETHOD SetAsAString(const nsAString& aValue) override { return _to SetAsAString(aValue); } \
  NS_IMETHOD SetAsACString(const nsACString& aValue) override { return _to SetAsACString(aValue); } \
  NS_IMETHOD SetAsAUTF8String(const nsACString& aValue) override { return _to SetAsAUTF8String(aValue); } \
  NS_IMETHOD SetAsString(const char * aValue) override { return _to SetAsString(aValue); } \
  NS_IMETHOD SetAsWString(const char16_t * aValue) override { return _to SetAsWString(aValue); } \
  NS_IMETHOD SetAsISupports(nsISupports *aValue) override { return _to SetAsISupports(aValue); } \
  NS_IMETHOD SetAsInterface(const nsIID & iid, void * iface) override { return _to SetAsInterface(iid, iface); } \
  NS_IMETHOD SetAsArray(uint16_t type, const nsIID * iid, uint32_t count, void * ptr) override { return _to SetAsArray(type, iid, count, ptr); } \
  NS_IMETHOD SetAsStringWithSize(uint32_t size, const char * str) override { return _to SetAsStringWithSize(size, str); } \
  NS_IMETHOD SetAsWStringWithSize(uint32_t size, const char16_t * str) override { return _to SetAsWStringWithSize(size, str); } \
  NS_IMETHOD SetAsVoid(void) override { return _to SetAsVoid(); } \
  NS_IMETHOD SetAsEmpty(void) override { return _to SetAsEmpty(); } \
  NS_IMETHOD SetAsEmptyArray(void) override { return _to SetAsEmptyArray(); } \
  NS_IMETHOD SetFromVariant(nsIVariant *aValue) override { 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(bool *aWritable) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetWritable(aWritable); } \
  NS_IMETHOD SetWritable(bool aWritable) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetWritable(aWritable); } \
  NS_IMETHOD SetAsInt8(uint8_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt8(aValue); } \
  NS_IMETHOD SetAsInt16(int16_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt16(aValue); } \
  NS_IMETHOD SetAsInt32(int32_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt32(aValue); } \
  NS_IMETHOD SetAsInt64(int64_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInt64(aValue); } \
  NS_IMETHOD SetAsUint8(uint8_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint8(aValue); } \
  NS_IMETHOD SetAsUint16(uint16_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint16(aValue); } \
  NS_IMETHOD SetAsUint32(uint32_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint32(aValue); } \
  NS_IMETHOD SetAsUint64(uint64_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsUint64(aValue); } \
  NS_IMETHOD SetAsFloat(float aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsFloat(aValue); } \
  NS_IMETHOD SetAsDouble(double aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsDouble(aValue); } \
  NS_IMETHOD SetAsBool(bool aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsBool(aValue); } \
  NS_IMETHOD SetAsChar(char aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsChar(aValue); } \
  NS_IMETHOD SetAsWChar(char16_t aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsWChar(aValue); } \
  NS_IMETHOD SetAsID(const nsID & aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsID(aValue); } \
  NS_IMETHOD SetAsAString(const nsAString& aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsAString(aValue); } \
  NS_IMETHOD SetAsACString(const nsACString& aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsACString(aValue); } \
  NS_IMETHOD SetAsAUTF8String(const nsACString& aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsAUTF8String(aValue); } \
  NS_IMETHOD SetAsString(const char * aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsString(aValue); } \
  NS_IMETHOD SetAsWString(const char16_t * aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsWString(aValue); } \
  NS_IMETHOD SetAsISupports(nsISupports *aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsISupports(aValue); } \
  NS_IMETHOD SetAsInterface(const nsIID & iid, void * iface) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsInterface(iid, iface); } \
  NS_IMETHOD SetAsArray(uint16_t type, const nsIID * iid, uint32_t count, void * ptr) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsArray(type, iid, count, ptr); } \
  NS_IMETHOD SetAsStringWithSize(uint32_t size, const char * str) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsStringWithSize(size, str); } \
  NS_IMETHOD SetAsWStringWithSize(uint32_t size, const char16_t * str) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsWStringWithSize(size, str); } \
  NS_IMETHOD SetAsVoid(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsVoid(); } \
  NS_IMETHOD SetAsEmpty(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsEmpty(); } \
  NS_IMETHOD SetAsEmptyArray(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAsEmptyArray(); } \
  NS_IMETHOD SetFromVariant(nsIVariant *aValue) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetFromVariant(aValue); } 

// %{C++:159-160
// The contractID for the generic implementation built in to xpcom.
#define NS_VARIANT_CONTRACTID "@mozilla.org/variant;1"
// %}

#endif /* __gen_nsIVariant_h__ */
