OpenShot Audio Library | OpenShotAudio 0.4.0
 
Loading...
Searching...
No Matches
juce_String.h
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23#if ! defined (DOXYGEN) && (JUCE_MAC || JUCE_IOS)
24 // Annoyingly we can only forward-declare a typedef by forward-declaring the
25 // aliased type
26 #if __has_attribute(objc_bridge)
27 #define JUCE_CF_BRIDGED_TYPE(T) __attribute__ ((objc_bridge (T)))
28 #else
29 #define JUCE_CF_BRIDGED_TYPE(T)
30 #endif
31
32 typedef const struct JUCE_CF_BRIDGED_TYPE(NSString) __CFString * CFStringRef;
33
34 #undef JUCE_CF_BRIDGED_TYPE
35#endif
36
37namespace juce
38{
39
40//==============================================================================
52class JUCE_API String final
53{
54public:
55 //==============================================================================
59 String() noexcept;
60
62 String (const String&) noexcept;
63
65 String (String&&) noexcept;
66
80 String (const char* text);
81
98 String (const char* text, size_t maxChars);
99
103 String (const wchar_t* text);
104
108 String (const wchar_t* text, size_t maxChars);
109
110 //==============================================================================
113
115 String (CharPointer_UTF8 text, size_t maxChars);
116
119
120 //==============================================================================
123
125 String (CharPointer_UTF16 text, size_t maxChars);
126
129
130 //==============================================================================
133
135 String (CharPointer_UTF32 text, size_t maxChars);
136
139
140 //==============================================================================
143
145 String (const std::string&);
146
149
150 //==============================================================================
152 static String charToString (juce_wchar character);
153
155 ~String() noexcept;
156
169 #if (JUCE_STRING_UTF_TYPE == 32)
170 using CharPointerType = CharPointer_UTF32;
171 #elif (JUCE_STRING_UTF_TYPE == 16)
172 using CharPointerType = CharPointer_UTF16;
173 #elif (DOXYGEN || JUCE_STRING_UTF_TYPE == 8)
174 using CharPointerType = CharPointer_UTF8;
175 #else
176 #error "You must set the value of JUCE_STRING_UTF_TYPE to be either 8, 16, or 32!"
177 #endif
178
179 //==============================================================================
181 int hashCode() const noexcept;
182
184 int64 hashCode64() const noexcept;
185
187 size_t hash() const noexcept;
188
190 int length() const noexcept;
191
192 //==============================================================================
193 // Assignment and concatenation operators..
194
196 String& operator= (const String& other) noexcept;
197
199 String& operator= (String&& other) noexcept;
200
202 String& operator+= (const String& stringToAppend);
204 String& operator+= (const char* textToAppend);
206 String& operator+= (const wchar_t* textToAppend);
208 String& operator+= (StringRef textToAppend);
210 String& operator+= (int numberToAppend);
212 String& operator+= (long numberToAppend);
214 String& operator+= (int64 numberToAppend);
216 String& operator+= (uint64 numberToAppend);
218 String& operator+= (char characterToAppend);
220 String& operator+= (wchar_t characterToAppend);
221 #if ! JUCE_NATIVE_WCHAR_IS_UTF32
223 String& operator+= (juce_wchar characterToAppend);
224 #endif
225
231 void append (const String& textToAppend, size_t maxCharsToTake);
232
238 void appendCharPointer (CharPointerType startOfTextToAppend,
239 CharPointerType endOfTextToAppend);
240
246 template <class CharPointer>
247 void appendCharPointer (CharPointer startOfTextToAppend,
248 CharPointer endOfTextToAppend)
249 {
250 jassert (startOfTextToAppend.getAddress() != nullptr && endOfTextToAppend.getAddress() != nullptr);
251
252 size_t extraBytesNeeded = 0, numChars = 1;
253
254 for (auto t = startOfTextToAppend; t != endOfTextToAppend && ! t.isEmpty(); ++numChars)
255 extraBytesNeeded += CharPointerType::getBytesRequiredFor (t.getAndAdvance());
256
257 if (extraBytesNeeded > 0)
258 {
259 auto byteOffsetOfNull = getByteOffsetOfEnd();
260
261 preallocateBytes (byteOffsetOfNull + extraBytesNeeded);
262 CharPointerType (addBytesToPointer (text.getAddress(), (int) byteOffsetOfNull))
263 .writeWithCharLimit (startOfTextToAppend, (int) numChars);
264 }
265 }
266
268 void appendCharPointer (CharPointerType textToAppend);
269
275 template <class CharPointer>
276 void appendCharPointer (CharPointer textToAppend, size_t maxCharsToTake)
277 {
278 if (textToAppend.getAddress() != nullptr)
279 {
280 size_t extraBytesNeeded = 0, numChars = 1;
281
282 for (auto t = textToAppend; numChars <= maxCharsToTake && ! t.isEmpty(); ++numChars)
283 extraBytesNeeded += CharPointerType::getBytesRequiredFor (t.getAndAdvance());
284
285 if (extraBytesNeeded > 0)
286 {
287 auto byteOffsetOfNull = getByteOffsetOfEnd();
288
289 preallocateBytes (byteOffsetOfNull + extraBytesNeeded);
290 CharPointerType (addBytesToPointer (text.getAddress(), (int) byteOffsetOfNull))
291 .writeWithCharLimit (textToAppend, (int) numChars);
292 }
293 }
294 }
295
297 template <class CharPointer>
298 void appendCharPointer (CharPointer textToAppend)
299 {
300 appendCharPointer (textToAppend, std::numeric_limits<size_t>::max());
301 }
302
303 //==============================================================================
304 // Comparison methods..
305
310 bool isEmpty() const noexcept { return text.isEmpty(); }
311
316 bool isNotEmpty() const noexcept { return ! text.isEmpty(); }
317
319 void clear() noexcept;
320
322 bool equalsIgnoreCase (const String& other) const noexcept;
323
325 bool equalsIgnoreCase (StringRef other) const noexcept;
326
328 bool equalsIgnoreCase (const wchar_t* other) const noexcept;
329
331 bool equalsIgnoreCase (const char* other) const noexcept;
332
337 int compare (const String& other) const noexcept;
338
343 int compare (const char* other) const noexcept;
344
349 int compare (const wchar_t* other) const noexcept;
350
355 int compareIgnoreCase (const String& other) const noexcept;
356
365 int compareNatural (StringRef other, bool isCaseSensitive = false) const noexcept;
366
371 bool startsWith (StringRef text) const noexcept;
372
377 bool startsWithChar (juce_wchar character) const noexcept;
378
383 bool startsWithIgnoreCase (StringRef text) const noexcept;
384
389 bool endsWith (StringRef text) const noexcept;
390
395 bool endsWithChar (juce_wchar character) const noexcept;
396
401 bool endsWithIgnoreCase (StringRef text) const noexcept;
402
407 bool contains (StringRef text) const noexcept;
408
412 bool containsChar (juce_wchar character) const noexcept;
413
417 bool containsIgnoreCase (StringRef text) const noexcept;
418
425 bool containsWholeWord (StringRef wordToLookFor) const noexcept;
426
433 bool containsWholeWordIgnoreCase (StringRef wordToLookFor) const noexcept;
434
442 int indexOfWholeWord (StringRef wordToLookFor) const noexcept;
443
451 int indexOfWholeWordIgnoreCase (StringRef wordToLookFor) const noexcept;
452
459 bool containsAnyOf (StringRef charactersItMightContain) const noexcept;
460
468 bool containsOnly (StringRef charactersItMightContain) const noexcept;
469
477 bool containsNonWhitespaceChars() const noexcept;
478
486 bool matchesWildcard (StringRef wildcard, bool ignoreCase) const noexcept;
487
488 //==============================================================================
489 // Substring location methods..
490
496 int indexOfChar (juce_wchar characterToLookFor) const noexcept;
497
505 int indexOfChar (int startIndex, juce_wchar characterToLookFor) const noexcept;
506
519 int indexOfAnyOf (StringRef charactersToLookFor,
520 int startIndex = 0,
521 bool ignoreCase = false) const noexcept;
522
528 int indexOf (StringRef textToLookFor) const noexcept;
529
537 int indexOf (int startIndex, StringRef textToLookFor) const noexcept;
538
544 int indexOfIgnoreCase (StringRef textToLookFor) const noexcept;
545
553 int indexOfIgnoreCase (int startIndex, StringRef textToLookFor) const noexcept;
554
559 int lastIndexOfChar (juce_wchar character) const noexcept;
560
566 int lastIndexOf (StringRef textToLookFor) const noexcept;
567
573 int lastIndexOfIgnoreCase (StringRef textToLookFor) const noexcept;
574
587 int lastIndexOfAnyOf (StringRef charactersToLookFor,
588 bool ignoreCase = false) const noexcept;
589
590
591 //==============================================================================
592 // Substring extraction and manipulation methods..
593
605 juce_wchar operator[] (int index) const noexcept;
606
610 juce_wchar getLastCharacter() const noexcept;
611
612 //==============================================================================
623 String substring (int startIndex, int endIndex) const;
624
633 String substring (int startIndex) const;
634
644 String dropLastCharacters (int numberToDrop) const;
645
653 String getLastCharacters (int numCharacters) const;
654
655 //==============================================================================
671 String fromFirstOccurrenceOf (StringRef substringToStartFrom,
672 bool includeSubStringInResult,
673 bool ignoreCase) const;
674
683 String fromLastOccurrenceOf (StringRef substringToFind,
684 bool includeSubStringInResult,
685 bool ignoreCase) const;
686
700 String upToFirstOccurrenceOf (StringRef substringToEndWith,
701 bool includeSubStringInResult,
702 bool ignoreCase) const;
703
711 String upToLastOccurrenceOf (StringRef substringToFind,
712 bool includeSubStringInResult,
713 bool ignoreCase) const;
714
715 //==============================================================================
717 String trim() const;
718
720 String trimStart() const;
721
723 String trimEnd() const;
724
731 String trimCharactersAtStart (StringRef charactersToTrim) const;
732
739 String trimCharactersAtEnd (StringRef charactersToTrim) const;
740
741 //==============================================================================
743 String toUpperCase() const;
744
746 String toLowerCase() const;
747
748 //==============================================================================
764 String replaceSection (int startIndex,
765 int numCharactersToReplace,
766 StringRef stringToInsert) const;
767
775 String replace (StringRef stringToReplace,
776 StringRef stringToInsertInstead,
777 bool ignoreCase = false) const;
778
786 String replaceFirstOccurrenceOf (StringRef stringToReplace,
787 StringRef stringToInsertInstead,
788 bool ignoreCase = false) const;
789
791 String replaceCharacter (juce_wchar characterToReplace,
792 juce_wchar characterToInsertInstead) const;
793
804 String replaceCharacters (StringRef charactersToReplace,
805 StringRef charactersToInsertInstead) const;
806
816 String retainCharacters (StringRef charactersToRetain) const;
817
827 String removeCharacters (StringRef charactersToRemove) const;
828
834 String initialSectionContainingOnly (StringRef permittedCharacters) const;
835
842 String initialSectionNotContaining (StringRef charactersToStopAt) const;
843
844 //==============================================================================
851 bool isQuotedString() const;
852
863 String unquoted() const;
864
876 String quoted (juce_wchar quoteCharacter = '"') const;
877
878
879 //==============================================================================
885 static String repeatedString (StringRef stringToRepeat,
886 int numberOfTimesToRepeat);
887
891 String paddedLeft (juce_wchar padCharacter, int minimumLength) const;
892
896 String paddedRight (juce_wchar padCharacter, int minimumLength) const;
897
906 static String createStringFromData (const void* data, int size);
907
919 template <typename... Args>
920 static String formatted (const String& formatStr, Args... args) { return formattedRaw (formatStr.toRawUTF8(), args...); }
921
923 CharPointerType begin() const { return getCharPointer(); }
924
949 CharPointerType end() const { return begin().findTerminatingNull(); }
950
951 //==============================================================================
952 // Numeric conversions..
953
957 explicit String (int decimalInteger);
958
962 explicit String (unsigned int decimalInteger);
963
967 explicit String (short decimalInteger);
968
972 explicit String (unsigned short decimalInteger);
973
977 explicit String (int64 largeIntegerValue);
978
982 explicit String (uint64 largeIntegerValue);
983
987 explicit String (long decimalInteger);
988
992 explicit String (unsigned long decimalInteger);
993
998 explicit String (float floatValue);
999
1004 explicit String (double doubleValue);
1005
1016 String (float floatValue, int numberOfDecimalPlaces, bool useScientificNotation = false);
1017
1027 String (double doubleValue, int numberOfDecimalPlaces, bool useScientificNotation = false);
1028
1029 #ifndef DOXYGEN
1030 // Automatically creating a String from a bool opens up lots of nasty type conversion edge cases.
1031 // If you want a String representation of a bool you can cast the bool to an int first.
1032 explicit String (bool) = delete;
1033 #endif
1034
1040 int getIntValue() const noexcept;
1041
1045 int64 getLargeIntValue() const noexcept;
1046
1057 int getTrailingIntValue() const noexcept;
1058
1064 float getFloatValue() const noexcept;
1065
1071 double getDoubleValue() const noexcept;
1072
1082 int getHexValue32() const noexcept;
1083
1093 int64 getHexValue64() const noexcept;
1094
1096 template <typename IntegerType>
1097 static String toHexString (IntegerType number) { return createHex (number); }
1098
1108 static String toHexString (const void* data, int size, int groupSize = 1);
1109
1115 template <typename DecimalType>
1116 static String toDecimalStringWithSignificantFigures (DecimalType number, int numberOfSignificantFigures)
1117 {
1118 jassert (numberOfSignificantFigures > 0);
1119
1120 if (exactlyEqual (number, DecimalType()))
1121 {
1122 if (numberOfSignificantFigures > 1)
1123 {
1124 String result ("0.0");
1125
1126 for (int i = 2; i < numberOfSignificantFigures; ++i)
1127 result += "0";
1128
1129 return result;
1130 }
1131
1132 return "0";
1133 }
1134
1135 auto numDigitsBeforePoint = (int) std::ceil (std::log10 (number < 0 ? -number : number));
1136
1137 auto shift = numberOfSignificantFigures - numDigitsBeforePoint;
1138 auto factor = std::pow (10.0, shift);
1139 auto rounded = std::round (number * factor) / factor;
1140
1141 std::stringstream ss;
1142 ss << std::fixed << std::setprecision (std::max (shift, 0)) << rounded;
1143 return ss.str();
1144 }
1145
1146 //==============================================================================
1153 CharPointerType getCharPointer() const noexcept { return text; }
1154
1166 CharPointer_UTF8 toUTF8() const;
1167
1179 const char* toRawUTF8() const;
1180
1192 CharPointer_UTF16 toUTF16() const;
1193
1202 CharPointer_UTF32 toUTF32() const;
1203
1216 const wchar_t* toWideCharPointer() const;
1217
1219 std::string toStdString() const;
1220
1221 //==============================================================================
1225 static String fromUTF8 (const char* utf8buffer, int bufferSizeBytes = -1);
1226
1231 size_t getNumBytesAsUTF8() const noexcept;
1232
1233 //==============================================================================
1249 size_t copyToUTF8 (CharPointer_UTF8::CharType* destBuffer, size_t maxBufferSizeBytes) const noexcept;
1250
1266 size_t copyToUTF16 (CharPointer_UTF16::CharType* destBuffer, size_t maxBufferSizeBytes) const noexcept;
1267
1283 size_t copyToUTF32 (CharPointer_UTF32::CharType* destBuffer, size_t maxBufferSizeBytes) const noexcept;
1284
1285 //==============================================================================
1300 void preallocateBytes (size_t numBytesNeeded);
1301
1305 void swapWith (String& other) noexcept;
1306
1307 //==============================================================================
1308 #if JUCE_MAC || JUCE_IOS || DOXYGEN
1310 static String fromCFString (CFStringRef cfString);
1311
1316 CFStringRef toCFString() const;
1317
1320 String convertToPrecomposedUnicode() const;
1321 #endif
1322
1326 int getReferenceCount() const noexcept;
1327
1328 //==============================================================================
1329 #if JUCE_ALLOW_STATIC_NULL_VARIABLES && ! defined (DOXYGEN)
1330 [[deprecated ("This was a static empty string object, but is now deprecated as it's too easy to accidentally "
1331 "use it indirectly during a static constructor, leading to hard-to-find order-of-initialisation "
1332 "problems. If you need an empty String object, just use String() or {}. For returning an empty "
1333 "String from a function by reference, use a function-local static String object and return that.")]]
1334 static const String empty;
1335 #endif
1336
1337private:
1338 //==============================================================================
1339 CharPointerType text;
1340
1341 //==============================================================================
1342 struct PreallocationBytes
1343 {
1344 explicit PreallocationBytes (size_t) noexcept;
1345 size_t numBytes;
1346 };
1347
1348 explicit String (const PreallocationBytes&); // This constructor preallocates a certain amount of memory
1349 size_t getByteOffsetOfEnd() const noexcept;
1350
1351 // This private cast operator should prevent strings being accidentally cast
1352 // to bools (this is possible because the compiler can add an implicit cast
1353 // via a const char*)
1354 operator bool() const noexcept { return false; }
1355
1356 //==============================================================================
1357 static String formattedRaw (const char*, ...);
1358
1359 static String createHex (uint8);
1360 static String createHex (uint16);
1361 static String createHex (uint32);
1362 static String createHex (uint64);
1363
1364 template <typename Type>
1365 static String createHex (Type n) { return createHex (static_cast<typename TypeHelpers::UnsignedTypeWithSize<(int) sizeof (n)>::type> (n)); }
1366};
1367
1368//==============================================================================
1370JUCE_API String JUCE_CALLTYPE operator+ (const char* string1, const String& string2);
1372JUCE_API String JUCE_CALLTYPE operator+ (const wchar_t* string1, const String& string2);
1374JUCE_API String JUCE_CALLTYPE operator+ (char string1, const String& string2);
1376JUCE_API String JUCE_CALLTYPE operator+ (wchar_t string1, const String& string2);
1377#if ! JUCE_NATIVE_WCHAR_IS_UTF32
1379JUCE_API String JUCE_CALLTYPE operator+ (juce_wchar string1, const String& string2);
1380#endif
1381
1383JUCE_API String JUCE_CALLTYPE operator+ (String string1, const String& string2);
1385JUCE_API String JUCE_CALLTYPE operator+ (String string1, const char* string2);
1387JUCE_API String JUCE_CALLTYPE operator+ (String string1, const wchar_t* string2);
1389JUCE_API String JUCE_CALLTYPE operator+ (String string1, const std::string& string2);
1391JUCE_API String JUCE_CALLTYPE operator+ (String string1, char characterToAppend);
1393JUCE_API String JUCE_CALLTYPE operator+ (String string1, wchar_t characterToAppend);
1394#if ! JUCE_NATIVE_WCHAR_IS_UTF32
1396JUCE_API String JUCE_CALLTYPE operator+ (String string1, juce_wchar characterToAppend);
1397#endif
1398
1399//==============================================================================
1401JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, char characterToAppend);
1403JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, wchar_t characterToAppend);
1404#if ! JUCE_NATIVE_WCHAR_IS_UTF32
1406JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, juce_wchar characterToAppend);
1407#endif
1408
1410JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, const char* string2);
1412JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, const wchar_t* string2);
1414JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, const String& string2);
1416JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, StringRef string2);
1418JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, const std::string& string2);
1419
1421JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, uint8 number);
1423JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, short number);
1425JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, int number);
1427JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, long number);
1429JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, unsigned long number);
1431JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, int64 number);
1433JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, uint64 number);
1435JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, float number);
1437JUCE_API String& JUCE_CALLTYPE operator<< (String& string1, double number);
1438
1439#ifndef DOXYGEN
1440// Automatically creating a String from a bool opens up lots of nasty type conversion edge cases.
1441// If you want a String representation of a bool you can cast the bool to an int first.
1442String& JUCE_CALLTYPE operator<< (String&, bool) = delete;
1443#endif
1444
1445//==============================================================================
1447JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, const String& string2) noexcept;
1449JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, const char* string2) noexcept;
1451JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, const wchar_t* string2) noexcept;
1453JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, CharPointer_UTF8 string2) noexcept;
1455JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, CharPointer_UTF16 string2) noexcept;
1457JUCE_API bool JUCE_CALLTYPE operator== (const String& string1, CharPointer_UTF32 string2) noexcept;
1458
1460JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, const String& string2) noexcept;
1462JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, const char* string2) noexcept;
1464JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, const wchar_t* string2) noexcept;
1466JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, CharPointer_UTF8 string2) noexcept;
1468JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, CharPointer_UTF16 string2) noexcept;
1470JUCE_API bool JUCE_CALLTYPE operator!= (const String& string1, CharPointer_UTF32 string2) noexcept;
1471
1472//==============================================================================
1476template <class traits>
1477std::basic_ostream <char, traits>& JUCE_CALLTYPE operator<< (std::basic_ostream <char, traits>& stream, const String& stringToWrite)
1478{
1479 return stream << stringToWrite.toRawUTF8();
1480}
1481
1485template <class traits>
1486std::basic_ostream <wchar_t, traits>& JUCE_CALLTYPE operator<< (std::basic_ostream <wchar_t, traits>& stream, const String& stringToWrite)
1487{
1488 return stream << stringToWrite.toWideCharPointer();
1489}
1490
1492JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const String& stringToWrite);
1493
1495JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, StringRef stringToWrite);
1496
1497} // namespace juce
1498
1499#ifndef DOXYGEN
1500namespace std
1501{
1502 template <> struct hash<juce::String>
1503 {
1504 size_t operator() (const juce::String& s) const noexcept { return s.hash(); }
1505 };
1506}
1507#endif
CharPointerType getCharPointer() const noexcept
CharPointerType begin() const
int length() const noexcept
bool isEmpty() const noexcept
String() noexcept
void append(const String &textToAppend, size_t maxCharsToTake)
static String toDecimalStringWithSignificantFigures(DecimalType number, int numberOfSignificantFigures)
int64 hashCode64() const noexcept
void appendCharPointer(CharPointer startOfTextToAppend, CharPointer endOfTextToAppend)
void appendCharPointer(CharPointerType startOfTextToAppend, CharPointerType endOfTextToAppend)
void preallocateBytes(size_t numBytesNeeded)
size_t hash() const noexcept
static String formatted(const String &formatStr, Args... args)
CharPointerType end() const
static String toHexString(IntegerType number)
void appendCharPointer(CharPointer textToAppend, size_t maxCharsToTake)
void appendCharPointer(CharPointer textToAppend)
static String charToString(juce_wchar character)
int hashCode() const noexcept
bool isNotEmpty() const noexcept