michael@0: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "nsSupportsPrimitives.h" michael@0: #include "nsMemory.h" michael@0: #include "prprf.h" michael@0: michael@0: using mozilla::fallible_t; michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsIDImpl, nsISupportsID, nsISupportsPrimitive) michael@0: michael@0: nsSupportsIDImpl::nsSupportsIDImpl() michael@0: : mData(nullptr) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsIDImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_ID; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsIDImpl::GetData(nsID **aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: if(mData) michael@0: { michael@0: *aData = (nsID*) nsMemory::Clone(mData, sizeof(nsID)); michael@0: return *aData ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: *aData = nullptr; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsIDImpl::SetData(const nsID *aData) michael@0: { michael@0: if(mData) michael@0: nsMemory::Free(mData); michael@0: if(aData) michael@0: mData = (nsID*) nsMemory::Clone(aData, sizeof(nsID)); michael@0: else michael@0: mData = nullptr; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsIDImpl::ToString(char **_retval) michael@0: { michael@0: char* result; michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: if(mData) michael@0: { michael@0: result = mData->ToString(); michael@0: } michael@0: else michael@0: { michael@0: static const char nullStr[] = "null"; michael@0: result = (char*) nsMemory::Clone(nullStr, sizeof(nullStr)); michael@0: } michael@0: michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************** michael@0: * nsSupportsCStringImpl michael@0: *****************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsCStringImpl, nsISupportsCString, michael@0: nsISupportsPrimitive) michael@0: michael@0: NS_IMETHODIMP nsSupportsCStringImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: michael@0: *aType = TYPE_CSTRING; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsCStringImpl::GetData(nsACString& aData) michael@0: { michael@0: aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsCStringImpl::ToString(char **_retval) michael@0: { michael@0: *_retval = ToNewCString(mData); michael@0: michael@0: if (!*_retval) michael@0: return NS_ERROR_OUT_OF_MEMORY; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsCStringImpl::SetData(const nsACString& aData) michael@0: { michael@0: bool ok = mData.Assign(aData, fallible_t()); michael@0: if (!ok) michael@0: return NS_ERROR_OUT_OF_MEMORY; michael@0: return NS_OK; michael@0: } michael@0: michael@0: /***************************************************************************** michael@0: * nsSupportsStringImpl michael@0: *****************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsStringImpl, nsISupportsString, michael@0: nsISupportsPrimitive) michael@0: michael@0: NS_IMETHODIMP nsSupportsStringImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: michael@0: *aType = TYPE_STRING; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsStringImpl::GetData(nsAString& aData) michael@0: { michael@0: aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsStringImpl::ToString(char16_t **_retval) michael@0: { michael@0: *_retval = ToNewUnicode(mData); michael@0: michael@0: if (!*_retval) michael@0: return NS_ERROR_OUT_OF_MEMORY; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsStringImpl::SetData(const nsAString& aData) michael@0: { michael@0: bool ok = mData.Assign(aData, fallible_t()); michael@0: if (!ok) michael@0: return NS_ERROR_OUT_OF_MEMORY; michael@0: return NS_OK; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRBoolImpl, nsISupportsPRBool, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRBoolImpl::nsSupportsPRBoolImpl() michael@0: : mData(false) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRBoolImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRBOOL; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRBoolImpl::GetData(bool *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRBoolImpl::SetData(bool aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRBoolImpl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: const char * str = mData ? "true" : "false"; michael@0: char* result = (char*) nsMemory::Clone(str, michael@0: (strlen(str)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRUint8Impl, nsISupportsPRUint8, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRUint8Impl::nsSupportsPRUint8Impl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint8Impl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRUINT8; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint8Impl::GetData(uint8_t *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint8Impl::SetData(uint8_t aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint8Impl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 8; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%u", (uint16_t) mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRUint16Impl, nsISupportsPRUint16, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRUint16Impl::nsSupportsPRUint16Impl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint16Impl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRUINT16; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint16Impl::GetData(uint16_t *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint16Impl::SetData(uint16_t aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint16Impl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 8; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%u", (int) mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRUint32Impl, nsISupportsPRUint32, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRUint32Impl::nsSupportsPRUint32Impl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint32Impl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRUINT32; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint32Impl::GetData(uint32_t *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint32Impl::SetData(uint32_t aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint32Impl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 16; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%lu", mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRUint64Impl, nsISupportsPRUint64, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRUint64Impl::nsSupportsPRUint64Impl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint64Impl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRUINT64; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint64Impl::GetData(uint64_t *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint64Impl::SetData(uint64_t aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRUint64Impl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 32; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%llu", mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRTimeImpl, nsISupportsPRTime, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRTimeImpl::nsSupportsPRTimeImpl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRTimeImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRTIME; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRTimeImpl::GetData(PRTime *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRTimeImpl::SetData(PRTime aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRTimeImpl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 32; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%llu", mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsCharImpl, nsISupportsChar, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsCharImpl::nsSupportsCharImpl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsCharImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_CHAR; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsCharImpl::GetData(char *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsCharImpl::SetData(char aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsCharImpl::ToString(char **_retval) michael@0: { michael@0: char* result; michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: michael@0: if(nullptr != (result = (char*) nsMemory::Alloc(2*sizeof(char)))) michael@0: { michael@0: result[0] = mData; michael@0: result[1] = '\0'; michael@0: } michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRInt16Impl, nsISupportsPRInt16, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRInt16Impl::nsSupportsPRInt16Impl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt16Impl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRINT16; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt16Impl::GetData(int16_t *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt16Impl::SetData(int16_t aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt16Impl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 8; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%d", mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRInt32Impl, nsISupportsPRInt32, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRInt32Impl::nsSupportsPRInt32Impl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt32Impl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRINT32; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt32Impl::GetData(int32_t *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt32Impl::SetData(int32_t aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt32Impl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 16; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%ld", mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsPRInt64Impl, nsISupportsPRInt64, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsPRInt64Impl::nsSupportsPRInt64Impl() michael@0: : mData(0) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt64Impl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_PRINT64; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt64Impl::GetData(int64_t *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt64Impl::SetData(int64_t aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsPRInt64Impl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 32; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%lld", mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsFloatImpl, nsISupportsFloat, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsFloatImpl::nsSupportsFloatImpl() michael@0: : mData(float(0.0)) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsFloatImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_FLOAT; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsFloatImpl::GetData(float *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsFloatImpl::SetData(float aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsFloatImpl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 32; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%f", (double) mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsDoubleImpl, nsISupportsDouble, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsDoubleImpl::nsSupportsDoubleImpl() michael@0: : mData(double(0.0)) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsDoubleImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_DOUBLE; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsDoubleImpl::GetData(double *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsDoubleImpl::SetData(double aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsDoubleImpl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: static const int size = 32; michael@0: char buf[size]; michael@0: michael@0: PR_snprintf(buf, size, "%f", mData); michael@0: michael@0: char* result = (char*) nsMemory::Clone(buf, michael@0: (strlen(buf)+1)*sizeof(char)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsVoidImpl, nsISupportsVoid, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsVoidImpl::nsSupportsVoidImpl() michael@0: : mData(nullptr) michael@0: { michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsVoidImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_VOID; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsVoidImpl::GetData(void * *aData) michael@0: { michael@0: NS_ASSERTION(aData, "Bad pointer"); michael@0: *aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsVoidImpl::SetData(void * aData) michael@0: { michael@0: mData = aData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsVoidImpl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: michael@0: static const char str[] = "[raw data]"; michael@0: char* result = (char*) nsMemory::Clone(str, sizeof(str)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsInterfacePointerImpl, michael@0: nsISupportsInterfacePointer, michael@0: nsISupportsPrimitive) michael@0: michael@0: nsSupportsInterfacePointerImpl::nsSupportsInterfacePointerImpl() michael@0: : mIID(nullptr) michael@0: { michael@0: } michael@0: michael@0: nsSupportsInterfacePointerImpl::~nsSupportsInterfacePointerImpl() michael@0: { michael@0: if (mIID) { michael@0: nsMemory::Free(mIID); michael@0: } michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsInterfacePointerImpl::GetType(uint16_t *aType) michael@0: { michael@0: NS_ASSERTION(aType, "Bad pointer"); michael@0: *aType = TYPE_INTERFACE_POINTER; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsInterfacePointerImpl::GetData(nsISupports **aData) michael@0: { michael@0: NS_ASSERTION(aData,"Bad pointer"); michael@0: michael@0: *aData = mData; michael@0: NS_IF_ADDREF(*aData); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsInterfacePointerImpl::SetData(nsISupports * aData) michael@0: { michael@0: mData = aData; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsInterfacePointerImpl::GetDataIID(nsID **aIID) michael@0: { michael@0: NS_ASSERTION(aIID,"Bad pointer"); michael@0: michael@0: if(mIID) michael@0: { michael@0: *aIID = (nsID*) nsMemory::Clone(mIID, sizeof(nsID)); michael@0: return *aIID ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: *aIID = nullptr; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsInterfacePointerImpl::SetDataIID(const nsID *aIID) michael@0: { michael@0: if(mIID) michael@0: nsMemory::Free(mIID); michael@0: if(aIID) michael@0: mIID = (nsID*) nsMemory::Clone(aIID, sizeof(nsID)); michael@0: else michael@0: mIID = nullptr; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsSupportsInterfacePointerImpl::ToString(char **_retval) michael@0: { michael@0: NS_ASSERTION(_retval, "Bad pointer"); michael@0: michael@0: static const char str[] = "[interface pointer]"; michael@0: michael@0: // jband sez: think about asking nsIInterfaceInfoManager whether michael@0: // the interface has a known human-readable name michael@0: char* result = (char*) nsMemory::Clone(str, sizeof(str)); michael@0: *_retval = result; michael@0: return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: NS_IMPL_ISUPPORTS(nsSupportsDependentCString,nsISupportsCString,nsISupportsPrimitive) michael@0: michael@0: nsSupportsDependentCString::nsSupportsDependentCString(const char* aStr) michael@0: : mData(aStr) michael@0: { } michael@0: michael@0: NS_IMETHODIMP michael@0: nsSupportsDependentCString::GetType(uint16_t *aType) michael@0: { michael@0: if (NS_WARN_IF(!aType)) michael@0: return NS_ERROR_INVALID_ARG; michael@0: michael@0: *aType = TYPE_CSTRING; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsSupportsDependentCString::GetData(nsACString& aData) michael@0: { michael@0: aData = mData; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsSupportsDependentCString::ToString(char **_retval) michael@0: { michael@0: if (NS_WARN_IF(!_retval)) michael@0: return NS_ERROR_INVALID_ARG; michael@0: michael@0: *_retval = ToNewCString(mData); michael@0: if (!*_retval) michael@0: return NS_ERROR_OUT_OF_MEMORY; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsSupportsDependentCString::SetData(const nsACString& aData) michael@0: { michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: }