23#if ! defined (DOXYGEN) && (JUCE_MAC || JUCE_IOS)
26 #if __has_attribute(objc_bridge)
27 #define JUCE_CF_BRIDGED_TYPE(T) __attribute__ ((objc_bridge (T)))
29 #define JUCE_CF_BRIDGED_TYPE(T)
32 typedef const struct JUCE_CF_BRIDGED_TYPE(NSString) __CFString * CFStringRef;
34 #undef JUCE_CF_BRIDGED_TYPE
103 String (
const wchar_t* text);
145 String (
const std::string&);
169 #if (JUCE_STRING_UTF_TYPE == 32)
171 #elif (JUCE_STRING_UTF_TYPE == 16)
173 #elif (DOXYGEN || JUCE_STRING_UTF_TYPE == 8)
176 #error "You must set the value of JUCE_STRING_UTF_TYPE to be either 8, 16, or 32!"
181 int hashCode()
const noexcept;
184 int64 hashCode64()
const noexcept;
187 size_t hash()
const noexcept;
190 int length()
const noexcept;
221 #if ! JUCE_NATIVE_WCHAR_IS_UTF32
246 template <
class CharPo
inter>
262 CharPointerType (addBytesToPointer (text.getAddress(), (
int)
byteOffsetOfNull))
275 template <
class CharPo
inter>
290 CharPointerType (addBytesToPointer (text.getAddress(), (
int)
byteOffsetOfNull))
297 template <
class CharPo
inter>
300 appendCharPointer (
textToAppend, std::numeric_limits<size_t>::max());
623 String substring (
int startIndex,
int endIndex)
const;
673 bool ignoreCase)
const;
685 bool ignoreCase)
const;
702 bool ignoreCase)
const;
713 bool ignoreCase)
const;
764 String replaceSection (
int startIndex,
851 bool isQuotedString()
const;
923 CharPointerType
begin()
const {
return getCharPointer(); }
949 CharPointerType
end()
const {
return begin().findTerminatingNull(); }
1004 explicit String (
double doubleValue);
1032 explicit String (
bool) =
delete;
1108 static String toHexString (
const void* data,
int size,
int groupSize = 1);
1115 template <
typename DecimalType>
1138 auto factor = std::pow (10.0, shift);
1141 std::stringstream
ss;
1142 ss << std::fixed << std::setprecision (std::max (shift, 0)) <<
rounded;
1179 const char* toRawUTF8()
const;
1216 const wchar_t* toWideCharPointer()
const;
1219 std::string toStdString()
const;
1308 #if JUCE_MAC || JUCE_IOS || DOXYGEN
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;
1339 CharPointerType text;
1342 struct PreallocationBytes
1344 explicit PreallocationBytes (
size_t)
noexcept;
1348 explicit String (
const PreallocationBytes&);
1349 size_t getByteOffsetOfEnd() const noexcept;
1354 operator
bool() const noexcept {
return false; }
1357 static String formattedRaw (
const char*, ...);
1359 static String createHex (uint8);
1360 static String createHex (uint16);
1361 static String createHex (uint32);
1362 static String createHex (uint64);
1364 template <
typename Type>
1365 static String createHex (Type n) {
return createHex (
static_cast<typename TypeHelpers::UnsignedTypeWithSize<(
int) sizeof (n)
>::type> (n)); }
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);
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);
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);
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);
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);
1442String& JUCE_CALLTYPE operator<< (String&,
bool) =
delete;
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;
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;
1476template <
class traits>
1477std::basic_ostream <char, traits>& JUCE_CALLTYPE operator<< (std::basic_ostream <char, traits>& stream,
const String& stringToWrite)
1479 return stream << stringToWrite.toRawUTF8();
1485template <
class traits>
1486std::basic_ostream <wchar_t, traits>& JUCE_CALLTYPE operator<< (std::basic_ostream <wchar_t, traits>& stream,
const String& stringToWrite)
1488 return stream << stringToWrite.toWideCharPointer();
1492JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const String& stringToWrite);
1495JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, StringRef stringToWrite);
1502 template <>
struct hash<juce::String>
1504 size_t operator() (
const juce::String& s)
const noexcept {
return s.hash(); }
CharPointerType getCharPointer() const noexcept
CharPointerType begin() const
bool isEmpty() const noexcept
static String toDecimalStringWithSignificantFigures(DecimalType number, int numberOfSignificantFigures)
void appendCharPointer(CharPointer startOfTextToAppend, CharPointer endOfTextToAppend)
CharPointerType end() const
void appendCharPointer(CharPointer textToAppend, size_t maxCharsToTake)
void appendCharPointer(CharPointer textToAppend)
bool isNotEmpty() const noexcept