yum-mirror/VkFFT

git clone https://git.yummers.dev/yum-mirror/VkFFT

Tolmachev DmitriiMetal support in VkFFTba7001c

master
21.6 KiB501 linesraw
1//-------------------------------------------------------------------------------------------------------------------------------------------------------------
2//
3// Foundation/NSNumber.hpp
4//
5// Copyright 2020-2021 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
31namespace NS
32{
33class Value : public Copying<Value>
34{
35public:
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
51class Number : public Copying<Number, Value>
52{
53public:
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//-------------------------------------------------------------------------------------------------------------------------------------------------------------