1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "nsSupportsPrimitives.h"
10 using mozilla::fallible_t
;
12 /***************************************************************************/
14 NS_IMPL_ISUPPORTS(nsSupportsIDImpl
, nsISupportsID
, nsISupportsPrimitive
)
16 nsSupportsIDImpl::nsSupportsIDImpl()
22 nsSupportsIDImpl::GetType(uint16_t* aType
)
24 NS_ASSERTION(aType
, "Bad pointer");
31 nsSupportsIDImpl::GetData(nsID
** aData
)
33 NS_ASSERTION(aData
, "Bad pointer");
35 *aData
= (nsID
*)nsMemory::Clone(mData
, sizeof(nsID
));
36 return *aData
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
43 nsSupportsIDImpl::SetData(const nsID
* aData
)
46 nsMemory::Free(mData
);
49 mData
= (nsID
*)nsMemory::Clone(aData
, sizeof(nsID
));
57 nsSupportsIDImpl::ToString(char** aResult
)
60 NS_ASSERTION(aResult
, "Bad pointer");
62 result
= mData
->ToString();
64 static const char nullStr
[] = "null";
65 result
= (char*)nsMemory::Clone(nullStr
, sizeof(nullStr
));
69 return result
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
72 /*****************************************************************************
73 * nsSupportsCStringImpl
74 *****************************************************************************/
76 NS_IMPL_ISUPPORTS(nsSupportsCStringImpl
, nsISupportsCString
,
80 nsSupportsCStringImpl::GetType(uint16_t* aType
)
82 NS_ASSERTION(aType
, "Bad pointer");
84 *aType
= TYPE_CSTRING
;
89 nsSupportsCStringImpl::GetData(nsACString
& aData
)
96 nsSupportsCStringImpl::ToString(char** aResult
)
98 *aResult
= ToNewCString(mData
);
101 return NS_ERROR_OUT_OF_MEMORY
;
108 nsSupportsCStringImpl::SetData(const nsACString
& aData
)
110 bool ok
= mData
.Assign(aData
, fallible_t());
112 return NS_ERROR_OUT_OF_MEMORY
;
117 /*****************************************************************************
118 * nsSupportsStringImpl
119 *****************************************************************************/
121 NS_IMPL_ISUPPORTS(nsSupportsStringImpl
, nsISupportsString
,
122 nsISupportsPrimitive
)
125 nsSupportsStringImpl::GetType(uint16_t* aType
)
127 NS_ASSERTION(aType
, "Bad pointer");
129 *aType
= TYPE_STRING
;
134 nsSupportsStringImpl::GetData(nsAString
& aData
)
141 nsSupportsStringImpl::ToString(char16_t
** aResult
)
143 *aResult
= ToNewUnicode(mData
);
146 return NS_ERROR_OUT_OF_MEMORY
;
153 nsSupportsStringImpl::SetData(const nsAString
& aData
)
155 bool ok
= mData
.Assign(aData
, fallible_t());
157 return NS_ERROR_OUT_OF_MEMORY
;
162 /***************************************************************************/
164 NS_IMPL_ISUPPORTS(nsSupportsPRBoolImpl
, nsISupportsPRBool
,
165 nsISupportsPrimitive
)
167 nsSupportsPRBoolImpl::nsSupportsPRBoolImpl()
173 nsSupportsPRBoolImpl::GetType(uint16_t* aType
)
175 NS_ASSERTION(aType
, "Bad pointer");
176 *aType
= TYPE_PRBOOL
;
182 nsSupportsPRBoolImpl::GetData(bool* aData
)
184 NS_ASSERTION(aData
, "Bad pointer");
190 nsSupportsPRBoolImpl::SetData(bool aData
)
197 nsSupportsPRBoolImpl::ToString(char** aResult
)
199 NS_ASSERTION(aResult
, "Bad pointer");
200 const char* str
= mData
? "true" : "false";
201 *aResult
= (char*)nsMemory::Clone(str
, (strlen(str
) + 1) * sizeof(char));
202 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
205 /***************************************************************************/
207 NS_IMPL_ISUPPORTS(nsSupportsPRUint8Impl
, nsISupportsPRUint8
,
208 nsISupportsPrimitive
)
210 nsSupportsPRUint8Impl::nsSupportsPRUint8Impl()
216 nsSupportsPRUint8Impl::GetType(uint16_t* aType
)
218 NS_ASSERTION(aType
, "Bad pointer");
219 *aType
= TYPE_PRUINT8
;
225 nsSupportsPRUint8Impl::GetData(uint8_t* aData
)
227 NS_ASSERTION(aData
, "Bad pointer");
233 nsSupportsPRUint8Impl::SetData(uint8_t aData
)
240 nsSupportsPRUint8Impl::ToString(char** aResult
)
242 NS_ASSERTION(aResult
, "Bad pointer");
243 static const int size
= 8;
245 PR_snprintf(buf
, size
, "%u", (uint16_t)mData
);
247 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
248 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
251 /***************************************************************************/
253 NS_IMPL_ISUPPORTS(nsSupportsPRUint16Impl
, nsISupportsPRUint16
,
254 nsISupportsPrimitive
)
256 nsSupportsPRUint16Impl::nsSupportsPRUint16Impl()
262 nsSupportsPRUint16Impl::GetType(uint16_t* aType
)
264 NS_ASSERTION(aType
, "Bad pointer");
265 *aType
= TYPE_PRUINT16
;
271 nsSupportsPRUint16Impl::GetData(uint16_t* aData
)
273 NS_ASSERTION(aData
, "Bad pointer");
279 nsSupportsPRUint16Impl::SetData(uint16_t aData
)
286 nsSupportsPRUint16Impl::ToString(char** aResult
)
288 NS_ASSERTION(aResult
, "Bad pointer");
289 static const int size
= 8;
291 PR_snprintf(buf
, size
, "%u", (int)mData
);
293 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
294 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
297 /***************************************************************************/
299 NS_IMPL_ISUPPORTS(nsSupportsPRUint32Impl
, nsISupportsPRUint32
,
300 nsISupportsPrimitive
)
302 nsSupportsPRUint32Impl::nsSupportsPRUint32Impl()
308 nsSupportsPRUint32Impl::GetType(uint16_t* aType
)
310 NS_ASSERTION(aType
, "Bad pointer");
311 *aType
= TYPE_PRUINT32
;
317 nsSupportsPRUint32Impl::GetData(uint32_t* aData
)
319 NS_ASSERTION(aData
, "Bad pointer");
325 nsSupportsPRUint32Impl::SetData(uint32_t aData
)
332 nsSupportsPRUint32Impl::ToString(char** aResult
)
334 NS_ASSERTION(aResult
, "Bad pointer");
335 static const int size
= 16;
337 PR_snprintf(buf
, size
, "%lu", mData
);
339 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
340 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
343 /***************************************************************************/
345 NS_IMPL_ISUPPORTS(nsSupportsPRUint64Impl
, nsISupportsPRUint64
,
346 nsISupportsPrimitive
)
348 nsSupportsPRUint64Impl::nsSupportsPRUint64Impl()
354 nsSupportsPRUint64Impl::GetType(uint16_t* aType
)
356 NS_ASSERTION(aType
, "Bad pointer");
357 *aType
= TYPE_PRUINT64
;
363 nsSupportsPRUint64Impl::GetData(uint64_t* aData
)
365 NS_ASSERTION(aData
, "Bad pointer");
371 nsSupportsPRUint64Impl::SetData(uint64_t aData
)
378 nsSupportsPRUint64Impl::ToString(char** aResult
)
380 NS_ASSERTION(aResult
, "Bad pointer");
381 static const int size
= 32;
383 PR_snprintf(buf
, size
, "%llu", mData
);
385 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
386 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
389 /***************************************************************************/
391 NS_IMPL_ISUPPORTS(nsSupportsPRTimeImpl
, nsISupportsPRTime
,
392 nsISupportsPrimitive
)
394 nsSupportsPRTimeImpl::nsSupportsPRTimeImpl()
400 nsSupportsPRTimeImpl::GetType(uint16_t* aType
)
402 NS_ASSERTION(aType
, "Bad pointer");
403 *aType
= TYPE_PRTIME
;
409 nsSupportsPRTimeImpl::GetData(PRTime
* aData
)
411 NS_ASSERTION(aData
, "Bad pointer");
417 nsSupportsPRTimeImpl::SetData(PRTime aData
)
424 nsSupportsPRTimeImpl::ToString(char** aResult
)
426 NS_ASSERTION(aResult
, "Bad pointer");
427 static const int size
= 32;
429 PR_snprintf(buf
, size
, "%llu", mData
);
431 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
432 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
435 /***************************************************************************/
437 NS_IMPL_ISUPPORTS(nsSupportsCharImpl
, nsISupportsChar
,
438 nsISupportsPrimitive
)
440 nsSupportsCharImpl::nsSupportsCharImpl()
446 nsSupportsCharImpl::GetType(uint16_t* aType
)
448 NS_ASSERTION(aType
, "Bad pointer");
455 nsSupportsCharImpl::GetData(char* aData
)
457 NS_ASSERTION(aData
, "Bad pointer");
463 nsSupportsCharImpl::SetData(char aData
)
470 nsSupportsCharImpl::ToString(char** aResult
)
472 NS_ASSERTION(aResult
, "Bad pointer");
474 char* result
= (char*)nsMemory::Alloc(2 * sizeof(char));
480 return result
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
483 /***************************************************************************/
485 NS_IMPL_ISUPPORTS(nsSupportsPRInt16Impl
, nsISupportsPRInt16
,
486 nsISupportsPrimitive
)
488 nsSupportsPRInt16Impl::nsSupportsPRInt16Impl()
494 nsSupportsPRInt16Impl::GetType(uint16_t* aType
)
496 NS_ASSERTION(aType
, "Bad pointer");
497 *aType
= TYPE_PRINT16
;
503 nsSupportsPRInt16Impl::GetData(int16_t* aData
)
505 NS_ASSERTION(aData
, "Bad pointer");
511 nsSupportsPRInt16Impl::SetData(int16_t aData
)
518 nsSupportsPRInt16Impl::ToString(char** aResult
)
520 NS_ASSERTION(aResult
, "Bad pointer");
521 static const int size
= 8;
523 PR_snprintf(buf
, size
, "%d", mData
);
525 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
526 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
529 /***************************************************************************/
531 NS_IMPL_ISUPPORTS(nsSupportsPRInt32Impl
, nsISupportsPRInt32
,
532 nsISupportsPrimitive
)
534 nsSupportsPRInt32Impl::nsSupportsPRInt32Impl()
540 nsSupportsPRInt32Impl::GetType(uint16_t* aType
)
542 NS_ASSERTION(aType
, "Bad pointer");
543 *aType
= TYPE_PRINT32
;
549 nsSupportsPRInt32Impl::GetData(int32_t* aData
)
551 NS_ASSERTION(aData
, "Bad pointer");
557 nsSupportsPRInt32Impl::SetData(int32_t aData
)
564 nsSupportsPRInt32Impl::ToString(char** aResult
)
566 NS_ASSERTION(aResult
, "Bad pointer");
567 static const int size
= 16;
569 PR_snprintf(buf
, size
, "%ld", mData
);
571 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
572 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
575 /***************************************************************************/
577 NS_IMPL_ISUPPORTS(nsSupportsPRInt64Impl
, nsISupportsPRInt64
,
578 nsISupportsPrimitive
)
580 nsSupportsPRInt64Impl::nsSupportsPRInt64Impl()
586 nsSupportsPRInt64Impl::GetType(uint16_t* aType
)
588 NS_ASSERTION(aType
, "Bad pointer");
589 *aType
= TYPE_PRINT64
;
595 nsSupportsPRInt64Impl::GetData(int64_t* aData
)
597 NS_ASSERTION(aData
, "Bad pointer");
603 nsSupportsPRInt64Impl::SetData(int64_t aData
)
610 nsSupportsPRInt64Impl::ToString(char** aResult
)
612 NS_ASSERTION(aResult
, "Bad pointer");
613 static const int size
= 32;
615 PR_snprintf(buf
, size
, "%lld", mData
);
617 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
618 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
621 /***************************************************************************/
623 NS_IMPL_ISUPPORTS(nsSupportsFloatImpl
, nsISupportsFloat
,
624 nsISupportsPrimitive
)
626 nsSupportsFloatImpl::nsSupportsFloatImpl()
632 nsSupportsFloatImpl::GetType(uint16_t* aType
)
634 NS_ASSERTION(aType
, "Bad pointer");
641 nsSupportsFloatImpl::GetData(float* aData
)
643 NS_ASSERTION(aData
, "Bad pointer");
649 nsSupportsFloatImpl::SetData(float aData
)
656 nsSupportsFloatImpl::ToString(char** aResult
)
658 NS_ASSERTION(aResult
, "Bad pointer");
659 static const int size
= 32;
661 PR_snprintf(buf
, size
, "%f", (double)mData
);
663 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
664 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
667 /***************************************************************************/
669 NS_IMPL_ISUPPORTS(nsSupportsDoubleImpl
, nsISupportsDouble
,
670 nsISupportsPrimitive
)
672 nsSupportsDoubleImpl::nsSupportsDoubleImpl()
678 nsSupportsDoubleImpl::GetType(uint16_t* aType
)
680 NS_ASSERTION(aType
, "Bad pointer");
681 *aType
= TYPE_DOUBLE
;
687 nsSupportsDoubleImpl::GetData(double* aData
)
689 NS_ASSERTION(aData
, "Bad pointer");
695 nsSupportsDoubleImpl::SetData(double aData
)
702 nsSupportsDoubleImpl::ToString(char** aResult
)
704 NS_ASSERTION(aResult
, "Bad pointer");
705 static const int size
= 32;
707 PR_snprintf(buf
, size
, "%f", mData
);
709 *aResult
= (char*)nsMemory::Clone(buf
, (strlen(buf
) + 1) * sizeof(char));
710 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
713 /***************************************************************************/
716 NS_IMPL_ISUPPORTS(nsSupportsVoidImpl
, nsISupportsVoid
,
717 nsISupportsPrimitive
)
719 nsSupportsVoidImpl::nsSupportsVoidImpl()
725 nsSupportsVoidImpl::GetType(uint16_t* aType
)
727 NS_ASSERTION(aType
, "Bad pointer");
734 nsSupportsVoidImpl::GetData(void** aData
)
736 NS_ASSERTION(aData
, "Bad pointer");
742 nsSupportsVoidImpl::SetData(void* aData
)
749 nsSupportsVoidImpl::ToString(char** aResult
)
751 NS_ASSERTION(aResult
, "Bad pointer");
753 static const char str
[] = "[raw data]";
754 char* result
= (char*)nsMemory::Clone(str
, sizeof(str
));
756 return result
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
759 /***************************************************************************/
762 NS_IMPL_ISUPPORTS(nsSupportsInterfacePointerImpl
,
763 nsISupportsInterfacePointer
,
764 nsISupportsPrimitive
)
766 nsSupportsInterfacePointerImpl::nsSupportsInterfacePointerImpl()
771 nsSupportsInterfacePointerImpl::~nsSupportsInterfacePointerImpl()
774 nsMemory::Free(mIID
);
779 nsSupportsInterfacePointerImpl::GetType(uint16_t* aType
)
781 NS_ASSERTION(aType
, "Bad pointer");
782 *aType
= TYPE_INTERFACE_POINTER
;
788 nsSupportsInterfacePointerImpl::GetData(nsISupports
** aData
)
790 NS_ASSERTION(aData
, "Bad pointer");
793 NS_IF_ADDREF(*aData
);
799 nsSupportsInterfacePointerImpl::SetData(nsISupports
* aData
)
807 nsSupportsInterfacePointerImpl::GetDataIID(nsID
** aIID
)
809 NS_ASSERTION(aIID
, "Bad pointer");
812 *aIID
= (nsID
*)nsMemory::Clone(mIID
, sizeof(nsID
));
813 return *aIID
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
820 nsSupportsInterfacePointerImpl::SetDataIID(const nsID
* aIID
)
823 nsMemory::Free(mIID
);
826 mIID
= (nsID
*)nsMemory::Clone(aIID
, sizeof(nsID
));
835 nsSupportsInterfacePointerImpl::ToString(char** aResult
)
837 NS_ASSERTION(aResult
, "Bad pointer");
839 static const char str
[] = "[interface pointer]";
841 // jband sez: think about asking nsIInterfaceInfoManager whether
842 // the interface has a known human-readable name
843 *aResult
= (char*)nsMemory::Clone(str
, sizeof(str
));
844 return *aResult
? NS_OK
: NS_ERROR_OUT_OF_MEMORY
;
847 /***************************************************************************/
849 NS_IMPL_ISUPPORTS(nsSupportsDependentCString
, nsISupportsCString
,
850 nsISupportsPrimitive
)
852 nsSupportsDependentCString::nsSupportsDependentCString(const char* aStr
)
857 nsSupportsDependentCString::GetType(uint16_t* aType
)
859 if (NS_WARN_IF(!aType
)) {
860 return NS_ERROR_INVALID_ARG
;
863 *aType
= TYPE_CSTRING
;
868 nsSupportsDependentCString::GetData(nsACString
& aData
)
875 nsSupportsDependentCString::ToString(char** aResult
)
877 if (NS_WARN_IF(!aResult
)) {
878 return NS_ERROR_INVALID_ARG
;
881 *aResult
= ToNewCString(mData
);
883 return NS_ERROR_OUT_OF_MEMORY
;
890 nsSupportsDependentCString::SetData(const nsACString
& aData
)
892 return NS_ERROR_NOT_IMPLEMENTED
;