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_ASCII.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//==============================================================================
38{
39public:
40 using CharType = char;
41
42 inline explicit CharPointer_ASCII (const CharType* rawPointer) noexcept
43 : data (const_cast<CharType*> (rawPointer))
44 {
45 }
46
47 inline CharPointer_ASCII (const CharPointer_ASCII& other) = default;
48
49 inline CharPointer_ASCII operator= (const CharPointer_ASCII other) noexcept
50 {
51 data = other.data;
52 return *this;
53 }
54
55 inline CharPointer_ASCII operator= (const CharType* text) noexcept
56 {
57 data = const_cast<CharType*> (text);
58 return *this;
59 }
60
62 inline bool operator== (CharPointer_ASCII other) const noexcept { return data == other.data; }
63 inline bool operator!= (CharPointer_ASCII other) const noexcept { return data != other.data; }
64 inline bool operator<= (CharPointer_ASCII other) const noexcept { return data <= other.data; }
65 inline bool operator< (CharPointer_ASCII other) const noexcept { return data < other.data; }
66 inline bool operator>= (CharPointer_ASCII other) const noexcept { return data >= other.data; }
67 inline bool operator> (CharPointer_ASCII other) const noexcept { return data > other.data; }
68
70 inline CharType* getAddress() const noexcept { return data; }
71
73 inline operator const CharType*() const noexcept { return data; }
74
76 inline bool isEmpty() const noexcept { return *data == 0; }
77
79 inline bool isNotEmpty() const noexcept { return *data != 0; }
80
82 inline juce_wchar operator*() const noexcept { return (juce_wchar) (uint8) *data; }
83
85 inline CharPointer_ASCII operator++() noexcept
86 {
87 ++data;
88 return *this;
89 }
90
92 inline CharPointer_ASCII operator--() noexcept
93 {
94 --data;
95 return *this;
96 }
97
100 inline juce_wchar getAndAdvance() noexcept { return (juce_wchar) (uint8) *data++; }
101
104 {
105 auto temp (*this);
106 ++data;
107 return temp;
108 }
109
111 inline void operator+= (const int numToSkip) noexcept
112 {
113 data += numToSkip;
114 }
115
116 inline void operator-= (const int numToSkip) noexcept
117 {
118 data -= numToSkip;
119 }
120
122 inline juce_wchar operator[] (const int characterIndex) const noexcept
123 {
124 return (juce_wchar) (uint8) data [characterIndex];
125 }
126
128 CharPointer_ASCII operator+ (const int numToSkip) const noexcept
129 {
130 return CharPointer_ASCII (data + numToSkip);
131 }
132
134 CharPointer_ASCII operator- (const int numToSkip) const noexcept
135 {
136 return CharPointer_ASCII (data - numToSkip);
137 }
138
140 inline void write (const juce_wchar charToWrite) noexcept
141 {
142 *data++ = (char) charToWrite;
143 }
144
145 inline void replaceChar (const juce_wchar newChar) noexcept
146 {
147 *data = (char) newChar;
148 }
149
151 inline void writeNull() const noexcept
152 {
153 *data = 0;
154 }
155
157 size_t length() const noexcept
158 {
159 return (size_t) strlen (data);
160 }
161
163 size_t lengthUpTo (const size_t maxCharsToCount) const noexcept
164 {
166 }
167
169 size_t lengthUpTo (const CharPointer_ASCII end) const noexcept
170 {
171 return CharacterFunctions::lengthUpTo (*this, end);
172 }
173
177 size_t sizeInBytes() const noexcept
178 {
179 return length() + 1;
180 }
181
185 static size_t getBytesRequiredFor (const juce_wchar) noexcept
186 {
187 return 1;
188 }
189
194 template <class CharPointer>
195 static size_t getBytesRequiredFor (const CharPointer text) noexcept
196 {
197 return text.length();
198 }
199
202 {
203 return CharPointer_ASCII (data + length());
204 }
205
207 template <typename CharPointer>
208 void writeAll (const CharPointer src) noexcept
209 {
210 CharacterFunctions::copyAll (*this, src);
211 }
212
217 template <typename CharPointer>
218 size_t writeWithDestByteLimit (const CharPointer src, const size_t maxDestBytes) noexcept
219 {
221 }
222
227 template <typename CharPointer>
228 void writeWithCharLimit (const CharPointer src, const int maxChars) noexcept
229 {
230 CharacterFunctions::copyWithCharLimit (*this, src, maxChars);
231 }
232
234 template <typename CharPointer>
235 int compare (const CharPointer other) const noexcept
236 {
237 return CharacterFunctions::compare (*this, other);
238 }
239
241 int compare (const CharPointer_ASCII other) const noexcept
242 {
243 return strcmp (data, other.data);
244 }
245
247 template <typename CharPointer>
248 int compareUpTo (const CharPointer other, const int maxChars) const noexcept
249 {
250 return CharacterFunctions::compareUpTo (*this, other, maxChars);
251 }
252
254 int compareUpTo (const CharPointer_ASCII other, const int maxChars) const noexcept
255 {
256 return strncmp (data, other.data, (size_t) maxChars);
257 }
258
260 template <typename CharPointer>
262 {
264 }
265
267 {
268 #if JUCE_MINGW || (JUCE_WINDOWS && JUCE_CLANG)
270 #elif JUCE_WINDOWS
271 return stricmp (data, other.data);
272 #else
273 return strcasecmp (data, other.data);
274 #endif
275 }
276
278 template <typename CharPointer>
279 int compareIgnoreCaseUpTo (const CharPointer other, const int maxChars) const noexcept
280 {
281 return CharacterFunctions::compareIgnoreCaseUpTo (*this, other, maxChars);
282 }
283
285 template <typename CharPointer>
286 int indexOf (const CharPointer stringToFind) const noexcept
287 {
289 }
290
292 int indexOf (const juce_wchar charToFind) const noexcept
293 {
294 int i = 0;
295
296 while (data[i] != 0)
297 {
298 if (data[i] == (char) charToFind)
299 return i;
300
301 ++i;
302 }
303
304 return -1;
305 }
306
308 int indexOf (const juce_wchar charToFind, const bool ignoreCase) const noexcept
309 {
310 return ignoreCase ? CharacterFunctions::indexOfCharIgnoreCase (*this, charToFind)
312 }
313
315 bool isWhitespace() const { return CharacterFunctions::isWhitespace (*data) != 0; }
317 bool isDigit() const { return CharacterFunctions::isDigit (*data) != 0; }
319 bool isLetter() const { return CharacterFunctions::isLetter (*data) != 0; }
321 bool isLetterOrDigit() const { return CharacterFunctions::isLetterOrDigit (*data) != 0; }
323 bool isUpperCase() const { return CharacterFunctions::isUpperCase ((juce_wchar) (uint8) *data) != 0; }
325 bool isLowerCase() const { return CharacterFunctions::isLowerCase ((juce_wchar) (uint8) *data) != 0; }
326
331
333 int getIntValue32() const noexcept { return atoi (data); }
334
337 {
338 #if JUCE_LINUX || JUCE_BSD || JUCE_ANDROID || JUCE_MINGW
339 return atoll (data);
340 #elif JUCE_WINDOWS
341 return _atoi64 (data);
342 #else
343 return CharacterFunctions::getIntValue <int64, CharPointer_ASCII> (*this);
344 #endif
345 }
346
348 double getDoubleValue() const noexcept { return CharacterFunctions::getDoubleValue (*this); }
349
352
355
357 static bool canRepresent (juce_wchar character) noexcept
358 {
359 return ((unsigned int) character) < (unsigned int) 128;
360 }
361
363 static bool isValidString (const CharType* dataToTest, int maxBytesToRead)
364 {
365 while (--maxBytesToRead >= 0)
366 {
367 if (((signed char) *dataToTest) <= 0)
368 return *dataToTest == 0;
369
370 ++dataToTest;
371 }
372
373 return true;
374 }
375
376private:
377 CharType* data;
378};
379
380} // namespace juce
atoi
atoll
Wraps a pointer to a null-terminated ASCII character string, and provides various methods to operate ...
int getIntValue32() const noexcept
Parses this string as a 32-bit integer.
double getDoubleValue() const noexcept
Parses this string as a floating point double.
bool isLetter() const
Returns true if the first character of this string is a letter.
size_t length() const noexcept
Returns the number of characters in this string.
static bool isValidString(const CharType *dataToTest, int maxBytesToRead)
Returns true if this data contains a valid string in this encoding.
size_t sizeInBytes() const noexcept
Returns the number of bytes that are used to represent this string.
CharPointer_ASCII operator+(const int numToSkip) const noexcept
Returns a pointer which is moved forwards from this one by the specified number of characters.
size_t lengthUpTo(const CharPointer_ASCII end) const noexcept
Returns the number of characters in this string, or up to the given end pointer, whichever is lower.
bool isNotEmpty() const noexcept
Returns true if this pointer is not pointing to a null character.
void writeAll(const CharPointer src) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
static size_t getBytesRequiredFor(const juce_wchar) noexcept
Returns the number of bytes that would be needed to represent the given unicode character in this enc...
int compareIgnoreCaseUpTo(const CharPointer other, const int maxChars) const noexcept
Compares this string with another one, up to a specified number of characters.
CharPointer_ASCII operator++() noexcept
Moves this pointer along to the next character in the string.
bool isWhitespace() const
Returns true if the first character of this string is whitespace.
void incrementToEndOfWhitespace() noexcept
Move this pointer to the first non-whitespace character in the string.
int compareIgnoreCase(const CharPointer other) const
Compares this string with another one.
CharPointer_ASCII operator--() noexcept
Moves this pointer to the previous character in the string.
bool isLetterOrDigit() const
Returns true if the first character of this string is a letter or digit.
static size_t getBytesRequiredFor(const CharPointer text) noexcept
Returns the number of bytes that would be needed to represent the given string in this encoding forma...
CharType * getAddress() const noexcept
Returns the address that this pointer is pointing to.
juce_wchar toUpperCase() const noexcept
Returns an upper-case version of the first character of this string.
int compareUpTo(const CharPointer_ASCII other, const int maxChars) const noexcept
Compares this string with another one, up to a specified number of characters.
int compare(const CharPointer_ASCII other) const noexcept
Compares this string with another one.
bool isLowerCase() const
Returns true if the first character of this string is lower-case.
juce_wchar toLowerCase() const noexcept
Returns a lower-case version of the first character of this string.
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.
void writeNull() const noexcept
Writes a null character to this string (leaving the pointer's position unchanged).
void write(const juce_wchar charToWrite) noexcept
Writes a unicode character to this string, and advances this pointer to point to the next position.
static bool canRepresent(juce_wchar character) noexcept
Returns true if the given unicode character can be represented in this encoding.
bool isUpperCase() const
Returns true if the first character of this string is upper-case.
juce_wchar operator[](const int characterIndex) const noexcept
Returns the character at a given character index from the start of the string.
CharPointer_ASCII operator-(const int numToSkip) const noexcept
Returns a pointer which is moved backwards from this one by the specified number of characters.
int indexOf(const CharPointer stringToFind) const noexcept
Returns the character index of a substring, or -1 if it isn't found.
CharPointer_ASCII findEndOfWhitespace() const noexcept
Returns the first non-whitespace character in the string.
juce_wchar operator*() const noexcept
Returns the unicode character that this pointer is pointing to.
void operator+=(const int numToSkip) noexcept
Moves this pointer forwards by the specified number of characters.
int compare(const CharPointer other) const noexcept
Compares this string with another one.
int indexOf(const juce_wchar charToFind) const noexcept
Returns the character index of a unicode character, or -1 if it isn't found.
bool isEmpty() const noexcept
Returns true if this pointer is pointing to a null character.
juce_wchar getAndAdvance() noexcept
Returns the character that this pointer is currently pointing to, and then advances the pointer to po...
void writeWithCharLimit(const CharPointer src, const int maxChars) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
size_t writeWithDestByteLimit(const CharPointer src, const size_t maxDestBytes) noexcept
Copies a source string to this pointer, advancing this pointer as it goes.
bool operator==(CharPointer_ASCII other) const noexcept
This is a pointer comparison, it doesn't compare the actual text.
int compareUpTo(const CharPointer other, const int maxChars) const noexcept
Compares this string with another one, up to a specified number of characters.
int64 getIntValue64() const noexcept
Parses this string as a 64-bit integer.
CharPointer_ASCII findTerminatingNull() const noexcept
Returns a pointer to the null character that terminates this string.
size_t lengthUpTo(const size_t maxCharsToCount) const noexcept
Returns the number of characters in this string, or the given value, whichever is lower.
bool isDigit() const
Returns true if the first character of this string is a digit.
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 char
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 char uint8
A platform-independent 8-bit unsigned integer type.
long long int64
A platform-independent 64-bit integer type.
strcasecmp
strcmp
strlen
strncmp