Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/metal-cpp/Foundation/NSString.hpp
21066 views
1
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
2
//
3
// Foundation/NSString.hpp
4
//
5
// Copyright 2020-2024 Apple Inc.
6
//
7
// Licensed under the Apache License, Version 2.0 (the "License");
8
// you may not use this file except in compliance with the License.
9
// You may obtain a copy of the License at
10
//
11
// http://www.apache.org/licenses/LICENSE-2.0
12
//
13
// Unless required by applicable law or agreed to in writing, software
14
// distributed under the License is distributed on an "AS IS" BASIS,
15
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
// See the License for the specific language governing permissions and
17
// limitations under the License.
18
//
19
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
20
21
#pragma once
22
23
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
24
25
#include "NSDefines.hpp"
26
#include "NSObjCRuntime.hpp"
27
#include "NSObject.hpp"
28
#include "NSPrivate.hpp"
29
#include "NSRange.hpp"
30
#include "NSTypes.hpp"
31
32
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
33
34
namespace NS
35
{
36
_NS_ENUM(NS::UInteger, StringEncoding) {
37
ASCIIStringEncoding = 1,
38
NEXTSTEPStringEncoding = 2,
39
JapaneseEUCStringEncoding = 3,
40
UTF8StringEncoding = 4,
41
ISOLatin1StringEncoding = 5,
42
SymbolStringEncoding = 6,
43
NonLossyASCIIStringEncoding = 7,
44
ShiftJISStringEncoding = 8,
45
ISOLatin2StringEncoding = 9,
46
UnicodeStringEncoding = 10,
47
WindowsCP1251StringEncoding = 11,
48
WindowsCP1252StringEncoding = 12,
49
WindowsCP1253StringEncoding = 13,
50
WindowsCP1254StringEncoding = 14,
51
WindowsCP1250StringEncoding = 15,
52
ISO2022JPStringEncoding = 21,
53
MacOSRomanStringEncoding = 30,
54
55
UTF16StringEncoding = UnicodeStringEncoding,
56
57
UTF16BigEndianStringEncoding = 0x90000100,
58
UTF16LittleEndianStringEncoding = 0x94000100,
59
60
UTF32StringEncoding = 0x8c000100,
61
UTF32BigEndianStringEncoding = 0x98000100,
62
UTF32LittleEndianStringEncoding = 0x9c000100
63
};
64
65
_NS_OPTIONS(NS::UInteger, StringCompareOptions) {
66
CaseInsensitiveSearch = 1,
67
LiteralSearch = 2,
68
BackwardsSearch = 4,
69
AnchoredSearch = 8,
70
NumericSearch = 64,
71
DiacriticInsensitiveSearch = 128,
72
WidthInsensitiveSearch = 256,
73
ForcedOrderingSearch = 512,
74
RegularExpressionSearch = 1024
75
};
76
77
using unichar = unsigned short;
78
79
class String : public Copying<String>
80
{
81
public:
82
static String* string();
83
static String* string(const String* pString);
84
static String* string(const char* pString, StringEncoding encoding);
85
86
static String* alloc();
87
String* init();
88
String* init(const String* pString);
89
String* init(const char* pString, StringEncoding encoding);
90
String* init(void* pBytes, UInteger len, StringEncoding encoding);
91
String* init(void* pBytes, UInteger len, StringEncoding encoding, bool freeBuffer);
92
93
unichar character(UInteger index) const;
94
UInteger length() const;
95
96
const char* cString(StringEncoding encoding) const;
97
const char* utf8String() const;
98
UInteger maximumLengthOfBytes(StringEncoding encoding) const;
99
UInteger lengthOfBytes(StringEncoding encoding) const;
100
101
bool isEqualToString(const String* pString) const;
102
Range rangeOfString(const String* pString, StringCompareOptions options) const;
103
104
const char* fileSystemRepresentation() const;
105
106
String* stringByAppendingString(const String* pString) const;
107
ComparisonResult caseInsensitiveCompare(const String* pString) const;
108
};
109
110
/// Create an NS::String* from a string literal.
111
#define MTLSTR(literal) (NS::String*)__builtin___CFStringMakeConstantString("" literal "")
112
113
template <std::size_t _StringLen>
114
[[deprecated("please use MTLSTR(str)")]] constexpr const String* MakeConstantString(const char (&str)[_StringLen])
115
{
116
return reinterpret_cast<const String*>(__CFStringMakeConstantString(str));
117
}
118
119
}
120
121
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
122
123
_NS_INLINE NS::String* NS::String::string()
124
{
125
return sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(string));
126
}
127
128
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
129
130
_NS_INLINE NS::String* NS::String::string(const String* pString)
131
{
132
return Object::sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(stringWithString_), pString);
133
}
134
135
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
136
137
_NS_INLINE NS::String* NS::String::string(const char* pString, StringEncoding encoding)
138
{
139
return Object::sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(stringWithCString_encoding_), pString, encoding);
140
}
141
142
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
143
144
_NS_INLINE NS::String* NS::String::alloc()
145
{
146
return Object::alloc<String>(_NS_PRIVATE_CLS(NSString));
147
}
148
149
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
150
151
_NS_INLINE NS::String* NS::String::init()
152
{
153
return Object::init<String>();
154
}
155
156
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
157
158
_NS_INLINE NS::String* NS::String::init(const String* pString)
159
{
160
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithString_), pString);
161
}
162
163
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
164
165
_NS_INLINE NS::String* NS::String::init(const char* pString, StringEncoding encoding)
166
{
167
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithCString_encoding_), pString, encoding);
168
}
169
170
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
171
172
_NS_INLINE NS::String* NS::String::init(void* pBytes, UInteger len, StringEncoding encoding)
173
{
174
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithBytes_length_encoding_), pBytes, len, encoding);
175
}
176
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
177
178
_NS_INLINE NS::String* NS::String::init(void* pBytes, UInteger len, StringEncoding encoding, bool freeBuffer)
179
{
180
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithBytesNoCopy_length_encoding_freeWhenDone_), pBytes, len, encoding, freeBuffer);
181
}
182
183
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
184
185
_NS_INLINE NS::unichar NS::String::character(UInteger index) const
186
{
187
return Object::sendMessage<unichar>(this, _NS_PRIVATE_SEL(characterAtIndex_), index);
188
}
189
190
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
191
192
_NS_INLINE NS::UInteger NS::String::length() const
193
{
194
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(length));
195
}
196
197
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
198
199
_NS_INLINE const char* NS::String::cString(StringEncoding encoding) const
200
{
201
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(cStringUsingEncoding_), encoding);
202
}
203
204
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
205
206
_NS_INLINE const char* NS::String::utf8String() const
207
{
208
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(UTF8String));
209
}
210
211
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
212
213
_NS_INLINE NS::UInteger NS::String::maximumLengthOfBytes(StringEncoding encoding) const
214
{
215
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(maximumLengthOfBytesUsingEncoding_), encoding);
216
}
217
218
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
219
220
_NS_INLINE NS::UInteger NS::String::lengthOfBytes(StringEncoding encoding) const
221
{
222
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(lengthOfBytesUsingEncoding_), encoding);
223
}
224
225
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
226
227
_NS_INLINE bool NS::String::isEqualToString(const NS::String* pString) const
228
{
229
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToString_), pString);
230
}
231
232
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
233
234
_NS_INLINE NS::Range NS::String::rangeOfString(const NS::String* pString, NS::StringCompareOptions options) const
235
{
236
return Object::sendMessage<Range>(this, _NS_PRIVATE_SEL(rangeOfString_options_), pString, options);
237
}
238
239
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
240
241
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
242
243
_NS_INLINE const char* NS::String::fileSystemRepresentation() const
244
{
245
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(fileSystemRepresentation));
246
}
247
248
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
249
250
_NS_INLINE NS::String* NS::String::stringByAppendingString(const String* pString) const
251
{
252
return Object::sendMessage<NS::String*>(this, _NS_PRIVATE_SEL(stringByAppendingString_), pString);
253
}
254
255
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
256
257
_NS_INLINE NS::ComparisonResult NS::String::caseInsensitiveCompare(const String* pString) const
258
{
259
return Object::sendMessage<NS::ComparisonResult>(this, _NS_PRIVATE_SEL(caseInsensitiveCompare_), pString);
260
}
261
262
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
263
264