1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
10 #include "mozilla/Attributes.h"
12 #include "nsSubstring.h"
13 #include "nsDependentSubstring.h"
14 #include "nsReadableUtils.h"
18 // enable support for the obsolete string API if not explicitly disabled
19 #ifndef MOZ_STRING_WITH_OBSOLETE_API
20 #define MOZ_STRING_WITH_OBSOLETE_API 1
23 #if MOZ_STRING_WITH_OBSOLETE_API
24 // radix values for ToInteger/AppendInt
27 #define kAutoDetect (100)
28 #define kRadixUnknown (kAutoDetect+1)
29 #define IGNORE_CASE (true)
33 // declare nsString, et. al.
34 #include "string-template-def-unichar.h"
35 #include "nsTString.h"
36 #include "string-template-undef.h"
38 // declare nsCString, et. al.
39 #include "string-template-def-char.h"
40 #include "nsTString.h"
41 #include "string-template-undef.h"
43 static_assert(sizeof(char16_t
) == 2, "size of char16_t must be 2");
44 static_assert(sizeof(nsString::char_type
) == 2,
45 "size of nsString::char_type must be 2");
46 static_assert(nsString::char_type(-1) > nsString::char_type(0),
47 "nsString::char_type must be unsigned");
48 static_assert(sizeof(nsCString::char_type
) == 1,
49 "size of nsCString::char_type must be 1");
53 * A helper class that converts a UTF-16 string to ASCII in a lossy manner
55 class NS_LossyConvertUTF16toASCII
: public nsAutoCString
58 explicit NS_LossyConvertUTF16toASCII(const char16_t
* aString
)
60 LossyAppendUTF16toASCII(aString
, *this);
63 NS_LossyConvertUTF16toASCII(const char16_t
* aString
, uint32_t aLength
)
65 LossyAppendUTF16toASCII(Substring(aString
, aLength
), *this);
68 #ifdef MOZ_USE_CHAR16_WRAPPER
69 explicit NS_LossyConvertUTF16toASCII(char16ptr_t aString
)
70 : NS_LossyConvertUTF16toASCII(static_cast<const char16_t
*>(aString
))
74 NS_LossyConvertUTF16toASCII(char16ptr_t aString
, uint32_t aLength
)
75 : NS_LossyConvertUTF16toASCII(static_cast<const char16_t
*>(aString
), aLength
)
80 explicit NS_LossyConvertUTF16toASCII(const nsAString
& aString
)
82 LossyAppendUTF16toASCII(aString
, *this);
86 // NOT TO BE IMPLEMENTED
87 NS_LossyConvertUTF16toASCII(char) MOZ_DELETE
;
91 class NS_ConvertASCIItoUTF16
: public nsAutoString
94 explicit NS_ConvertASCIItoUTF16(const char* aCString
)
96 AppendASCIItoUTF16(aCString
, *this);
99 NS_ConvertASCIItoUTF16(const char* aCString
, uint32_t aLength
)
101 AppendASCIItoUTF16(Substring(aCString
, aLength
), *this);
104 explicit NS_ConvertASCIItoUTF16(const nsACString
& aCString
)
106 AppendASCIItoUTF16(aCString
, *this);
110 // NOT TO BE IMPLEMENTED
111 NS_ConvertASCIItoUTF16(char16_t
) MOZ_DELETE
;
116 * A helper class that converts a UTF-16 string to UTF-8
118 class NS_ConvertUTF16toUTF8
: public nsAutoCString
121 explicit NS_ConvertUTF16toUTF8(const char16_t
* aString
)
123 AppendUTF16toUTF8(aString
, *this);
126 NS_ConvertUTF16toUTF8(const char16_t
* aString
, uint32_t aLength
)
128 AppendUTF16toUTF8(Substring(aString
, aLength
), *this);
131 #ifdef MOZ_USE_CHAR16_WRAPPER
132 NS_ConvertUTF16toUTF8(char16ptr_t aString
)
133 : NS_ConvertUTF16toUTF8(static_cast<const char16_t
*>(aString
))
137 NS_ConvertUTF16toUTF8(char16ptr_t aString
, uint32_t aLength
)
138 : NS_ConvertUTF16toUTF8(static_cast<const char16_t
*>(aString
), aLength
)
143 explicit NS_ConvertUTF16toUTF8(const nsAString
& aString
)
145 AppendUTF16toUTF8(aString
, *this);
149 // NOT TO BE IMPLEMENTED
150 NS_ConvertUTF16toUTF8(char) MOZ_DELETE
;
154 class NS_ConvertUTF8toUTF16
: public nsAutoString
157 explicit NS_ConvertUTF8toUTF16(const char* aCString
)
159 AppendUTF8toUTF16(aCString
, *this);
162 NS_ConvertUTF8toUTF16(const char* aCString
, uint32_t aLength
)
164 AppendUTF8toUTF16(Substring(aCString
, aLength
), *this);
167 explicit NS_ConvertUTF8toUTF16(const nsACString
& aCString
)
169 AppendUTF8toUTF16(aCString
, *this);
173 // NOT TO BE IMPLEMENTED
174 NS_ConvertUTF8toUTF16(char16_t
) MOZ_DELETE
;
178 #ifdef MOZ_USE_CHAR16_WRAPPER
183 return reinterpret_cast<char16_t
*>(aStr
);
189 return reinterpret_cast<wchar_t*>(aStr
);
202 // the following are included/declared for backwards compatibility
203 typedef nsAutoString nsVoidableString
;
205 #include "nsDependentString.h"
206 #include "nsLiteralString.h"
207 #include "nsPromiseFlatString.h"
209 // need to include these for backwards compatibility
210 #include "nsMemory.h"
215 #endif // !defined(nsString_h___)