Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/metal-cpp/Foundation/NSNumber.hpp
21066 views
1
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
2
//
3
// Foundation/NSNumber.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 "NSObjCRuntime.hpp"
26
#include "NSObject.hpp"
27
#include "NSTypes.hpp"
28
29
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
30
31
namespace NS
32
{
33
class Value : public Copying<Value>
34
{
35
public:
36
static Value* value(const void* pValue, const char* pType);
37
static Value* value(const void* pPointer);
38
39
static Value* alloc();
40
41
Value* init(const void* pValue, const char* pType);
42
Value* init(const class Coder* pCoder);
43
44
void getValue(void* pValue, UInteger size) const;
45
const char* objCType() const;
46
47
bool isEqualToValue(Value* pValue) const;
48
void* pointerValue() const;
49
};
50
51
class Number : public Copying<Number, Value>
52
{
53
public:
54
static Number* number(char value);
55
static Number* number(unsigned char value);
56
static Number* number(short value);
57
static Number* number(unsigned short value);
58
static Number* number(int value);
59
static Number* number(unsigned int value);
60
static Number* number(long value);
61
static Number* number(unsigned long value);
62
static Number* number(long long value);
63
static Number* number(unsigned long long value);
64
static Number* number(float value);
65
static Number* number(double value);
66
static Number* number(bool value);
67
68
static Number* alloc();
69
70
Number* init(const class Coder* pCoder);
71
Number* init(char value);
72
Number* init(unsigned char value);
73
Number* init(short value);
74
Number* init(unsigned short value);
75
Number* init(int value);
76
Number* init(unsigned int value);
77
Number* init(long value);
78
Number* init(unsigned long value);
79
Number* init(long long value);
80
Number* init(unsigned long long value);
81
Number* init(float value);
82
Number* init(double value);
83
Number* init(bool value);
84
85
char charValue() const;
86
unsigned char unsignedCharValue() const;
87
short shortValue() const;
88
unsigned short unsignedShortValue() const;
89
int intValue() const;
90
unsigned int unsignedIntValue() const;
91
long longValue() const;
92
unsigned long unsignedLongValue() const;
93
long long longLongValue() const;
94
unsigned long long unsignedLongLongValue() const;
95
float floatValue() const;
96
double doubleValue() const;
97
bool boolValue() const;
98
Integer integerValue() const;
99
UInteger unsignedIntegerValue() const;
100
class String* stringValue() const;
101
102
ComparisonResult compare(const Number* pOtherNumber) const;
103
bool isEqualToNumber(const Number* pNumber) const;
104
105
class String* descriptionWithLocale(const Object* pLocale) const;
106
};
107
}
108
109
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
110
111
_NS_INLINE NS::Value* NS::Value::value(const void* pValue, const char* pType)
112
{
113
return Object::sendMessage<Value*>(_NS_PRIVATE_CLS(NSValue), _NS_PRIVATE_SEL(valueWithBytes_objCType_), pValue, pType);
114
}
115
116
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
117
118
_NS_INLINE NS::Value* NS::Value::value(const void* pPointer)
119
{
120
return Object::sendMessage<Value*>(_NS_PRIVATE_CLS(NSValue), _NS_PRIVATE_SEL(valueWithPointer_), pPointer);
121
}
122
123
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
124
125
_NS_INLINE NS::Value* NS::Value::alloc()
126
{
127
return NS::Object::alloc<Value>(_NS_PRIVATE_CLS(NSValue));
128
}
129
130
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
131
132
_NS_INLINE NS::Value* NS::Value::init(const void* pValue, const char* pType)
133
{
134
return Object::sendMessage<Value*>(this, _NS_PRIVATE_SEL(initWithBytes_objCType_), pValue, pType);
135
}
136
137
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
138
139
_NS_INLINE NS::Value* NS::Value::init(const class Coder* pCoder)
140
{
141
return Object::sendMessage<Value*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
142
}
143
144
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
145
146
_NS_INLINE void NS::Value::getValue(void* pValue, UInteger size) const
147
{
148
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(getValue_size_), pValue, size);
149
}
150
151
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
152
153
_NS_INLINE const char* NS::Value::objCType() const
154
{
155
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(objCType));
156
}
157
158
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
159
160
_NS_INLINE bool NS::Value::isEqualToValue(Value* pValue) const
161
{
162
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToValue_), pValue);
163
}
164
165
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
166
167
_NS_INLINE void* NS::Value::pointerValue() const
168
{
169
return Object::sendMessage<void*>(this, _NS_PRIVATE_SEL(pointerValue));
170
}
171
172
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
173
174
_NS_INLINE NS::Number* NS::Number::number(char value)
175
{
176
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithChar_), value);
177
}
178
179
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
180
181
_NS_INLINE NS::Number* NS::Number::number(unsigned char value)
182
{
183
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedChar_), value);
184
}
185
186
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
187
188
_NS_INLINE NS::Number* NS::Number::number(short value)
189
{
190
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithShort_), value);
191
}
192
193
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
194
195
_NS_INLINE NS::Number* NS::Number::number(unsigned short value)
196
{
197
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedShort_), value);
198
}
199
200
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
201
202
_NS_INLINE NS::Number* NS::Number::number(int value)
203
{
204
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithInt_), value);
205
}
206
207
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
208
209
_NS_INLINE NS::Number* NS::Number::number(unsigned int value)
210
{
211
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedInt_), value);
212
}
213
214
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
215
216
_NS_INLINE NS::Number* NS::Number::number(long value)
217
{
218
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithLong_), value);
219
}
220
221
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
222
223
_NS_INLINE NS::Number* NS::Number::number(unsigned long value)
224
{
225
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedLong_), value);
226
}
227
228
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
229
230
_NS_INLINE NS::Number* NS::Number::number(long long value)
231
{
232
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithLongLong_), value);
233
}
234
235
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
236
237
_NS_INLINE NS::Number* NS::Number::number(unsigned long long value)
238
{
239
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedLongLong_), value);
240
}
241
242
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
243
244
_NS_INLINE NS::Number* NS::Number::number(float value)
245
{
246
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithFloat_), value);
247
}
248
249
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
250
251
_NS_INLINE NS::Number* NS::Number::number(double value)
252
{
253
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithDouble_), value);
254
}
255
256
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
257
258
_NS_INLINE NS::Number* NS::Number::number(bool value)
259
{
260
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithBool_), value);
261
}
262
263
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
264
265
_NS_INLINE NS::Number* NS::Number::alloc()
266
{
267
return NS::Object::alloc<Number>(_NS_PRIVATE_CLS(NSNumber));
268
}
269
270
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
271
272
_NS_INLINE NS::Number* NS::Number::init(const Coder* pCoder)
273
{
274
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
275
}
276
277
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
278
279
_NS_INLINE NS::Number* NS::Number::init(char value)
280
{
281
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithChar_), value);
282
}
283
284
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
285
286
_NS_INLINE NS::Number* NS::Number::init(unsigned char value)
287
{
288
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedChar_), value);
289
}
290
291
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
292
293
_NS_INLINE NS::Number* NS::Number::init(short value)
294
{
295
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithShort_), value);
296
}
297
298
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
299
300
_NS_INLINE NS::Number* NS::Number::init(unsigned short value)
301
{
302
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedShort_), value);
303
}
304
305
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
306
307
_NS_INLINE NS::Number* NS::Number::init(int value)
308
{
309
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithInt_), value);
310
}
311
312
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
313
314
_NS_INLINE NS::Number* NS::Number::init(unsigned int value)
315
{
316
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedInt_), value);
317
}
318
319
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
320
321
_NS_INLINE NS::Number* NS::Number::init(long value)
322
{
323
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithLong_), value);
324
}
325
326
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
327
328
_NS_INLINE NS::Number* NS::Number::init(unsigned long value)
329
{
330
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedLong_), value);
331
}
332
333
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
334
335
_NS_INLINE NS::Number* NS::Number::init(long long value)
336
{
337
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithLongLong_), value);
338
}
339
340
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
341
342
_NS_INLINE NS::Number* NS::Number::init(unsigned long long value)
343
{
344
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedLongLong_), value);
345
}
346
347
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
348
349
_NS_INLINE NS::Number* NS::Number::init(float value)
350
{
351
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithFloat_), value);
352
}
353
354
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
355
356
_NS_INLINE NS::Number* NS::Number::init(double value)
357
{
358
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithDouble_), value);
359
}
360
361
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
362
363
_NS_INLINE NS::Number* NS::Number::init(bool value)
364
{
365
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithBool_), value);
366
}
367
368
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
369
370
_NS_INLINE char NS::Number::charValue() const
371
{
372
return Object::sendMessage<char>(this, _NS_PRIVATE_SEL(charValue));
373
}
374
375
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
376
377
_NS_INLINE unsigned char NS::Number::unsignedCharValue() const
378
{
379
return Object::sendMessage<unsigned char>(this, _NS_PRIVATE_SEL(unsignedCharValue));
380
}
381
382
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
383
384
_NS_INLINE short NS::Number::shortValue() const
385
{
386
return Object::sendMessage<short>(this, _NS_PRIVATE_SEL(shortValue));
387
}
388
389
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
390
391
_NS_INLINE unsigned short NS::Number::unsignedShortValue() const
392
{
393
return Object::sendMessage<unsigned short>(this, _NS_PRIVATE_SEL(unsignedShortValue));
394
}
395
396
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
397
398
_NS_INLINE int NS::Number::intValue() const
399
{
400
return Object::sendMessage<int>(this, _NS_PRIVATE_SEL(intValue));
401
}
402
403
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
404
405
_NS_INLINE unsigned int NS::Number::unsignedIntValue() const
406
{
407
return Object::sendMessage<unsigned int>(this, _NS_PRIVATE_SEL(unsignedIntValue));
408
}
409
410
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
411
412
_NS_INLINE long NS::Number::longValue() const
413
{
414
return Object::sendMessage<long>(this, _NS_PRIVATE_SEL(longValue));
415
}
416
417
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
418
419
_NS_INLINE unsigned long NS::Number::unsignedLongValue() const
420
{
421
return Object::sendMessage<unsigned long>(this, _NS_PRIVATE_SEL(unsignedLongValue));
422
}
423
424
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
425
426
_NS_INLINE long long NS::Number::longLongValue() const
427
{
428
return Object::sendMessage<long long>(this, _NS_PRIVATE_SEL(longLongValue));
429
}
430
431
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
432
433
_NS_INLINE unsigned long long NS::Number::unsignedLongLongValue() const
434
{
435
return Object::sendMessage<unsigned long long>(this, _NS_PRIVATE_SEL(unsignedLongLongValue));
436
}
437
438
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
439
440
_NS_INLINE float NS::Number::floatValue() const
441
{
442
return Object::sendMessage<float>(this, _NS_PRIVATE_SEL(floatValue));
443
}
444
445
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
446
447
_NS_INLINE double NS::Number::doubleValue() const
448
{
449
return Object::sendMessage<double>(this, _NS_PRIVATE_SEL(doubleValue));
450
}
451
452
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
453
454
_NS_INLINE bool NS::Number::boolValue() const
455
{
456
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(boolValue));
457
}
458
459
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
460
461
_NS_INLINE NS::Integer NS::Number::integerValue() const
462
{
463
return Object::sendMessage<Integer>(this, _NS_PRIVATE_SEL(integerValue));
464
}
465
466
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
467
468
_NS_INLINE NS::UInteger NS::Number::unsignedIntegerValue() const
469
{
470
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(unsignedIntegerValue));
471
}
472
473
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
474
475
_NS_INLINE NS::String* NS::Number::stringValue() const
476
{
477
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(stringValue));
478
}
479
480
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
481
482
_NS_INLINE NS::ComparisonResult NS::Number::compare(const Number* pOtherNumber) const
483
{
484
return Object::sendMessage<ComparisonResult>(this, _NS_PRIVATE_SEL(compare_), pOtherNumber);
485
}
486
487
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
488
489
_NS_INLINE bool NS::Number::isEqualToNumber(const Number* pNumber) const
490
{
491
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToNumber_), pNumber);
492
}
493
494
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
495
496
_NS_INLINE NS::String* NS::Number::descriptionWithLocale(const Object* pLocale) const
497
{
498
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(descriptionWithLocale_), pLocale);
499
}
500
501
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
502
503