Path: blob/master/thirdparty/metal-cpp/Foundation/NSNumber.hpp
21066 views
//-------------------------------------------------------------------------------------------------------------------------------------------------------------1//2// Foundation/NSNumber.hpp3//4// Copyright 2020-2024 Apple Inc.5//6// Licensed under the Apache License, Version 2.0 (the "License");7// you may not use this file except in compliance with the License.8// You may obtain a copy of the License at9//10// http://www.apache.org/licenses/LICENSE-2.011//12// Unless required by applicable law or agreed to in writing, software13// distributed under the License is distributed on an "AS IS" BASIS,14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.15// See the License for the specific language governing permissions and16// limitations under the License.17//18//-------------------------------------------------------------------------------------------------------------------------------------------------------------1920#pragma once2122//-------------------------------------------------------------------------------------------------------------------------------------------------------------2324#include "NSObjCRuntime.hpp"25#include "NSObject.hpp"26#include "NSTypes.hpp"2728//-------------------------------------------------------------------------------------------------------------------------------------------------------------2930namespace NS31{32class Value : public Copying<Value>33{34public:35static Value* value(const void* pValue, const char* pType);36static Value* value(const void* pPointer);3738static Value* alloc();3940Value* init(const void* pValue, const char* pType);41Value* init(const class Coder* pCoder);4243void getValue(void* pValue, UInteger size) const;44const char* objCType() const;4546bool isEqualToValue(Value* pValue) const;47void* pointerValue() const;48};4950class Number : public Copying<Number, Value>51{52public:53static Number* number(char value);54static Number* number(unsigned char value);55static Number* number(short value);56static Number* number(unsigned short value);57static Number* number(int value);58static Number* number(unsigned int value);59static Number* number(long value);60static Number* number(unsigned long value);61static Number* number(long long value);62static Number* number(unsigned long long value);63static Number* number(float value);64static Number* number(double value);65static Number* number(bool value);6667static Number* alloc();6869Number* init(const class Coder* pCoder);70Number* init(char value);71Number* init(unsigned char value);72Number* init(short value);73Number* init(unsigned short value);74Number* init(int value);75Number* init(unsigned int value);76Number* init(long value);77Number* init(unsigned long value);78Number* init(long long value);79Number* init(unsigned long long value);80Number* init(float value);81Number* init(double value);82Number* init(bool value);8384char charValue() const;85unsigned char unsignedCharValue() const;86short shortValue() const;87unsigned short unsignedShortValue() const;88int intValue() const;89unsigned int unsignedIntValue() const;90long longValue() const;91unsigned long unsignedLongValue() const;92long long longLongValue() const;93unsigned long long unsignedLongLongValue() const;94float floatValue() const;95double doubleValue() const;96bool boolValue() const;97Integer integerValue() const;98UInteger unsignedIntegerValue() const;99class String* stringValue() const;100101ComparisonResult compare(const Number* pOtherNumber) const;102bool isEqualToNumber(const Number* pNumber) const;103104class String* descriptionWithLocale(const Object* pLocale) const;105};106}107108//-------------------------------------------------------------------------------------------------------------------------------------------------------------109110_NS_INLINE NS::Value* NS::Value::value(const void* pValue, const char* pType)111{112return Object::sendMessage<Value*>(_NS_PRIVATE_CLS(NSValue), _NS_PRIVATE_SEL(valueWithBytes_objCType_), pValue, pType);113}114115//-------------------------------------------------------------------------------------------------------------------------------------------------------------116117_NS_INLINE NS::Value* NS::Value::value(const void* pPointer)118{119return Object::sendMessage<Value*>(_NS_PRIVATE_CLS(NSValue), _NS_PRIVATE_SEL(valueWithPointer_), pPointer);120}121122//-------------------------------------------------------------------------------------------------------------------------------------------------------------123124_NS_INLINE NS::Value* NS::Value::alloc()125{126return NS::Object::alloc<Value>(_NS_PRIVATE_CLS(NSValue));127}128129//-------------------------------------------------------------------------------------------------------------------------------------------------------------130131_NS_INLINE NS::Value* NS::Value::init(const void* pValue, const char* pType)132{133return Object::sendMessage<Value*>(this, _NS_PRIVATE_SEL(initWithBytes_objCType_), pValue, pType);134}135136//-------------------------------------------------------------------------------------------------------------------------------------------------------------137138_NS_INLINE NS::Value* NS::Value::init(const class Coder* pCoder)139{140return Object::sendMessage<Value*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);141}142143//-------------------------------------------------------------------------------------------------------------------------------------------------------------144145_NS_INLINE void NS::Value::getValue(void* pValue, UInteger size) const146{147Object::sendMessage<void>(this, _NS_PRIVATE_SEL(getValue_size_), pValue, size);148}149150//-------------------------------------------------------------------------------------------------------------------------------------------------------------151152_NS_INLINE const char* NS::Value::objCType() const153{154return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(objCType));155}156157//-------------------------------------------------------------------------------------------------------------------------------------------------------------158159_NS_INLINE bool NS::Value::isEqualToValue(Value* pValue) const160{161return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToValue_), pValue);162}163164//-------------------------------------------------------------------------------------------------------------------------------------------------------------165166_NS_INLINE void* NS::Value::pointerValue() const167{168return Object::sendMessage<void*>(this, _NS_PRIVATE_SEL(pointerValue));169}170171//-------------------------------------------------------------------------------------------------------------------------------------------------------------172173_NS_INLINE NS::Number* NS::Number::number(char value)174{175return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithChar_), value);176}177178//-------------------------------------------------------------------------------------------------------------------------------------------------------------179180_NS_INLINE NS::Number* NS::Number::number(unsigned char value)181{182return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedChar_), value);183}184185//-------------------------------------------------------------------------------------------------------------------------------------------------------------186187_NS_INLINE NS::Number* NS::Number::number(short value)188{189return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithShort_), value);190}191192//-------------------------------------------------------------------------------------------------------------------------------------------------------------193194_NS_INLINE NS::Number* NS::Number::number(unsigned short value)195{196return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedShort_), value);197}198199//-------------------------------------------------------------------------------------------------------------------------------------------------------------200201_NS_INLINE NS::Number* NS::Number::number(int value)202{203return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithInt_), value);204}205206//-------------------------------------------------------------------------------------------------------------------------------------------------------------207208_NS_INLINE NS::Number* NS::Number::number(unsigned int value)209{210return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedInt_), value);211}212213//-------------------------------------------------------------------------------------------------------------------------------------------------------------214215_NS_INLINE NS::Number* NS::Number::number(long value)216{217return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithLong_), value);218}219220//-------------------------------------------------------------------------------------------------------------------------------------------------------------221222_NS_INLINE NS::Number* NS::Number::number(unsigned long value)223{224return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedLong_), value);225}226227//-------------------------------------------------------------------------------------------------------------------------------------------------------------228229_NS_INLINE NS::Number* NS::Number::number(long long value)230{231return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithLongLong_), value);232}233234//-------------------------------------------------------------------------------------------------------------------------------------------------------------235236_NS_INLINE NS::Number* NS::Number::number(unsigned long long value)237{238return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedLongLong_), value);239}240241//-------------------------------------------------------------------------------------------------------------------------------------------------------------242243_NS_INLINE NS::Number* NS::Number::number(float value)244{245return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithFloat_), value);246}247248//-------------------------------------------------------------------------------------------------------------------------------------------------------------249250_NS_INLINE NS::Number* NS::Number::number(double value)251{252return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithDouble_), value);253}254255//-------------------------------------------------------------------------------------------------------------------------------------------------------------256257_NS_INLINE NS::Number* NS::Number::number(bool value)258{259return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithBool_), value);260}261262//-------------------------------------------------------------------------------------------------------------------------------------------------------------263264_NS_INLINE NS::Number* NS::Number::alloc()265{266return NS::Object::alloc<Number>(_NS_PRIVATE_CLS(NSNumber));267}268269//-------------------------------------------------------------------------------------------------------------------------------------------------------------270271_NS_INLINE NS::Number* NS::Number::init(const Coder* pCoder)272{273return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);274}275276//-------------------------------------------------------------------------------------------------------------------------------------------------------------277278_NS_INLINE NS::Number* NS::Number::init(char value)279{280return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithChar_), value);281}282283//-------------------------------------------------------------------------------------------------------------------------------------------------------------284285_NS_INLINE NS::Number* NS::Number::init(unsigned char value)286{287return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedChar_), value);288}289290//-------------------------------------------------------------------------------------------------------------------------------------------------------------291292_NS_INLINE NS::Number* NS::Number::init(short value)293{294return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithShort_), value);295}296297//-------------------------------------------------------------------------------------------------------------------------------------------------------------298299_NS_INLINE NS::Number* NS::Number::init(unsigned short value)300{301return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedShort_), value);302}303304//-------------------------------------------------------------------------------------------------------------------------------------------------------------305306_NS_INLINE NS::Number* NS::Number::init(int value)307{308return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithInt_), value);309}310311//-------------------------------------------------------------------------------------------------------------------------------------------------------------312313_NS_INLINE NS::Number* NS::Number::init(unsigned int value)314{315return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedInt_), value);316}317318//-------------------------------------------------------------------------------------------------------------------------------------------------------------319320_NS_INLINE NS::Number* NS::Number::init(long value)321{322return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithLong_), value);323}324325//-------------------------------------------------------------------------------------------------------------------------------------------------------------326327_NS_INLINE NS::Number* NS::Number::init(unsigned long value)328{329return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedLong_), value);330}331332//-------------------------------------------------------------------------------------------------------------------------------------------------------------333334_NS_INLINE NS::Number* NS::Number::init(long long value)335{336return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithLongLong_), value);337}338339//-------------------------------------------------------------------------------------------------------------------------------------------------------------340341_NS_INLINE NS::Number* NS::Number::init(unsigned long long value)342{343return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedLongLong_), value);344}345346//-------------------------------------------------------------------------------------------------------------------------------------------------------------347348_NS_INLINE NS::Number* NS::Number::init(float value)349{350return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithFloat_), value);351}352353//-------------------------------------------------------------------------------------------------------------------------------------------------------------354355_NS_INLINE NS::Number* NS::Number::init(double value)356{357return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithDouble_), value);358}359360//-------------------------------------------------------------------------------------------------------------------------------------------------------------361362_NS_INLINE NS::Number* NS::Number::init(bool value)363{364return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithBool_), value);365}366367//-------------------------------------------------------------------------------------------------------------------------------------------------------------368369_NS_INLINE char NS::Number::charValue() const370{371return Object::sendMessage<char>(this, _NS_PRIVATE_SEL(charValue));372}373374//-------------------------------------------------------------------------------------------------------------------------------------------------------------375376_NS_INLINE unsigned char NS::Number::unsignedCharValue() const377{378return Object::sendMessage<unsigned char>(this, _NS_PRIVATE_SEL(unsignedCharValue));379}380381//-------------------------------------------------------------------------------------------------------------------------------------------------------------382383_NS_INLINE short NS::Number::shortValue() const384{385return Object::sendMessage<short>(this, _NS_PRIVATE_SEL(shortValue));386}387388//-------------------------------------------------------------------------------------------------------------------------------------------------------------389390_NS_INLINE unsigned short NS::Number::unsignedShortValue() const391{392return Object::sendMessage<unsigned short>(this, _NS_PRIVATE_SEL(unsignedShortValue));393}394395//-------------------------------------------------------------------------------------------------------------------------------------------------------------396397_NS_INLINE int NS::Number::intValue() const398{399return Object::sendMessage<int>(this, _NS_PRIVATE_SEL(intValue));400}401402//-------------------------------------------------------------------------------------------------------------------------------------------------------------403404_NS_INLINE unsigned int NS::Number::unsignedIntValue() const405{406return Object::sendMessage<unsigned int>(this, _NS_PRIVATE_SEL(unsignedIntValue));407}408409//-------------------------------------------------------------------------------------------------------------------------------------------------------------410411_NS_INLINE long NS::Number::longValue() const412{413return Object::sendMessage<long>(this, _NS_PRIVATE_SEL(longValue));414}415416//-------------------------------------------------------------------------------------------------------------------------------------------------------------417418_NS_INLINE unsigned long NS::Number::unsignedLongValue() const419{420return Object::sendMessage<unsigned long>(this, _NS_PRIVATE_SEL(unsignedLongValue));421}422423//-------------------------------------------------------------------------------------------------------------------------------------------------------------424425_NS_INLINE long long NS::Number::longLongValue() const426{427return Object::sendMessage<long long>(this, _NS_PRIVATE_SEL(longLongValue));428}429430//-------------------------------------------------------------------------------------------------------------------------------------------------------------431432_NS_INLINE unsigned long long NS::Number::unsignedLongLongValue() const433{434return Object::sendMessage<unsigned long long>(this, _NS_PRIVATE_SEL(unsignedLongLongValue));435}436437//-------------------------------------------------------------------------------------------------------------------------------------------------------------438439_NS_INLINE float NS::Number::floatValue() const440{441return Object::sendMessage<float>(this, _NS_PRIVATE_SEL(floatValue));442}443444//-------------------------------------------------------------------------------------------------------------------------------------------------------------445446_NS_INLINE double NS::Number::doubleValue() const447{448return Object::sendMessage<double>(this, _NS_PRIVATE_SEL(doubleValue));449}450451//-------------------------------------------------------------------------------------------------------------------------------------------------------------452453_NS_INLINE bool NS::Number::boolValue() const454{455return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(boolValue));456}457458//-------------------------------------------------------------------------------------------------------------------------------------------------------------459460_NS_INLINE NS::Integer NS::Number::integerValue() const461{462return Object::sendMessage<Integer>(this, _NS_PRIVATE_SEL(integerValue));463}464465//-------------------------------------------------------------------------------------------------------------------------------------------------------------466467_NS_INLINE NS::UInteger NS::Number::unsignedIntegerValue() const468{469return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(unsignedIntegerValue));470}471472//-------------------------------------------------------------------------------------------------------------------------------------------------------------473474_NS_INLINE NS::String* NS::Number::stringValue() const475{476return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(stringValue));477}478479//-------------------------------------------------------------------------------------------------------------------------------------------------------------480481_NS_INLINE NS::ComparisonResult NS::Number::compare(const Number* pOtherNumber) const482{483return Object::sendMessage<ComparisonResult>(this, _NS_PRIVATE_SEL(compare_), pOtherNumber);484}485486//-------------------------------------------------------------------------------------------------------------------------------------------------------------487488_NS_INLINE bool NS::Number::isEqualToNumber(const Number* pNumber) const489{490return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToNumber_), pNumber);491}492493//-------------------------------------------------------------------------------------------------------------------------------------------------------------494495_NS_INLINE NS::String* NS::Number::descriptionWithLocale(const Object* pLocale) const496{497return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(descriptionWithLocale_), pLocale);498}499500//-------------------------------------------------------------------------------------------------------------------------------------------------------------501502503