yum-mirror/VkFFT
git clone https://git.yummers.dev/yum-mirror/VkFFT
ba7001c
develop
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 : 36static Value * value (const void * pValue ,const char * pType ); 37static Value * value (const void * pPointer ); 38 39static Value * alloc (); 40 41Value * init (const void * pValue ,const char * pType ); 42Value * init (const class Coder * pCoder ); 43 44void getValue (void * pValue ,UInteger size )const ; 45const char * objCType ()const ; 46 47bool isEqualToValue (Value * pValue )const ; 48void * pointerValue ()const ; 49}; 50 51class Number :public Copying < Number ,Value > 52{ 53public : 54static Number * number (char value ); 55static Number * number (unsigned char value ); 56static Number * number (short value ); 57static Number * number (unsigned short value ); 58static Number * number (int value ); 59static Number * number (unsigned int value ); 60static Number * number (long value ); 61static Number * number (unsigned long value ); 62static Number * number (long long value ); 63static Number * number (unsigned long long value ); 64static Number * number (float value ); 65static Number * number (double value ); 66static Number * number (bool value ); 67 68static Number * alloc (); 69 70Number * init (const class Coder * pCoder ); 71Number * init (char value ); 72Number * init (unsigned char value ); 73Number * init (short value ); 74Number * init (unsigned short value ); 75Number * init (int value ); 76Number * init (unsigned int value ); 77Number * init (long value ); 78Number * init (unsigned long value ); 79Number * init (long long value ); 80Number * init (unsigned long long value ); 81Number * init (float value ); 82Number * init (double value ); 83Number * init (bool value ); 84 85char charValue ()const ; 86unsigned char unsignedCharValue ()const ; 87short shortValue ()const ; 88unsigned short unsignedShortValue ()const ; 89int intValue ()const ; 90unsigned int unsignedIntValue ()const ; 91long longValue ()const ; 92unsigned long unsignedLongValue ()const ; 93long long longLongValue ()const ; 94unsigned long long unsignedLongLongValue ()const ; 95float floatValue ()const ; 96double doubleValue ()const ; 97bool boolValue ()const ; 98Integer integerValue ()const ; 99UInteger unsignedIntegerValue ()const ; 100class String * stringValue ()const ; 101 102ComparisonResult compare (const Number * pOtherNumber )const ; 103bool isEqualToNumber (const Number * pNumber )const ; 104 105class 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{ 113return 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{ 120return 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{ 127return 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{ 134return 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{ 141return Object ::sendMessage < Value *> (this ,_NS_PRIVATE_SEL (initWithCoder_ ),pCoder ); 142} 143 144//------------------------------------------------------------------------------------------------------------------------------------------------------------- 145 146_NS_INLINE voidNS ::Value ::getValue (void * pValue ,UInteger size )const 147{ 148Object ::sendMessage < void > (this ,_NS_PRIVATE_SEL (getValue_size_ ),pValue ,size ); 149} 150 151//------------------------------------------------------------------------------------------------------------------------------------------------------------- 152 153_NS_INLINE const char * NS ::Value ::objCType ()const 154{ 155return Object ::sendMessage < const char *> (this ,_NS_PRIVATE_SEL (objCType )); 156} 157 158//------------------------------------------------------------------------------------------------------------------------------------------------------------- 159 160_NS_INLINE boolNS ::Value ::isEqualToValue (Value * pValue )const 161{ 162return Object ::sendMessage < bool > (this ,_NS_PRIVATE_SEL (isEqualToValue_ ),pValue ); 163} 164 165//------------------------------------------------------------------------------------------------------------------------------------------------------------- 166 167_NS_INLINE void * NS ::Value ::pointerValue ()const 168{ 169return Object ::sendMessage < void *> (this ,_NS_PRIVATE_SEL (pointerValue )); 170} 171 172//------------------------------------------------------------------------------------------------------------------------------------------------------------- 173 174_NS_INLINE NS ::Number * NS ::Number ::number (char value ) 175{ 176return 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{ 183return 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{ 190return 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{ 197return 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{ 204return 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{ 211return 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{ 218return 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{ 225return 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{ 232return 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{ 239return 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{ 246return 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{ 253return 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{ 260return 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{ 267return NS ::Object ::alloc < Number > (_NS_PRIVATE_CLS (NSNumber )); 268} 269 270//------------------------------------------------------------------------------------------------------------------------------------------------------------- 271 272_NS_INLINE NS ::Number * NS ::Number ::init (const Coder * pCoder ) 273{ 274return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithCoder_ ),pCoder ); 275} 276 277//------------------------------------------------------------------------------------------------------------------------------------------------------------- 278 279_NS_INLINE NS ::Number * NS ::Number ::init (char value ) 280{ 281return 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{ 288return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithUnsignedChar_ ),value ); 289} 290 291//------------------------------------------------------------------------------------------------------------------------------------------------------------- 292 293_NS_INLINE NS ::Number * NS ::Number ::init (short value ) 294{ 295return 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{ 302return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithUnsignedShort_ ),value ); 303} 304 305//------------------------------------------------------------------------------------------------------------------------------------------------------------- 306 307_NS_INLINE NS ::Number * NS ::Number ::init (int value ) 308{ 309return 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{ 316return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithUnsignedInt_ ),value ); 317} 318 319//------------------------------------------------------------------------------------------------------------------------------------------------------------- 320 321_NS_INLINE NS ::Number * NS ::Number ::init (long value ) 322{ 323return 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{ 330return 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{ 337return 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{ 344return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithUnsignedLongLong_ ),value ); 345} 346 347//------------------------------------------------------------------------------------------------------------------------------------------------------------- 348 349_NS_INLINE NS ::Number * NS ::Number ::init (float value ) 350{ 351return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithFloat_ ),value ); 352} 353 354//------------------------------------------------------------------------------------------------------------------------------------------------------------- 355 356_NS_INLINE NS ::Number * NS ::Number ::init (double value ) 357{ 358return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithDouble_ ),value ); 359} 360 361//------------------------------------------------------------------------------------------------------------------------------------------------------------- 362 363_NS_INLINE NS ::Number * NS ::Number ::init (bool value ) 364{ 365return Object ::sendMessage < Number *> (this ,_NS_PRIVATE_SEL (initWithBool_ ),value ); 366} 367 368//------------------------------------------------------------------------------------------------------------------------------------------------------------- 369 370_NS_INLINE charNS ::Number ::charValue ()const 371{ 372return Object ::sendMessage < char > (this ,_NS_PRIVATE_SEL (charValue )); 373} 374 375//------------------------------------------------------------------------------------------------------------------------------------------------------------- 376 377_NS_INLINE unsigned charNS ::Number ::unsignedCharValue ()const 378{ 379return Object ::sendMessage < unsigned char > (this ,_NS_PRIVATE_SEL (unsignedCharValue )); 380} 381 382//------------------------------------------------------------------------------------------------------------------------------------------------------------- 383 384_NS_INLINE short NS ::Number ::shortValue ()const 385{ 386return Object ::sendMessage < short > (this ,_NS_PRIVATE_SEL (shortValue )); 387} 388 389//------------------------------------------------------------------------------------------------------------------------------------------------------------- 390 391_NS_INLINE unsigned short NS ::Number ::unsignedShortValue ()const 392{ 393return Object ::sendMessage < unsigned short > (this ,_NS_PRIVATE_SEL (unsignedShortValue )); 394} 395 396//------------------------------------------------------------------------------------------------------------------------------------------------------------- 397 398_NS_INLINE intNS ::Number ::intValue ()const 399{ 400return Object ::sendMessage < int > (this ,_NS_PRIVATE_SEL (intValue )); 401} 402 403//------------------------------------------------------------------------------------------------------------------------------------------------------------- 404 405_NS_INLINE unsigned intNS ::Number ::unsignedIntValue ()const 406{ 407return Object ::sendMessage < unsigned int > (this ,_NS_PRIVATE_SEL (unsignedIntValue )); 408} 409 410//------------------------------------------------------------------------------------------------------------------------------------------------------------- 411 412_NS_INLINE long NS ::Number ::longValue ()const 413{ 414return Object ::sendMessage < long > (this ,_NS_PRIVATE_SEL (longValue )); 415} 416 417//------------------------------------------------------------------------------------------------------------------------------------------------------------- 418 419_NS_INLINE unsigned long NS ::Number ::unsignedLongValue ()const 420{ 421return Object ::sendMessage < unsigned long > (this ,_NS_PRIVATE_SEL (unsignedLongValue )); 422} 423 424//------------------------------------------------------------------------------------------------------------------------------------------------------------- 425 426_NS_INLINE long long NS ::Number ::longLongValue ()const 427{ 428return Object ::sendMessage < long long > (this ,_NS_PRIVATE_SEL (longLongValue )); 429} 430 431//------------------------------------------------------------------------------------------------------------------------------------------------------------- 432 433_NS_INLINE unsigned long long NS ::Number ::unsignedLongLongValue ()const 434{ 435return Object ::sendMessage < unsigned long long > (this ,_NS_PRIVATE_SEL (unsignedLongLongValue )); 436} 437 438//------------------------------------------------------------------------------------------------------------------------------------------------------------- 439 440_NS_INLINE floatNS ::Number ::floatValue ()const 441{ 442return Object ::sendMessage < float > (this ,_NS_PRIVATE_SEL (floatValue )); 443} 444 445//------------------------------------------------------------------------------------------------------------------------------------------------------------- 446 447_NS_INLINE doubleNS ::Number ::doubleValue ()const 448{ 449return Object ::sendMessage < double > (this ,_NS_PRIVATE_SEL (doubleValue )); 450} 451 452//------------------------------------------------------------------------------------------------------------------------------------------------------------- 453 454_NS_INLINE boolNS ::Number ::boolValue ()const 455{ 456return Object ::sendMessage < bool > (this ,_NS_PRIVATE_SEL (boolValue )); 457} 458 459//------------------------------------------------------------------------------------------------------------------------------------------------------------- 460 461_NS_INLINE NS ::Integer NS ::Number ::integerValue ()const 462{ 463return Object ::sendMessage < Integer > (this ,_NS_PRIVATE_SEL (integerValue )); 464} 465 466//------------------------------------------------------------------------------------------------------------------------------------------------------------- 467 468_NS_INLINE NS ::UInteger NS ::Number ::unsignedIntegerValue ()const 469{ 470return Object ::sendMessage < UInteger > (this ,_NS_PRIVATE_SEL (unsignedIntegerValue )); 471} 472 473//------------------------------------------------------------------------------------------------------------------------------------------------------------- 474 475_NS_INLINE NS ::String * NS ::Number ::stringValue ()const 476{ 477return 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{ 484return Object ::sendMessage < ComparisonResult > (this ,_NS_PRIVATE_SEL (compare_ ),pOtherNumber ); 485} 486 487//------------------------------------------------------------------------------------------------------------------------------------------------------------- 488 489_NS_INLINE boolNS ::Number ::isEqualToNumber (const Number * pNumber )const 490{ 491return 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{ 498return Object ::sendMessage < String *> (this ,_NS_PRIVATE_SEL (descriptionWithLocale_ ),pLocale ); 499} 500 501//-------------------------------------------------------------------------------------------------------------------------------------------------------------