OpenShot Library | libopenshot-audio
0.2.0
|
41 using CharType = char;
44 : data (
const_cast<CharType*
> (rawPointer))
58 data =
const_cast<CharType*
> (text);
64 inline bool operator!= (
CharPointer_UTF8 other)
const noexcept {
return data != other.data; }
65 inline bool operator<= (CharPointer_UTF8 other)
const noexcept {
return data <= other.data; }
66 inline bool operator< (CharPointer_UTF8 other)
const noexcept {
return data < other.data; }
67 inline bool operator>= (CharPointer_UTF8 other)
const noexcept {
return data >= other.data; }
68 inline bool operator> (CharPointer_UTF8 other)
const noexcept {
return data > other.data; }
71 inline CharType*
getAddress() const noexcept {
return data; }
74 inline operator const CharType*()
const noexcept {
return data; }
77 inline bool isEmpty() const noexcept {
return *data == 0; }
80 inline bool isNotEmpty() const noexcept {
return *data != 0; }
85 auto byte = (
signed char) *data;
88 return (juce_wchar) (uint8)
byte;
90 uint32 n = (uint32) (uint8) byte;
93 int numExtraValues = 0;
95 while ((n & bit) != 0 && bit > 0x8)
104 for (
int i = 1; i <= numExtraValues; ++i)
106 auto nextByte = (uint32) (uint8) data[i];
108 if ((nextByte & 0xc0) != 0x80)
112 n |= (nextByte & 0x3f);
115 return (juce_wchar) n;
121 jassert (*data != 0);
122 auto n = (
signed char) *data++;
128 while ((
static_cast<uint8
> (n) & bit) != 0 && bit > 0x8)
143 while ((*--data & 0xc0) == 0x80 && ++count < 4)
153 auto byte = (
signed char) *data++;
156 return (juce_wchar) (uint8)
byte;
158 uint32 n = (uint32) (uint8) byte;
161 int numExtraValues = 0;
163 while ((n & bit) != 0 && bit > 0x8)
172 while (--numExtraValues >= 0)
174 auto nextByte = (uint32) (uint8) *data;
176 if ((nextByte & 0xc0) != 0x80)
181 n |= (nextByte & 0x3f);
184 return (juce_wchar) n;
200 while (++numToSkip <= 0)
205 while (--numToSkip >= 0)
248 auto n = (uint32) (uint8) *d++;
252 while ((*d & 0xc0) == 0x80)
265 size_t lengthUpTo (
const size_t maxCharsToCount)
const noexcept
281 jassert (data !=
nullptr);
282 return strlen (data) + 1;
291 auto c = (uint32) charToWrite;
311 template <
class CharPo
inter>
316 while (
auto n = text.getAndAdvance())
329 void write (
const juce_wchar charToWrite) noexcept
331 auto c = (uint32) charToWrite;
335 int numExtraBytes = 1;
343 *data++ = (CharType) ((uint32) (0xff << (7 - numExtraBytes)) | (c >> (numExtraBytes * 6)));
345 while (--numExtraBytes >= 0)
346 *data++ = (CharType) (0x80 | (0x3f & (c >> (numExtraBytes * 6))));
350 *data++ = (CharType) c;
361 template <
typename CharPo
inter>
372 while ((*data = *s) != 0)
383 template <
typename CharPo
inter>
393 template <
typename CharPo
inter>
400 template <
typename CharPo
inter>
401 int compare (
const CharPointer other)
const noexcept
407 template <
typename CharPo
inter>
408 int compareUpTo (
const CharPointer other,
const int maxChars)
const noexcept
414 template <
typename CharPo
inter>
427 template <
typename CharPo
inter>
434 template <
typename CharPo
inter>
435 int indexOf (
const CharPointer stringToFind)
const noexcept
441 int indexOf (
const juce_wchar charToFind)
const noexcept
447 int indexOf (
const juce_wchar charToFind,
const bool ignoreCase)
const noexcept
454 bool isWhitespace() const noexcept {
const CharType c = *data;
return c ==
' ' || (c <= 13 && c >= 9); }
456 bool isDigit() const noexcept {
const CharType c = *data;
return c >=
'0' && c <=
'9'; }
477 #if JUCE_WINDOWS && ! JUCE_MINGW
478 return _atoi64 (data);
493 return ((uint32) character) < (uint32) 0x10ffff;
499 while (--maxBytesToRead >= 0 && *dataToTest != 0)
501 auto byte = (
signed char) *dataToTest++;
506 int numExtraValues = 0;
508 while ((
byte & bit) != 0)
516 if (bit == 8 && (numExtraValues > maxBytesToRead
521 if (numExtraValues == 0)
524 maxBytesToRead -= numExtraValues;
525 if (maxBytesToRead < 0)
528 while (--numExtraValues >= 0)
529 if ((*dataToTest++ & 0xc0) != 0x80)
546 byteOrderMark1 = 0xef,
547 byteOrderMark2 = 0xbb,
548 byteOrderMark3 = 0xbf
556 jassert (possibleByteOrder !=
nullptr);
557 auto c =
static_cast<const uint8*
> (possibleByteOrder);
559 return c[0] == (uint8) byteOrderMark1
560 && c[1] == (uint8) byteOrderMark2
561 && c[2] == (uint8) byteOrderMark3;
size_t length() const noexcept
Returns the number of characters in this string.
void operator+=(int numToSkip) noexcept
Moves this pointer forwards by the specified number of characters.
static bool isLowerCase(juce_wchar character) noexcept
Checks whether a unicode character is lower-case.
CharPointer_UTF8 operator-(int numToSkip) const noexcept
Returns a pointer which is moved backwards from this one by the specified number of characters.
bool operator==(CharPointer_UTF8 other) const noexcept
This is a pointer comparison, it doesn't compare the actual text.
A simple wrapper around std::atomic.
CharType * getAddress() const noexcept
Returns the address that this pointer is pointing to.
juce_wchar toLowerCase() const noexcept
Returns a lower-case version of the first character of this string.
static bool isLetter(char character) noexcept
Checks whether a character is alphabetic.
juce_wchar operator*() const noexcept
Returns the unicode character that this pointer is pointing to.
void writeWithCharLimit(const CharPointer src, const int maxChars) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
juce_wchar toUpperCase() const noexcept
Returns an upper-case version of the first character of this string.
static bool isByteOrderMark(const void *possibleByteOrder) noexcept
Returns true if the first three bytes in this pointer are the UTF8 byte-order mark (BOM).
int compareUpTo(const CharPointer other, const int maxChars) const noexcept
Compares this string with another one, up to a specified number of characters.
CharPointer_UTF8 atomicSwap(const CharPointer_UTF8 newValue)
Atomically swaps this pointer for a new value, returning the previous value.
static int compareUpTo(CharPointerType1 s1, CharPointerType2 s2, int maxChars) noexcept
Compares two null-terminated character strings, up to a given number of characters.
bool isEmpty() const noexcept
Returns true if this pointer is pointing to a null character.
size_t lengthUpTo(const size_t maxCharsToCount) const noexcept
Returns the number of characters in this string, or the given value, whichever is lower.
static size_t getBytesRequiredFor(CharPointer text) noexcept
Returns the number of bytes that would be needed to represent the given string in this encoding forma...
int compare(const CharPointer other) const noexcept
Compares this string with another one.
static bool isUpperCase(juce_wchar character) noexcept
Checks whether a unicode character is upper-case.
static int compareIgnoreCaseUpTo(CharPointerType1 s1, CharPointerType2 s2, int maxChars) noexcept
Compares two null-terminated character strings, using a case-independent match.
double getDoubleValue() const noexcept
Parses this string as a floating point double.
CharPointer_UTF8 operator--() noexcept
Moves this pointer back to the previous character in the string.
int getIntValue32() const noexcept
Parses this string as a 32-bit integer.
void writeAll(const CharPointer src) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
static void copyWithCharLimit(DestCharPointerType &dest, SrcCharPointerType src, int maxChars) noexcept
Copies characters from one string to another, up to a null terminator or a given maximum number of ch...
int compareIgnoreCaseUpTo(const CharPointer other, const int maxChars) const noexcept
Compares this string with another one, up to a specified number of characters.
CharPointer_UTF8 findTerminatingNull() const noexcept
Returns a pointer to the null character that terminates this string.
int indexOf(const CharPointer stringToFind) const noexcept
Returns the character index of a substring, or -1 if it isn't found.
static Type findEndOfWhitespace(Type text) noexcept
Returns a pointer to the first non-whitespace character in a string.
CharPointer_UTF8 & operator++() noexcept
Moves this pointer along to the next character in the string.
bool isLetterOrDigit() const noexcept
Returns true if the first character of this string is a letter or digit.
static bool canRepresent(juce_wchar character) noexcept
Returns true if the given unicode character can be represented in this encoding.
juce_wchar operator[](int characterIndex) const noexcept
Returns the character at a given character index from the start of the string.
void operator-=(int numToSkip) noexcept
Moves this pointer backwards by the specified number of characters.
CharPointer_UTF8 findEndOfWhitespace() const noexcept
Returns the first non-whitespace character in the string.
static int indexOf(CharPointerType1 textToSearch, const CharPointerType2 substringToLookFor) noexcept
Finds the character index of a given substring in another string.
int compareIgnoreCase(const CharPointer_UTF8 other) const noexcept
Compares this string with another one.
size_t writeWithDestByteLimit(const CharPointer src, const size_t maxDestBytes) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
static void copyAll(DestCharPointerType &dest, SrcCharPointerType src) noexcept
Copies null-terminated characters from one string to another.
int64 getIntValue64() const noexcept
Parses this string as a 64-bit integer.
int indexOf(const juce_wchar charToFind, const bool ignoreCase) const noexcept
Returns the character index of a unicode character, or -1 if it isn't found.
bool isDigit() const noexcept
Returns true if the first character of this string is a digit.
static int compare(juce_wchar char1, juce_wchar char2) noexcept
Compares two characters.
size_t sizeInBytes() const noexcept
Returns the number of bytes that are used to represent this string.
static bool isLetterOrDigit(char character) noexcept
Checks whether a character is alphabetic or numeric.
bool isLowerCase() const noexcept
Returns true if the first character of this string is lower-case.
bool isLetter() const noexcept
Returns true if the first character of this string is a letter.
static int indexOfChar(Type text, const juce_wchar charToFind) noexcept
Finds the character index of a given character in another string.
Wraps a pointer to a null-terminated UTF-8 character string, and provides various methods to operate ...
static bool isValidString(const CharType *dataToTest, int maxBytesToRead)
Returns true if this data contains a valid string in this encoding.
CharPointer_UTF8 operator+(int numToSkip) const noexcept
Returns a pointer which is moved forwards from this one by the specified number of characters.
static size_t copyWithDestByteLimit(DestCharPointerType &dest, SrcCharPointerType src, size_t maxBytesToWrite) noexcept
Copies characters from one string to another, up to a null terminator or a given byte size limit.
bool isWhitespace() const noexcept
Returns true if the first character of this string is whitespace.
static int indexOfCharIgnoreCase(Type text, juce_wchar charToFind) noexcept
Finds the character index of a given character in another string, using a case-independent match.
bool isUpperCase() const noexcept
Returns true if the first character of this string is upper-case.
void writeAll(const CharPointer_UTF8 src) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
size_t lengthUpTo(const CharPointer_UTF8 end) const noexcept
Returns the number of characters in this string, or up to the given end pointer, whichever is lower.
int indexOf(const juce_wchar charToFind) const noexcept
Returns the character index of a unicode character, or -1 if it isn't found.
void write(const juce_wchar charToWrite) noexcept
Writes a unicode character to this string, and advances this pointer to point to the next position.
juce_wchar getAndAdvance() noexcept
Returns the character that this pointer is currently pointing to, and then advances the pointer to po...
static int compareIgnoreCase(juce_wchar char1, juce_wchar char2) noexcept
Compares two characters, using a case-independant match.
static size_t getBytesRequiredFor(const juce_wchar charToWrite) noexcept
Returns the number of bytes that would be needed to represent the given unicode character in this enc...
static size_t lengthUpTo(CharPointerType text, const size_t maxCharsToCount) noexcept
Counts the number of characters in a given string, stopping if the count exceeds a specified limit.
void writeNull() const noexcept
Writes a null character to this string (leaving the pointer's position unchanged).
static double getDoubleValue(CharPointerType text) noexcept
Parses a character string, to read a floating-point value.
static juce_wchar toUpperCase(juce_wchar character) noexcept
Converts a character to upper-case.
bool isNotEmpty() const noexcept
Returns true if this pointer is not pointing to a null character.
static juce_wchar toLowerCase(juce_wchar character) noexcept
Converts a character to lower-case.
int compareIgnoreCase(const CharPointer other) const noexcept
Compares this string with another one.