JUCE-7.0.12-0-g4f43011b96 JUCE-7.0.12-0-g4f43011b96
JUCE — C++ application framework with suport for VST, VST3, LV2 audio plug-ins

« « « Anklang Documentation
Loading...
Searching...
No Matches
juce_CharPointer_UTF32.h
Go to the documentation of this file.
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
23namespace juce
24{
25
26//==============================================================================
35{
36public:
37 using CharType = juce_wchar;
38
39 inline explicit CharPointer_UTF32 (const CharType* rawPointer) noexcept
40 : data (const_cast<CharType*> (rawPointer))
41 {
42 }
43
44 inline CharPointer_UTF32 (const CharPointer_UTF32& other) = default;
45
46 inline CharPointer_UTF32 operator= (CharPointer_UTF32 other) noexcept
47 {
48 data = other.data;
49 return *this;
50 }
51
52 inline CharPointer_UTF32 operator= (const CharType* text) noexcept
53 {
54 data = const_cast<CharType*> (text);
55 return *this;
56 }
57
59 inline bool operator== (CharPointer_UTF32 other) const noexcept { return data == other.data; }
60 inline bool operator!= (CharPointer_UTF32 other) const noexcept { return data != other.data; }
61 inline bool operator<= (CharPointer_UTF32 other) const noexcept { return data <= other.data; }
62 inline bool operator< (CharPointer_UTF32 other) const noexcept { return data < other.data; }
63 inline bool operator>= (CharPointer_UTF32 other) const noexcept { return data >= other.data; }
64 inline bool operator> (CharPointer_UTF32 other) const noexcept { return data > other.data; }
65
67 inline CharType* getAddress() const noexcept { return data; }
68
70 inline operator const CharType*() const noexcept { return data; }
71
73 inline bool isEmpty() const noexcept { return *data == 0; }
74
76 inline bool isNotEmpty() const noexcept { return *data != 0; }
77
79 inline juce_wchar operator*() const noexcept { return *data; }
80
82 inline CharPointer_UTF32 operator++() noexcept
83 {
84 ++data;
85 return *this;
86 }
87
89 inline CharPointer_UTF32 operator--() noexcept
90 {
91 --data;
92 return *this;
93 }
94
97 inline juce_wchar getAndAdvance() noexcept { return *data++; }
98
101 {
102 auto temp (*this);
103 ++data;
104 return temp;
105 }
106
108 inline void operator+= (int numToSkip) noexcept
109 {
110 data += numToSkip;
111 }
112
113 inline void operator-= (int numToSkip) noexcept
114 {
115 data -= numToSkip;
116 }
117
119 inline juce_wchar& operator[] (int characterIndex) const noexcept
120 {
121 return data [characterIndex];
122 }
123
126 {
127 return CharPointer_UTF32 (data + numToSkip);
128 }
129
132 {
133 return CharPointer_UTF32 (data - numToSkip);
134 }
135
137 inline void write (juce_wchar charToWrite) noexcept
138 {
139 *data++ = charToWrite;
140 }
141
142 inline void replaceChar (juce_wchar newChar) noexcept
143 {
144 *data = newChar;
145 }
146
148 inline void writeNull() const noexcept
149 {
150 *data = 0;
151 }
152
154 size_t length() const noexcept
155 {
156 #if JUCE_NATIVE_WCHAR_IS_UTF32 && ! JUCE_ANDROID
157 return wcslen (data);
158 #else
159 size_t n = 0;
160 while (data[n] != 0)
161 ++n;
162 return n;
163 #endif
164 }
165
167 size_t lengthUpTo (size_t maxCharsToCount) const noexcept
168 {
170 }
171
173 size_t lengthUpTo (CharPointer_UTF32 end) const noexcept
174 {
175 return CharacterFunctions::lengthUpTo (*this, end);
176 }
177
181 size_t sizeInBytes() const noexcept
182 {
183 return sizeof (CharType) * (length() + 1);
184 }
185
189 static size_t getBytesRequiredFor (juce_wchar) noexcept
190 {
191 return sizeof (CharType);
192 }
193
198 template <class CharPointer>
199 static size_t getBytesRequiredFor (CharPointer text) noexcept
200 {
201 return sizeof (CharType) * text.length();
202 }
203
206 {
207 return CharPointer_UTF32 (data + length());
208 }
209
211 template <typename CharPointer>
212 void writeAll (CharPointer src) noexcept
213 {
214 CharacterFunctions::copyAll (*this, src);
215 }
216
218 void writeAll (CharPointer_UTF32 src) noexcept
219 {
220 auto* s = src.data;
221
222 while ((*data = *s) != 0)
223 {
224 ++data;
225 ++s;
226 }
227 }
228
233 template <typename CharPointer>
234 size_t writeWithDestByteLimit (CharPointer src, size_t maxDestBytes) noexcept
235 {
237 }
238
243 template <typename CharPointer>
244 void writeWithCharLimit (CharPointer src, int maxChars) noexcept
245 {
246 CharacterFunctions::copyWithCharLimit (*this, src, maxChars);
247 }
248
250 template <typename CharPointer>
251 int compare (CharPointer other) const noexcept
252 {
253 return CharacterFunctions::compare (*this, other);
254 }
255
256 #if JUCE_NATIVE_WCHAR_IS_UTF32 && ! JUCE_ANDROID
258 int compare (CharPointer_UTF32 other) const noexcept
259 {
260 return wcscmp (data, other.data);
261 }
262 #endif
263
265 template <typename CharPointer>
266 int compareUpTo (CharPointer other, int maxChars) const noexcept
267 {
268 return CharacterFunctions::compareUpTo (*this, other, maxChars);
269 }
270
272 template <typename CharPointer>
277
279 template <typename CharPointer>
280 int compareIgnoreCaseUpTo (CharPointer other, int maxChars) const noexcept
281 {
282 return CharacterFunctions::compareIgnoreCaseUpTo (*this, other, maxChars);
283 }
284
286 template <typename CharPointer>
287 int indexOf (CharPointer stringToFind) const noexcept
288 {
290 }
291
293 int indexOf (juce_wchar charToFind) const noexcept
294 {
295 int i = 0;
296
297 while (data[i] != 0)
298 {
299 if (data[i] == charToFind)
300 return i;
301
302 ++i;
303 }
304
305 return -1;
306 }
307
309 int indexOf (juce_wchar charToFind, bool ignoreCase) const noexcept
310 {
311 return ignoreCase ? CharacterFunctions::indexOfCharIgnoreCase (*this, charToFind)
313 }
314
316 bool isWhitespace() const { return CharacterFunctions::isWhitespace (*data) != 0; }
318 bool isDigit() const { return CharacterFunctions::isDigit (*data) != 0; }
320 bool isLetter() const { return CharacterFunctions::isLetter (*data) != 0; }
322 bool isLetterOrDigit() const { return CharacterFunctions::isLetterOrDigit (*data) != 0; }
324 bool isUpperCase() const { return CharacterFunctions::isUpperCase (*data) != 0; }
326 bool isLowerCase() const { return CharacterFunctions::isLowerCase (*data) != 0; }
327
332
334 int getIntValue32() const noexcept { return CharacterFunctions::getIntValue <int, CharPointer_UTF32> (*this); }
336 int64 getIntValue64() const noexcept { return CharacterFunctions::getIntValue <int64, CharPointer_UTF32> (*this); }
337
339 double getDoubleValue() const noexcept { return CharacterFunctions::getDoubleValue (*this); }
340
343
346
348 static bool canRepresent (juce_wchar character) noexcept
349 {
350 return ((uint32) character) < (uint32) 0x10ffff;
351 }
352
354 static bool isValidString (const CharType* dataToTest, int maxBytesToRead)
355 {
356 maxBytesToRead /= (int) sizeof (CharType);
357
358 while (--maxBytesToRead >= 0 && *dataToTest != 0)
359 if (! canRepresent (*dataToTest++))
360 return false;
361
362 return true;
363 }
364
367 {
368 return CharPointer_UTF32 (reinterpret_cast<Atomic<CharType*>&> (data).exchange (newValue.data));
369 }
370
371private:
372 CharType* data;
373};
374
375} // namespace juce
Wraps a pointer to a null-terminated UTF-32 character string, and provides various methods to operate...
void writeNull() const noexcept
Writes a null character to this string (leaving the pointer's position unchanged).
static bool isValidString(const CharType *dataToTest, int maxBytesToRead)
Returns true if this data contains a valid string in this encoding.
void write(juce_wchar charToWrite) noexcept
Writes a unicode character to this string, and advances this pointer to point to the next position.
CharPointer_UTF32 operator++() noexcept
Moves this pointer along to the next character in the string.
CharPointer_UTF32 atomicSwap(CharPointer_UTF32 newValue)
Atomically swaps this pointer for a new value, returning the previous value.
bool operator==(CharPointer_UTF32 other) const noexcept
This is a pointer comparison, it doesn't compare the actual text.
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 compareIgnoreCase(CharPointer other) const
Compares this string with another one.
void operator+=(int numToSkip) noexcept
Moves this pointer forwards by the specified number of characters.
CharPointer_UTF32 operator--() noexcept
Moves this pointer to the previous character in the string.
CharPointer_UTF32 findTerminatingNull() const noexcept
Returns a pointer to the null character that terminates this string.
int64 getIntValue64() const noexcept
Parses this string as a 64-bit integer.
size_t writeWithDestByteLimit(CharPointer src, size_t maxDestBytes) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
juce_wchar & operator[](int characterIndex) const noexcept
Returns the character at a given character index from the start of the string.
int indexOf(CharPointer stringToFind) const noexcept
Returns the character index of a substring, or -1 if it isn't found.
juce_wchar toLowerCase() const noexcept
Returns a lower-case version of the first character of this string.
void writeAll(CharPointer_UTF32 src) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
CharType * getAddress() const noexcept
Returns the address that this pointer is pointing to.
void writeWithCharLimit(CharPointer src, int maxChars) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
bool isEmpty() const noexcept
Returns true if this pointer is pointing to a null character.
bool isNotEmpty() const noexcept
Returns true if this pointer is not pointing to a null character.
size_t sizeInBytes() const noexcept
Returns the number of bytes that are used to represent this string.
CharPointer_UTF32 findEndOfWhitespace() const noexcept
Returns the first non-whitespace character in the string.
void incrementToEndOfWhitespace() noexcept
Move this pointer to the first non-whitespace character in the string.
size_t lengthUpTo(CharPointer_UTF32 end) const noexcept
Returns the number of characters in this string, or up to the given end pointer, whichever is lower.
size_t length() const noexcept
Returns the number of characters in this string.
bool isUpperCase() const
Returns true if the first character of this string is upper-case.
CharPointer_UTF32 operator+(int numToSkip) const noexcept
Returns a pointer which is moved forwards from this one by the specified number of characters.
bool isLetterOrDigit() const
Returns true if the first character of this string is a letter or digit.
juce_wchar toUpperCase() const noexcept
Returns an upper-case version of the first character of this string.
int getIntValue32() const noexcept
Parses this string as a 32-bit integer.
static bool canRepresent(juce_wchar character) noexcept
Returns true if the given unicode character can be represented in this encoding.
int indexOf(juce_wchar charToFind) const noexcept
Returns the character index of a unicode character, or -1 if it isn't found.
bool isDigit() const
Returns true if the first character of this string is a digit.
static size_t getBytesRequiredFor(juce_wchar) noexcept
Returns the number of bytes that would be needed to represent the given unicode character in this enc...
size_t lengthUpTo(size_t maxCharsToCount) const noexcept
Returns the number of characters in this string, or the given value, whichever is lower.
int compare(CharPointer other) const noexcept
Compares this string with another one.
int compareIgnoreCaseUpTo(CharPointer other, int maxChars) const noexcept
Compares this string with another one, up to a specified number of characters.
juce_wchar getAndAdvance() noexcept
Returns the character that this pointer is currently pointing to, and then advances the pointer to po...
bool isWhitespace() const
Returns true if the first character of this string is whitespace.
juce_wchar operator*() const noexcept
Returns the unicode character that this pointer is pointing to.
bool isLowerCase() const
Returns true if the first character of this string is lower-case.
int indexOf(juce_wchar charToFind, bool ignoreCase) const noexcept
Returns the character index of a unicode character, or -1 if it isn't found.
CharPointer_UTF32 operator-(int numToSkip) const noexcept
Returns a pointer which is moved backwards from this one by the specified number of characters.
int compareUpTo(CharPointer other, int maxChars) const noexcept
Compares this string with another one, up to a specified number of characters.
bool isLetter() const
Returns true if the first character of this string is a letter.
double getDoubleValue() const noexcept
Parses this string as a floating point double.
void writeAll(CharPointer src) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
static void incrementToEndOfWhitespace(Type &text) noexcept
Increments a pointer until it points to the first non-whitespace character in a string.
static int compare(juce_wchar char1, juce_wchar char2) noexcept
Compares two characters.
static juce_wchar toLowerCase(juce_wchar character) noexcept
Converts a character to lower-case.
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.
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.
static bool isDigit(char character) noexcept
Checks whether a character is a digit.
static int compareIgnoreCaseUpTo(CharPointerType1 s1, CharPointerType2 s2, int maxChars) noexcept
Compares two null-terminated character strings, using a case-independent match.
static int indexOfChar(Type text, const juce_wchar charToFind) noexcept
Finds the character index of a given character in another string.
static int compareIgnoreCase(juce_wchar char1, juce_wchar char2) noexcept
Compares two characters, using a case-independant match.
static bool isLowerCase(juce_wchar character) noexcept
Checks whether a unicode character is lower-case.
static bool isLetter(char character) noexcept
Checks whether a character is alphabetic.
static int indexOf(CharPointerType1 textToSearch, const CharPointerType2 substringToLookFor) noexcept
Finds the character index of a given substring in another string.
static bool isWhitespace(char character) noexcept
Checks whether a character is whitespace.
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.
static Type findEndOfWhitespace(Type text) noexcept
Returns a pointer to the first non-whitespace character in a string.
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...
static bool isLetterOrDigit(char character) noexcept
Checks whether a character is alphabetic or numeric.
static juce_wchar toUpperCase(juce_wchar character) noexcept
Converts a character to upper-case.
static bool isUpperCase(juce_wchar character) noexcept
Checks whether a unicode character is upper-case.
static double getDoubleValue(CharPointerType text) noexcept
Parses a character string, to read a floating-point value.
static void copyAll(DestCharPointerType &dest, SrcCharPointerType src) noexcept
Copies null-terminated characters from one string to another.
static int compareUpTo(CharPointerType1 s1, CharPointerType2 s2, int maxChars) noexcept
Compares two null-terminated character strings, up to a given number of characters.
typedef int
JUCE Namespace.
wchar_t juce_wchar
A platform-independent 32-bit unicode character type.
RangedDirectoryIterator end(const RangedDirectoryIterator &)
Returns a default-constructed sentinel value.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
Definition juce_Memory.h:88
unsigned int uint32
A platform-independent 32-bit unsigned integer type.
long long int64
A platform-independent 64-bit integer type.
A simple wrapper around std::atomic.
Definition juce_Atomic.h:42
wcscmp
wcslen