32#include "CarlaJuceUtils.hpp"
68 numBytes = (numBytes + 3) & ~(size_t) 3;
70 s->refCount.value = 0;
71 s->allocatedNumBytes = numBytes;
75 template <
class CharPo
inter>
78 if (
text.getAddress() ==
nullptr ||
text.isEmpty())
87 template <
class CharPo
inter>
90 if (
text.getAddress() ==
nullptr ||
text.isEmpty() || maxChars == 0)
93 CharPointer end (
text);
95 size_t bytesNeeded =
sizeof (
CharType);
97 while (numChars < maxChars && ! end.isEmpty())
108 template <
class CharPo
inter>
111 if (
start.getAddress() ==
nullptr ||
start.isEmpty())
116 size_t bytesNeeded =
sizeof (
CharType);
118 while (
e < end && !
e.isEmpty())
131 if (
start.getAddress() ==
nullptr ||
start.isEmpty())
134 const size_t numBytes = (size_t) (
reinterpret_cast<const char*
> (end.getAddress())
135 -
reinterpret_cast<const char*
> (
start.getAddress()));
161 if (--(
b->refCount) == -1)
162 delete[]
reinterpret_cast<char*
> (
b);
187 if (
b->allocatedNumBytes >= numBytes &&
b->refCount.get() <= 0)
211 return reinterpret_cast<StringHolder*
> (
reinterpret_cast<char*
> (
text.getAddress())
212 - (
reinterpret_cast<size_t> (
reinterpret_cast<StringHolder*
> (1)->
text) - 1));
233 std::swap (
text, other.text);
364 static const std::locale classicLocale (std::locale::classic());
365 imbue (classicLocale);
372 std::ostream o (
this);
374 if (numDecPlaces > 0)
375 o.precision ((std::streamsize) numDecPlaces);
380 return (
size_t) (pptr() - pbase());
384 static char*
doubleToString (
char* buffer,
const int numChars,
double n,
int numDecPlaces,
size_t& len)
noexcept
386 if (numDecPlaces > 0 && numDecPlaces < 7 && n > -1.0e20 &&
n < 1.0e20)
388 char*
const end = buffer + numChars;
390 int64 v = (
int64) (pow (10.0, numDecPlaces) * std::abs (
n) + 0.5);
393 while (numDecPlaces >= 0 ||
v > 0)
395 if (numDecPlaces == 0)
398 *--
t = (char) (
'0' + (
v % 10));
407 len = (size_t) (end -
t - 1);
417 template <
typename IntegerType>
453 return (
int)
text.length();
458 return (
size_t) (((
char*)
text.findTerminatingNull().getAddress()) - (
char*)
text.getAddress());
468 wassert (index == 0 || (index > 0 && index <= (
int)
text.lengthUpTo ((
size_t) index + 1)));
472template <
typename Type>
475 template <
typename CharPo
inter>
480 while (!
t.isEmpty())
481 result = ((Type) multiplier) *
result + (Type)
t.getAndAdvance();
486 enum { multiplier =
sizeof (Type) > 4 ? 101 : 31 };
496bool operator== (
const String& s1,
const char* s2)
noexcept {
return s1.compare (s2) == 0; }
497bool operator!= (
const String& s1,
const char* s2)
noexcept {
return s1.compare (s2) != 0; }
515 return text.compareIgnoreCase (
t.text) == 0;
520 return text == other.text
521 ||
text.compareIgnoreCase (other.text) == 0;
538 if (! (isDigit1 || isDigit2))
return bias;
539 if (! isDigit1)
return -1;
540 if (! isDigit2)
return 1;
542 if (c1 !=
c2 && bias == 0)
543 bias = c1 <
c2 ? -1 : 1;
559 if (! (isDigit1 || isDigit2))
return 0;
560 if (! isDigit1)
return -1;
561 if (! isDigit2)
return 1;
562 if (c1 <
c2)
return -1;
563 if (c1 >
c2)
return 1;
569 bool firstLoop =
true;
573 const bool hasSpace1 = s1.isWhitespace();
574 const bool hasSpace2 = s2.isWhitespace();
576 if ((! firstLoop) && (hasSpace1 ^ hasSpace2))
577 return hasSpace2 ? 1 : -1;
581 if (hasSpace1) s1 = s1.findEndOfWhitespace();
582 if (hasSpace2) s2 = s2.findEndOfWhitespace();
584 if (s1.isDigit() && s2.isDigit())
596 if (c1 !=
c2 && ! isCaseSensitive)
612 if (isAlphaNum2 && ! isAlphaNum1)
return -1;
613 if (isAlphaNum1 && ! isAlphaNum2)
return 1;
615 return c1 <
c2 ? -1 : 1;
631 : textToAppend.
text, maxCharsToTake);
646 wassert (extraBytesNeeded >= 0);
648 if (extraBytesNeeded > 0)
654 memcpy (newStringStart, startOfTextToAppend.
getAddress(), (
size_t) extraBytesNeeded);
668 return operator= (other);
684 const char asString[] = { ch, 0 };
695 template <
typename T>
698 char buffer [(
sizeof(T) * 8) / 2];
746 stream.
write (
text.text.getAddress(), numBytes);
753 return text.indexOf (character);
760 for (
int i = 0; !
t.isEmpty(); ++
i)
764 if (
t.getAndAdvance() == character)
781 for (
int i = 0; !
t.isEmpty(); ++
i)
782 if (
t.getAndAdvance() == character)
792 for (
int i = 0; !
t.isEmpty(); ++
i)
796 if (charactersToLookFor.text.indexOf (
t.getAndAdvance(), ignoreCase) >= 0)
810 return other.isEmpty() ? 0 :
text.indexOf (other.text);
825 for (
int i = startIndex; --
i >= 0;)
833 int found =
t.indexOf (other.text);
846 for (
int i = startIndex; --
i >= 0;)
862 if (other.isNotEmpty())
864 const int len = other.length();
871 if (
n.compareUpTo (other.text, len) == 0)
884 if (other.isNotEmpty())
886 const int len = other.length();
893 if (
n.compareIgnoreCaseUpTo (other.text, len) == 0)
909 for (
int i = 0; !
t.isEmpty(); ++
i)
910 if (charactersToLookFor.text.indexOf (
t.getAndAdvance(), ignoreCase) >= 0)
923 return text.indexOf (character) >= 0;
933 if (
word.isNotEmpty())
936 const int wordLen =
word.length();
937 const int end = (
int)
t.length() - wordLen;
939 for (
int i = 0;
i <= end; ++
i)
941 if (
t.compareUpTo (
word.text, wordLen) == 0
942 && (
i == 0 || ! (
t - 1).isLetterOrDigit())
943 && ! (
t + wordLen).isLetterOrDigit())
955 if (
word.isNotEmpty())
958 const int wordLen =
word.length();
959 const int end = (
int)
t.length() - wordLen;
961 for (
int i = 0;
i <= end; ++
i)
963 if (
t.compareIgnoreCaseUpTo (
word.text, wordLen) == 0
964 && (
i == 0 || ! (
t - 1).isLetterOrDigit())
965 && ! (
t + wordLen).isLetterOrDigit())
986template <
typename CharPo
inter>
989 static bool matches (CharPointer wildcard, CharPointer
test,
const bool ignoreCase)
noexcept
1008 return (wc == tc) || (wc ==
'?' && tc != 0)
1030 if (numberOfTimesToRepeat <= 0)
1036 while (--numberOfTimesToRepeat >= 0)
1037 n.writeAll (stringToRepeat.
text);
1046 int extraChars = minimumLength;
1049 while (! end.isEmpty())
1055 if (extraChars <= 0 || padCharacter == 0)
1058 const size_t currentByteSize = (size_t) (((
char*) end.getAddress()) - (
char*)
text.getAddress());
1062 while (--extraChars >= 0)
1063 n.write (padCharacter);
1073 int extraChars = minimumLength;
1076 while (! end.isEmpty())
1082 if (extraChars <= 0 || padCharacter == 0)
1085 const size_t currentByteSize = (size_t) (((
char*) end.getAddress()) - (
char*)
text.getAddress());
1091 while (--extraChars >= 0)
1092 n.write (padCharacter);
1108 if (numCharsToReplace < 0)
1111 numCharsToReplace = 0;
1117 for (
int i = 0;
i < index; ++
i)
1123 return *
this + stringToInsert;
1131 for (
int i = 0;
i < numCharsToReplace && ! startOfRemainder.
isEmpty(); ++
i)
1134 if (insertPoint ==
text && startOfRemainder.
isEmpty())
1135 return stringToInsert.
text;
1137 const size_t initialBytes = (size_t) (((
char*) insertPoint.
getAddress()) - (
char*)
text.getAddress());
1141 const size_t newTotalBytes = initialBytes + newStringBytes + remainderBytes;
1142 if (newTotalBytes <= 0)
1147 char* dest = (
char*)
result.text.getAddress();
1148 memcpy (dest,
text.getAddress(), initialBytes);
1149 dest += initialBytes;
1151 dest += newStringBytes;
1153 dest += remainderBytes;
1161 const int stringToReplaceLen = stringToReplace.
length();
1162 const int stringToInsertLen = stringToInsert.
length();
1167 while ((
i = (ignoreCase ?
result.indexOfIgnoreCase (
i, stringToReplace)
1168 :
result.indexOf (
i, stringToReplace))) >= 0)
1170 result =
result.replaceSection (
i, stringToReplaceLen, stringToInsert);
1171 i += stringToInsertLen;
1201 const size_t destOffset = (size_t) (((
char*)
dest.getAddress()) - (
char*)
result.getCharPointer().getAddress());
1228 if (
c == charToReplace)
1252 const int index = charactersToReplace.
text.
indexOf (
c);
1254 c = charactersToInsertInstead [index];
1268 return text.compareUpTo (other.text, other.length()) == 0;
1273 return text.compareIgnoreCaseUpTo (other.text, other.length()) == 0;
1281 return *
text == character;
1293 return *--
t == character;
1301 while (end >
text && otherEnd > other.text)
1306 if (*end != *otherEnd)
1310 return otherEnd == other.text;
1318 while (end >
text && otherEnd > other.text)
1327 return otherEnd == other.text;
1418 while (--
start >= 0)
1440 const bool includeSubString,
1441 const bool ignoreCase)
const
1452 const bool includeSubString,
1453 const bool ignoreCase)
const
1464 const bool includeSubString,
1465 const bool ignoreCase)
const
1476 const bool includeSubString,
1477 const bool ignoreCase)
const
1491 return trimmedStart ==
'"'
1492 || trimmedStart ==
'\'';
1497 const int len =
length();
1503 const int dropAtStart = (*
text ==
'"' || *
text ==
'\'') ? 1 : 0;
1504 const int dropAtEnd = (lastChar ==
'"' || lastChar ==
'\'') ? 1 : 0;
1506 return substring (dropAtStart, len - dropAtEnd);
1516 if (!
t.startsWithChar (quoteCharacter))
1519 if (!
t.endsWithChar (quoteCharacter))
1520 t += quoteCharacter;
1530 if (! (--end).isWhitespace())
1549 if (trimmedEnd <=
start)
1579 if (trimmedEnd < end)
1603 while (trimmedEnd >
text)
1605 if (charactersToTrim.
text.
indexOf (*--trimmedEnd) < 0)
1612 if (trimmedEnd < end)
1684 if (chars.text.indexOf (
t.getAndAdvance()) < 0)
1693 if (chars.text.indexOf (
t.getAndAdvance()) >= 0)
1702 if (!
t.isWhitespace())
1714 for (
size_t i = 0;
i < num; ++
i)
1723 const uint8*
const data =
static_cast<const uint8*
> (unknownData);
1749 size_t bufferSize = 256;
1757 va_start (args, pf);
1760 temp.
clear (bufferSize);
1762 const int num = vsnprintf (temp.
getData(), bufferSize - 1, pf.
toRawUTF8(), args);
1771 if (num == 0 || bufferSize > 65536)
1802 n += mult * (*
t -
'0');
1811template <
typename Type>
1839 int numChars = (
size * 2) + 2;
1841 numChars +=
size / groupSize;
1845 const unsigned char*
data =
static_cast<const unsigned char*
> (
d);
1848 for (
int i = 0;
i <
size; ++
i)
1850 const unsigned char nextByte = *
data++;
1854 if (groupSize > 0 && (
i % groupSize) == (groupSize - 1) &&
i < (
size - 1))
1868template <
class CharPo
interType_Src,
class CharPo
interType_Dest>
1875 typedef typename CharPointerType_Dest::CharType DestChar;
1878 return CharPointerType_Dest (
reinterpret_cast<const DestChar*
> (&
emptyChar));
1881 const size_t extraBytesNeeded = CharPointerType_Dest::getBytesRequiredFor (
text) +
sizeof (
typename CharPointerType_Dest::CharType);
1882 const size_t endOffset = (
text.sizeInBytes() + 3) & ~3u;
1888 const CharPointerType_Dest extraSpace (
static_cast<DestChar*
> (newSpace));
1891 const size_t bytesToClear = (size_t)
jmin ((
int) extraBytesNeeded, 4);
1895 CharPointerType_Dest (extraSpace).writeAll (
text);
1909std::wstring String::toUTF16()
const
1914 const int len = MultiByteToWideChar (CP_UTF8, 0, toUTF8(),
length() + 1,
nullptr, 0);
1920 MultiByteToWideChar (CP_UTF8, 0, toUTF8(),
length(), &ret[0], len);
1927 return toUTF8().getAddress();
1936template <
class CharPo
interType_Src,
class CharPo
interType_Dest>
1939 static size_t copyToBuffer (
const CharPointerType_Src source,
typename CharPointerType_Dest::CharType*
const buffer,
const size_t maxBufferSizeBytes)
1941 wassert (((ssize_t) maxBufferSizeBytes) >= 0);
1943 if (buffer ==
nullptr)
1944 return CharPointerType_Dest::getBytesRequiredFor (source) +
sizeof (
typename CharPointerType_Dest::CharType);
1946 return CharPointerType_Dest (buffer).writeWithDestByteLimit (source, maxBufferSizeBytes);
1963 if (buffer !=
nullptr)
1965 if (bufferSizeBytes < 0)
1968 if (bufferSizeBytes > 0)
1980String String::convertToPrecomposedUnicode()
const
1985 map.unicodeEncoding = CreateTextEncoding (kTextEncodingUnicodeDefault,
1987 kTextEncodingDefaultFormat);
1989 map.otherEncoding = CreateTextEncoding (kTextEncodingUnicodeDefault,
1990 kUnicodeCanonicalCompVariant,
1991 kTextEncodingDefaultFormat);
1993 map.mappingVersion = kUnicodeUseLatestMapping;
1995 UnicodeToTextInfo conversionInfo = 0;
1998 if (CreateUnicodeToTextInfo (&map, &conversionInfo) == noErr)
2000 const size_t bytesNeeded = CharPointer_UTF16::getBytesRequiredFor (getCharPointer());
2003 tempOut.
calloc (bytesNeeded + 4);
2005 ByteCount bytesRead = 0;
2006 ByteCount outputBufferSize = 0;
2008 if (ConvertFromUnicodeToText (conversionInfo,
2009 bytesNeeded, (ConstUniCharArrayPtr) toUTF16().getAddress(),
2010 kUnicodeDefaultDirectionMask,
2012 bytesNeeded, &bytesRead,
2013 &outputBufferSize, tempOut) == noErr)
2018 DisposeUnicodeToTextInfo (&conversionInfo);
2034 :
text (stringLiteral)
2036 wassert (stringLiteral !=
nullptr);
2056 wassert (stringLiteral.getAddress() !=
nullptr);
#define CARLA_SAFE_ASSERT_RETURN(cond, ret)
Definition CarlaDefines.h:190
#define CARLA_SAFE_ASSERT(cond)
Definition CarlaDefines.h:182
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
#define noexcept
Definition DistrhoDefines.h:72
#define nullptr
Definition DistrhoDefines.h:75
static size_t getBytesRequiredFor(const water_uchar charToWrite) noexcept
Definition CharPointer_UTF8.h:294
int32 get() const noexcept
Definition Atomic.h:245
Definition CharPointer_UTF8.h:45
CharType * getAddress() const noexcept
Definition CharPointer_UTF8.h:80
void writeNull() const noexcept
Definition CharPointer_UTF8.h:361
static bool isValidString(const CharType *dataToTest, int maxBytesToRead)
Definition CharPointer_UTF8.h:502
bool isEmpty() const noexcept
Definition CharPointer_UTF8.h:86
static bool isByteOrderMark(const void *possibleByteOrder) noexcept
Definition CharPointer_UTF8.h:553
CharPointer_UTF8 findTerminatingNull() const noexcept
Definition CharPointer_UTF8.h:329
water_uchar toUpperCase() const noexcept
Definition CharPointer_UTF8.h:473
int indexOf(const CharPointer stringToFind) const noexcept
Definition CharPointer_UTF8.h:441
static size_t getBytesRequiredFor(const water_uchar charToWrite) noexcept
Definition CharPointer_UTF8.h:294
void writeAll(const CharPointer src) noexcept
Definition CharPointer_UTF8.h:368
void write(const water_uchar charToWrite) noexcept
Definition CharPointer_UTF8.h:335
char CharType
Definition CharPointer_UTF8.h:47
void writeWithCharLimit(const CharPointer src, const int maxChars) noexcept
Definition CharPointer_UTF8.h:400
water_uchar getAndAdvance() noexcept
Definition CharPointer_UTF8.h:157
water_uchar toLowerCase() const noexcept
Definition CharPointer_UTF8.h:475
static water_uchar toUpperCase(water_uchar character) noexcept
Definition CharacterFunctions.cpp:34
static bool isLetterOrDigit(char character) noexcept
Definition CharacterFunctions.cpp:94
static bool isDigit(char character) noexcept
Definition CharacterFunctions.cpp:73
static water_uchar toLowerCase(water_uchar character) noexcept
Definition CharacterFunctions.cpp:39
static int indexOfIgnoreCase(CharPointerType1 haystack, const CharPointerType2 needle) noexcept
Definition CharacterFunctions.h:514
static water_uchar getUnicodeCharFromWindows1252Codepage(uint8 windows1252Char) noexcept
Definition CharacterFunctions.cpp:161
Definition HeapBlock.h:77
bool malloc(const size_t newNumElements, const size_t elementSize=sizeof(ElementType)) noexcept
Definition HeapBlock.h:171
ElementType * getData() const noexcept
Definition HeapBlock.h:108
void clear(size_t numElements) noexcept
Definition HeapBlock.h:237
bool calloc(const size_t newNumElements, const size_t elementSize=sizeof(ElementType)) noexcept
Definition HeapBlock.h:182
bool realloc(const size_t newNumElements, const size_t elementSize=sizeof(ElementType)) noexcept
Definition HeapBlock.h:209
Definition OutputStream.h:44
virtual bool write(const void *dataToWrite, size_t numberOfBytes)=0
Definition String.cpp:1178
StringCreationHelper(const CharPointer_UTF8 s)
Definition String.cpp:1187
size_t allocatedBytes
Definition String.cpp:1214
CharPointer_UTF8 source
Definition String.cpp:1210
void write(water_uchar c)
Definition String.cpp:1194
StringCreationHelper(const size_t initialBytes)
Definition String.cpp:1180
CharPointer_UTF8 dest
Definition String.cpp:1213
size_t bytesWritten
Definition String.cpp:1214
String result
Definition String.cpp:1209
Atomic< int > refCount
Definition String.cpp:203
static int getReferenceCount(const CharPointer_UTF8 text) noexcept
Definition String.cpp:170
static size_t getAllocatedNumBytes(const CharPointer_UTF8 text) noexcept
Definition String.cpp:197
static CharPointer_UTF8 createFromCharPointer(const CharPointer start, const CharPointer end)
Definition String.cpp:109
size_t allocatedNumBytes
Definition String.cpp:204
static CharPointer_UTF8 makeUniqueWithByteSize(const CharPointer_UTF8 text, size_t numBytes)
Definition String.cpp:176
static CharPointer_UTF8 createFromCharPointer(const CharPointer text, size_t maxChars)
Definition String.cpp:88
static CharPointer_UTF8 createFromCharPointer(const CharPointer_UTF8 start, const CharPointer_UTF8 end)
Definition String.cpp:129
static StringHolder * bufferFromText(const CharPointer_UTF8 text) noexcept
Definition String.cpp:208
static CharPointer_UTF8 createFromCharPointer(const CharPointer text)
Definition String.cpp:76
CharPointer_UTF8::CharType CharType
Definition String.cpp:63
static void release(const CharPointer_UTF8 text) noexcept
Definition String.cpp:165
static CharPointer_UTF8 createUninitialisedBytes(size_t numBytes)
Definition String.cpp:66
StringHolder() WATER_DELETED_FUNCTION
static CharPointer_UTF8 createFromFixedLength(const char *const src, const size_t numChars)
Definition String.cpp:142
static void release(StringHolder *const b) noexcept
Definition String.cpp:158
CharType text[1]
Definition String.cpp:205
static void retain(const CharPointer_UTF8 text) noexcept
Definition String.cpp:150
String replaceSection(int startIndex, int numCharactersToReplace, StringRef stringToInsert) const
Definition String.cpp:1099
~String() noexcept
Definition String.cpp:221
String fromFirstOccurrenceOf(StringRef substringToStartFrom, bool includeSubStringInResult, bool ignoreCase) const
Definition String.cpp:1439
bool isQuotedString() const
Definition String.cpp:1487
static String charToString(water_uchar character)
Definition String.cpp:311
bool startsWithChar(water_uchar character) const noexcept
Definition String.cpp:1276
int indexOfAnyOf(StringRef charactersToLookFor, int startIndex=0, bool ignoreCase=false) const noexcept
Definition String.cpp:788
String trimEnd() const
Definition String.cpp:1572
String trimCharactersAtStart(StringRef charactersToTrim) const
Definition String.cpp:1586
int indexOfWholeWord(StringRef wordToLookFor) const noexcept
Definition String.cpp:931
String trimCharactersAtEnd(StringRef charactersToTrim) const
Definition String.cpp:1596
void append(const String &textToAppend, size_t maxCharsToTake)
Definition String.cpp:628
bool containsChar(water_uchar character) const noexcept
Definition String.cpp:921
static String toHexString(int number)
Definition String.cpp:1830
String upToFirstOccurrenceOf(StringRef substringToEndWith, bool includeSubStringInResult, bool ignoreCase) const
Definition String.cpp:1463
CharPointer_UTF8 toUTF8() const
Definition String.cpp:1906
size_t getByteOffsetOfEnd() const noexcept
Definition String.cpp:461
static String formatted(const String formatString,...)
Definition String.cpp:1747
bool equalsIgnoreCase(const String &other) const noexcept
Definition String.cpp:518
bool isNotEmpty() const noexcept
Definition String.h:244
size_t getNumBytesAsUTF8() const noexcept
Definition String.cpp:1956
bool containsWholeWord(StringRef wordToLookFor) const noexcept
Definition String.cpp:975
float getFloatValue() const noexcept
Definition String.cpp:1783
String retainCharacters(StringRef charactersToRetain) const
Definition String.cpp:1620
bool endsWithIgnoreCase(StringRef text) const noexcept
Definition String.cpp:1313
double getDoubleValue() const noexcept
Definition String.cpp:1784
int length() const noexcept
Definition String.cpp:451
String toUpperCase() const
Definition String.cpp:1331
int64 getLargeIntValue() const noexcept
Definition String.cpp:1782
String substring(int startIndex, int endIndex) const
Definition String.cpp:1373
bool endsWithChar(water_uchar character) const noexcept
Definition String.cpp:1284
String paddedLeft(water_uchar padCharacter, int minimumLength) const
Definition String.cpp:1042
static String createStringFromData(const void *data, int size)
Definition String.cpp:1721
String trimStart() const
Definition String.cpp:1559
bool containsWholeWordIgnoreCase(StringRef wordToLookFor) const noexcept
Definition String.cpp:980
int lastIndexOfAnyOf(StringRef charactersToLookFor, bool ignoreCase=false) const noexcept
Definition String.cpp:904
String & operator+=(const String &stringToAppend)
Definition String.cpp:665
String trim() const
Definition String.cpp:1540
static String repeatedString(StringRef stringToRepeat, int numberOfTimesToRepeat)
Definition String.cpp:1028
String quoted(water_uchar quoteCharacter='"') const
Definition String.cpp:1509
CharPointer_UTF8 text
Definition String.h:1095
String upToLastOccurrenceOf(StringRef substringToFind, bool includeSubStringInResult, bool ignoreCase) const
Definition String.cpp:1475
String unquoted() const
Definition String.cpp:1495
int getHexValue32() const noexcept
Definition String.cpp:1862
void appendCharPointer(const CharPointer_UTF8 startOfTextToAppend, const CharPointer_UTF8 endOfTextToAppend)
Definition String.cpp:639
String dropLastCharacters(int numberToDrop) const
Definition String.cpp:1429
bool endsWith(StringRef text) const noexcept
Definition String.cpp:1296
const char * toRawUTF8() const
Definition String.cpp:1925
String fromLastOccurrenceOf(StringRef substringToFind, bool includeSubStringInResult, bool ignoreCase) const
Definition String.cpp:1451
int indexOfIgnoreCase(StringRef textToLookFor) const noexcept
Definition String.cpp:813
int hashCode() const noexcept
Definition String.cpp:489
bool matchesWildcard(StringRef wildcard, bool ignoreCase) const noexcept
Definition String.cpp:1022
bool startsWithIgnoreCase(StringRef text) const noexcept
Definition String.cpp:1271
int getIntValue() const noexcept
Definition String.cpp:1781
bool startsWith(StringRef text) const noexcept
Definition String.cpp:1266
int compareNatural(StringRef other, bool isCaseSensitive=false) const noexcept
Definition String.cpp:622
String() noexcept
Definition String.cpp:217
void swapWith(String &other) noexcept
Definition String.cpp:231
String replace(StringRef stringToReplace, StringRef stringToInsertInstead, bool ignoreCase=false) const
Definition String.cpp:1159
bool containsNonWhitespaceChars() const noexcept
Definition String.cpp:1699
int lastIndexOfChar(water_uchar character) const noexcept
Definition String.cpp:776
int compare(const String &other) const noexcept
Definition String.cpp:524
void preallocateBytes(size_t numBytesNeeded)
Definition String.cpp:255
bool containsAnyOf(StringRef charactersItMightContain) const noexcept
Definition String.cpp:1690
String getLastCharacters(int numCharacters) const
Definition String.cpp:1434
int getTrailingIntValue() const noexcept
Definition String.cpp:1786
int64 hashCode64() const noexcept
Definition String.cpp:490
water_uchar getLastCharacter() const noexcept
Definition String.cpp:1368
String & operator=(const String &other) noexcept
Definition String.cpp:242
size_t copyToUTF8(CharPointer_UTF8::CharType *destBuffer, size_t maxBufferSizeBytes) const noexcept
Definition String.cpp:1950
bool containsOnly(StringRef charactersItMightContain) const noexcept
Definition String.cpp:1681
static String fromUTF8(const char *utf8buffer, int bufferSizeBytes=-1)
Definition String.cpp:1961
int compareIgnoreCase(const String &other) const noexcept
Definition String.cpp:526
int64 getHexValue64() const noexcept
Definition String.cpp:1863
int lastIndexOf(StringRef textToLookFor) const noexcept
Definition String.cpp:860
int lastIndexOfIgnoreCase(StringRef textToLookFor) const noexcept
Definition String.cpp:882
String toLowerCase() const
Definition String.cpp:1349
void clear() noexcept
Definition String.cpp:236
String replaceCharacters(StringRef charactersToReplace, StringRef charactersToInsertInstead) const
Definition String.cpp:1240
bool containsIgnoreCase(StringRef text) const noexcept
Definition String.cpp:926
int indexOf(StringRef textToLookFor) const noexcept
Definition String.cpp:808
int getReferenceCount() const noexcept
Definition String.cpp:260
String replaceCharacter(water_uchar characterToReplace, water_uchar characterToInsertInstead) const
Definition String.cpp:1217
bool isEmpty() const noexcept
Definition String.h:238
size_t hash() const noexcept
Definition String.cpp:491
bool contains(StringRef text) const noexcept
Definition String.cpp:916
int indexOfChar(water_uchar characterToLookFor) const noexcept
Definition String.cpp:751
String initialSectionContainingOnly(StringRef permittedCharacters) const
Definition String.cpp:1663
String removeCharacters(StringRef charactersToRemove) const
Definition String.cpp:1642
String initialSectionNotContaining(StringRef charactersToStopAt) const
Definition String.cpp:1672
String paddedRight(water_uchar padCharacter, int minimumLength) const
Definition String.cpp:1069
CharPointer_UTF8 getCharPointer() const noexcept
Definition String.h:982
int indexOfWholeWordIgnoreCase(StringRef wordToLookFor) const noexcept
Definition String.cpp:953
water_uchar operator[](int index) const noexcept
Definition String.cpp:466
std::string toStdString() const
Definition String.cpp:1930
Definition StringRef.h:67
int length() const noexcept
Definition StringRef.h:103
CharPointer_UTF8 text
Definition StringRef.h:120
StringRef() noexcept
Definition String.cpp:2029
* e
Definition inflate.c:1404
struct huft * t
Definition inflate.c:943
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
static void c2(register WDL_FFT_COMPLEX *a)
Definition fft.c:270
virtual ASIOError start()=0
JSAMPIMAGE data
Definition jpeglib.h:945
#define wassert(expression)
#define WATER_DELETED_FUNCTION
Definition String.cpp:322
static char * doubleToString(char *buffer, const int numChars, double n, int numDecPlaces, size_t &len) noexcept
Definition String.cpp:384
static char * numberToString(char *t, uint64 v) noexcept
Definition String.cpp:323
static char * printDigits(char *t, Type v) noexcept
Definition water.h:127
static CharPointer_UTF8 createFromInteger(const IntegerType number)
Definition String.cpp:418
static CharPointer_UTF8 createFromDouble(const double number, const int numberOfDecimalPlaces)
Definition String.cpp:426
@ charsNeededForDouble
Definition water.h:122
@ charsNeededForInt
Definition water.h:121
Definition String.cpp:694
String & operationAddAssign(String &str, const T number)
Definition String.cpp:696
Definition AudioSampleBuffer.h:33
int getAddressDifference(Type1 *pointer1, Type2 *pointer2) noexcept
Definition Memory.h:62
bool operator<=(const String &s1, const String &s2) noexcept
Definition String.cpp:505
static String getStringFromWindows1252Codepage(const char *data, size_t num)
Definition String.cpp:1709
bool operator==(const ReferenceCountedObjectPtr< ReferenceCountedObjectClass > &object1, ReferenceCountedObjectClass *const object2) noexcept
Definition ReferenceCountedObject.h:359
static int naturalStringCompare(CharPointer_UTF8 s1, CharPointer_UTF8 s2, bool isCaseSensitive) noexcept
Definition String.cpp:567
bool operator<(const String &s1, const String &s2) noexcept
Definition String.cpp:503
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
unsigned long long uint64
Definition water.h:102
String & operator+=(String &s1, const NewLine &)
Definition NewLine.h:71
static CharPointer_UTF8 findTrimmedEnd(const CharPointer_UTF8 start, CharPointer_UTF8 end)
Definition String.cpp:1526
static String hexToString(Type v)
Definition String.cpp:1812
String operator+(const NewLine &, const NewLine &)
Definition NewLine.h:73
static int stringCompareRight(CharPointer_UTF8 s1, CharPointer_UTF8 s2) noexcept
Definition String.cpp:528
OutputStream & operator<<(OutputStream &stream, const MemoryOutputStream &streamToRead)
Definition MemoryOutputStream.cpp:194
static const water_uchar emptyChar
Definition String.cpp:1866
void zeromem(void *memory, size_t numBytes) noexcept
Definition Memory.h:37
static int stringCompareLeft(CharPointer_UTF8 s1, CharPointer_UTF8 s2) noexcept
Definition String.cpp:549
long long int64
Definition water.h:100
unsigned char uint8
Definition water.h:90
static size_t findByteOffsetOfEnd(CharPointer_UTF8 text) noexcept
Definition String.cpp:456
bool operator!=(const ReferenceCountedObjectPtr< ReferenceCountedObjectClass > &object1, const ReferenceCountedObjectClass *object2) noexcept
Definition ReferenceCountedObject.h:380
bool operator>(const String &s1, const String &s2) noexcept
Definition String.cpp:502
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
static const char hexDigits[]
Definition String.cpp:1809
Type * addBytesToPointer(Type *basePointer, IntegerType bytes) noexcept
Definition Memory.h:56
size_t numElementsInArray(Type(&array)[N])
Definition MathsFunctions.h:257
static const EmptyString emptyString
Definition String.cpp:55
uint32 water_uchar
Definition CharacterFunctions.h:38
bool operator>=(const String &s1, const String &s2) noexcept
Definition String.cpp:504
png_uint_32 length
Definition png.c:2247
short word
Definition private.h:22
static int test(SerdEnv *env, bool top_level, bool pretty_numbers)
Definition sratom_test.c:79
Definition CharacterFunctions.h:268
static ResultType parse(CharPointerType t) noexcept
Definition CharacterFunctions.h:270
CharPointer_UTF8::CharType text
Definition String.cpp:52
int refCount
Definition String.cpp:50
size_t allocatedBytes
Definition String.cpp:51
Definition String.cpp:474
static Type calculate(CharPointer t) noexcept
Definition String.cpp:476
Definition String.cpp:361
size_t writeDouble(double n, int numDecPlaces)
Definition String.cpp:369
StackArrayStream(char *d)
Definition String.cpp:362
PreallocationBytes(size_t) noexcept
Definition String.cpp:248
size_t numBytes
Definition String.h:1101
Definition String.cpp:1938
static size_t copyToBuffer(const CharPointerType_Src source, typename CharPointerType_Dest::CharType *const buffer, const size_t maxBufferSizeBytes)
Definition String.cpp:1939
static CharPointer_UTF8 convert(const String &source) noexcept
Definition String.cpp:1903
Definition String.cpp:1870
static CharPointerType_Dest convert(const String &s)
Definition String.cpp:1871
Definition String.cpp:988
static bool matches(CharPointer wildcard, CharPointer test, const bool ignoreCase) noexcept
Definition String.cpp:989
static bool matchesAnywhere(const CharPointer wildcard, CharPointer test, const bool ignoreCase) noexcept
Definition String.cpp:1012
static bool characterMatches(const water_uchar wc, const water_uchar tc, const bool ignoreCase) noexcept
Definition String.cpp:1006
const char * text
Definition swell-functions.h:167
int n
Definition crypt.c:458
return c
Definition crypt.c:175
memcpy(hh, h, RAND_HEAD_LEN)
int result
Definition process.c:1455
typedef int(UZ_EXP MsgFn)()
#define const
Definition zconf.h:137