Path: blob/master/thirdparty/metal-cpp/Foundation/NSString.hpp
21066 views
//-------------------------------------------------------------------------------------------------------------------------------------------------------------1//2// Foundation/NSString.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 "NSDefines.hpp"25#include "NSObjCRuntime.hpp"26#include "NSObject.hpp"27#include "NSPrivate.hpp"28#include "NSRange.hpp"29#include "NSTypes.hpp"3031//-------------------------------------------------------------------------------------------------------------------------------------------------------------3233namespace NS34{35_NS_ENUM(NS::UInteger, StringEncoding) {36ASCIIStringEncoding = 1,37NEXTSTEPStringEncoding = 2,38JapaneseEUCStringEncoding = 3,39UTF8StringEncoding = 4,40ISOLatin1StringEncoding = 5,41SymbolStringEncoding = 6,42NonLossyASCIIStringEncoding = 7,43ShiftJISStringEncoding = 8,44ISOLatin2StringEncoding = 9,45UnicodeStringEncoding = 10,46WindowsCP1251StringEncoding = 11,47WindowsCP1252StringEncoding = 12,48WindowsCP1253StringEncoding = 13,49WindowsCP1254StringEncoding = 14,50WindowsCP1250StringEncoding = 15,51ISO2022JPStringEncoding = 21,52MacOSRomanStringEncoding = 30,5354UTF16StringEncoding = UnicodeStringEncoding,5556UTF16BigEndianStringEncoding = 0x90000100,57UTF16LittleEndianStringEncoding = 0x94000100,5859UTF32StringEncoding = 0x8c000100,60UTF32BigEndianStringEncoding = 0x98000100,61UTF32LittleEndianStringEncoding = 0x9c00010062};6364_NS_OPTIONS(NS::UInteger, StringCompareOptions) {65CaseInsensitiveSearch = 1,66LiteralSearch = 2,67BackwardsSearch = 4,68AnchoredSearch = 8,69NumericSearch = 64,70DiacriticInsensitiveSearch = 128,71WidthInsensitiveSearch = 256,72ForcedOrderingSearch = 512,73RegularExpressionSearch = 102474};7576using unichar = unsigned short;7778class String : public Copying<String>79{80public:81static String* string();82static String* string(const String* pString);83static String* string(const char* pString, StringEncoding encoding);8485static String* alloc();86String* init();87String* init(const String* pString);88String* init(const char* pString, StringEncoding encoding);89String* init(void* pBytes, UInteger len, StringEncoding encoding);90String* init(void* pBytes, UInteger len, StringEncoding encoding, bool freeBuffer);9192unichar character(UInteger index) const;93UInteger length() const;9495const char* cString(StringEncoding encoding) const;96const char* utf8String() const;97UInteger maximumLengthOfBytes(StringEncoding encoding) const;98UInteger lengthOfBytes(StringEncoding encoding) const;99100bool isEqualToString(const String* pString) const;101Range rangeOfString(const String* pString, StringCompareOptions options) const;102103const char* fileSystemRepresentation() const;104105String* stringByAppendingString(const String* pString) const;106ComparisonResult caseInsensitiveCompare(const String* pString) const;107};108109/// Create an NS::String* from a string literal.110#define MTLSTR(literal) (NS::String*)__builtin___CFStringMakeConstantString("" literal "")111112template <std::size_t _StringLen>113[[deprecated("please use MTLSTR(str)")]] constexpr const String* MakeConstantString(const char (&str)[_StringLen])114{115return reinterpret_cast<const String*>(__CFStringMakeConstantString(str));116}117118}119120//-------------------------------------------------------------------------------------------------------------------------------------------------------------121122_NS_INLINE NS::String* NS::String::string()123{124return sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(string));125}126127//-------------------------------------------------------------------------------------------------------------------------------------------------------------128129_NS_INLINE NS::String* NS::String::string(const String* pString)130{131return Object::sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(stringWithString_), pString);132}133134//-------------------------------------------------------------------------------------------------------------------------------------------------------------135136_NS_INLINE NS::String* NS::String::string(const char* pString, StringEncoding encoding)137{138return Object::sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(stringWithCString_encoding_), pString, encoding);139}140141//-------------------------------------------------------------------------------------------------------------------------------------------------------------142143_NS_INLINE NS::String* NS::String::alloc()144{145return Object::alloc<String>(_NS_PRIVATE_CLS(NSString));146}147148//-------------------------------------------------------------------------------------------------------------------------------------------------------------149150_NS_INLINE NS::String* NS::String::init()151{152return Object::init<String>();153}154155//-------------------------------------------------------------------------------------------------------------------------------------------------------------156157_NS_INLINE NS::String* NS::String::init(const String* pString)158{159return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithString_), pString);160}161162//-------------------------------------------------------------------------------------------------------------------------------------------------------------163164_NS_INLINE NS::String* NS::String::init(const char* pString, StringEncoding encoding)165{166return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithCString_encoding_), pString, encoding);167}168169//-------------------------------------------------------------------------------------------------------------------------------------------------------------170171_NS_INLINE NS::String* NS::String::init(void* pBytes, UInteger len, StringEncoding encoding)172{173return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithBytes_length_encoding_), pBytes, len, encoding);174}175//-------------------------------------------------------------------------------------------------------------------------------------------------------------176177_NS_INLINE NS::String* NS::String::init(void* pBytes, UInteger len, StringEncoding encoding, bool freeBuffer)178{179return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithBytesNoCopy_length_encoding_freeWhenDone_), pBytes, len, encoding, freeBuffer);180}181182//-------------------------------------------------------------------------------------------------------------------------------------------------------------183184_NS_INLINE NS::unichar NS::String::character(UInteger index) const185{186return Object::sendMessage<unichar>(this, _NS_PRIVATE_SEL(characterAtIndex_), index);187}188189//-------------------------------------------------------------------------------------------------------------------------------------------------------------190191_NS_INLINE NS::UInteger NS::String::length() const192{193return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(length));194}195196//-------------------------------------------------------------------------------------------------------------------------------------------------------------197198_NS_INLINE const char* NS::String::cString(StringEncoding encoding) const199{200return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(cStringUsingEncoding_), encoding);201}202203//-------------------------------------------------------------------------------------------------------------------------------------------------------------204205_NS_INLINE const char* NS::String::utf8String() const206{207return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(UTF8String));208}209210//-------------------------------------------------------------------------------------------------------------------------------------------------------------211212_NS_INLINE NS::UInteger NS::String::maximumLengthOfBytes(StringEncoding encoding) const213{214return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(maximumLengthOfBytesUsingEncoding_), encoding);215}216217//-------------------------------------------------------------------------------------------------------------------------------------------------------------218219_NS_INLINE NS::UInteger NS::String::lengthOfBytes(StringEncoding encoding) const220{221return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(lengthOfBytesUsingEncoding_), encoding);222}223224//-------------------------------------------------------------------------------------------------------------------------------------------------------------225226_NS_INLINE bool NS::String::isEqualToString(const NS::String* pString) const227{228return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToString_), pString);229}230231//-------------------------------------------------------------------------------------------------------------------------------------------------------------232233_NS_INLINE NS::Range NS::String::rangeOfString(const NS::String* pString, NS::StringCompareOptions options) const234{235return Object::sendMessage<Range>(this, _NS_PRIVATE_SEL(rangeOfString_options_), pString, options);236}237238//-------------------------------------------------------------------------------------------------------------------------------------------------------------239240//-------------------------------------------------------------------------------------------------------------------------------------------------------------241242_NS_INLINE const char* NS::String::fileSystemRepresentation() const243{244return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(fileSystemRepresentation));245}246247//-------------------------------------------------------------------------------------------------------------------------------------------------------------248249_NS_INLINE NS::String* NS::String::stringByAppendingString(const String* pString) const250{251return Object::sendMessage<NS::String*>(this, _NS_PRIVATE_SEL(stringByAppendingString_), pString);252}253254//-------------------------------------------------------------------------------------------------------------------------------------------------------------255256_NS_INLINE NS::ComparisonResult NS::String::caseInsensitiveCompare(const String* pString) const257{258return Object::sendMessage<NS::ComparisonResult>(this, _NS_PRIVATE_SEL(caseInsensitiveCompare_), pString);259}260261//-------------------------------------------------------------------------------------------------------------------------------------------------------------262263264