mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-22 05:15:51 +12:00
metal: initial support
This commit is contained in:
parent
29d9ed7224
commit
f0547d1a71
167 changed files with 28839 additions and 1271 deletions
47
third_party/metal-cpp/Foundation/Foundation.hpp
vendored
Normal file
47
third_party/metal-cpp/Foundation/Foundation.hpp
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/Foundation.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSArray.hpp"
|
||||
#include "NSAutoreleasePool.hpp"
|
||||
#include "NSBundle.hpp"
|
||||
#include "NSData.hpp"
|
||||
#include "NSDate.hpp"
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSDictionary.hpp"
|
||||
#include "NSEnumerator.hpp"
|
||||
#include "NSError.hpp"
|
||||
#include "NSLock.hpp"
|
||||
#include "NSNotification.hpp"
|
||||
#include "NSNumber.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSProcessInfo.hpp"
|
||||
#include "NSRange.hpp"
|
||||
#include "NSSet.hpp"
|
||||
#include "NSSharedPtr.hpp"
|
||||
#include "NSString.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
#include "NSURL.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
115
third_party/metal-cpp/Foundation/NSArray.hpp
vendored
Normal file
115
third_party/metal-cpp/Foundation/NSArray.hpp
vendored
Normal file
|
@ -0,0 +1,115 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSArray.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSObject.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
class Array : public Copying<Array>
|
||||
{
|
||||
public:
|
||||
static Array* array();
|
||||
static Array* array(const Object* pObject);
|
||||
static Array* array(const Object* const* pObjects, UInteger count);
|
||||
|
||||
static Array* alloc();
|
||||
|
||||
Array* init();
|
||||
Array* init(const Object* const* pObjects, UInteger count);
|
||||
Array* init(const class Coder* pCoder);
|
||||
|
||||
template <class _Object = Object>
|
||||
_Object* object(UInteger index) const;
|
||||
UInteger count() const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Array::array()
|
||||
{
|
||||
return Object::sendMessage<Array*>(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(array));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Array::array(const Object* pObject)
|
||||
{
|
||||
return Object::sendMessage<Array*>(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(arrayWithObject_), pObject);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Array::array(const Object* const* pObjects, UInteger count)
|
||||
{
|
||||
return Object::sendMessage<Array*>(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(arrayWithObjects_count_), pObjects, count);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Array::alloc()
|
||||
{
|
||||
return NS::Object::alloc<Array>(_NS_PRIVATE_CLS(NSArray));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Array::init()
|
||||
{
|
||||
return NS::Object::init<Array>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Array::init(const Object* const* pObjects, UInteger count)
|
||||
{
|
||||
return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(initWithObjects_count_), pObjects, count);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Array::init(const class Coder* pCoder)
|
||||
{
|
||||
return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::Array::count() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(count));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Object>
|
||||
_NS_INLINE _Object* NS::Array::object(UInteger index) const
|
||||
{
|
||||
return Object::sendMessage<_Object*>(this, _NS_PRIVATE_SEL(objectAtIndex_), index);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
83
third_party/metal-cpp/Foundation/NSAutoreleasePool.hpp
vendored
Normal file
83
third_party/metal-cpp/Foundation/NSAutoreleasePool.hpp
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSAutoreleasePool.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
class AutoreleasePool : public Object
|
||||
{
|
||||
public:
|
||||
static AutoreleasePool* alloc();
|
||||
AutoreleasePool* init();
|
||||
|
||||
void drain();
|
||||
|
||||
void addObject(Object* pObject);
|
||||
|
||||
static void showPools();
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::AutoreleasePool* NS::AutoreleasePool::alloc()
|
||||
{
|
||||
return NS::Object::alloc<AutoreleasePool>(_NS_PRIVATE_CLS(NSAutoreleasePool));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::AutoreleasePool* NS::AutoreleasePool::init()
|
||||
{
|
||||
return NS::Object::init<AutoreleasePool>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::AutoreleasePool::drain()
|
||||
{
|
||||
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(drain));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::AutoreleasePool::addObject(Object* pObject)
|
||||
{
|
||||
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(addObject_), pObject);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::AutoreleasePool::showPools()
|
||||
{
|
||||
Object::sendMessage<void>(_NS_PRIVATE_CLS(NSAutoreleasePool), _NS_PRIVATE_SEL(showPools));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
374
third_party/metal-cpp/Foundation/NSBundle.hpp
vendored
Normal file
374
third_party/metal-cpp/Foundation/NSBundle.hpp
vendored
Normal file
|
@ -0,0 +1,374 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSBundle.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSNotification.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
_NS_CONST(NotificationName, BundleDidLoadNotification);
|
||||
_NS_CONST(NotificationName, BundleResourceRequestLowDiskSpaceNotification);
|
||||
|
||||
class String* LocalizedString(const String* pKey, const String*);
|
||||
class String* LocalizedStringFromTable(const String* pKey, const String* pTbl, const String*);
|
||||
class String* LocalizedStringFromTableInBundle(const String* pKey, const String* pTbl, const class Bundle* pBdle, const String*);
|
||||
class String* LocalizedStringWithDefaultValue(const String* pKey, const String* pTbl, const class Bundle* pBdle, const String* pVal, const String*);
|
||||
|
||||
class Bundle : public Referencing<Bundle>
|
||||
{
|
||||
public:
|
||||
static Bundle* mainBundle();
|
||||
|
||||
static Bundle* bundle(const class String* pPath);
|
||||
static Bundle* bundle(const class URL* pURL);
|
||||
|
||||
static Bundle* alloc();
|
||||
|
||||
Bundle* init(const class String* pPath);
|
||||
Bundle* init(const class URL* pURL);
|
||||
|
||||
class Array* allBundles() const;
|
||||
class Array* allFrameworks() const;
|
||||
|
||||
bool load();
|
||||
bool unload();
|
||||
|
||||
bool isLoaded() const;
|
||||
|
||||
bool preflightAndReturnError(class Error** pError) const;
|
||||
bool loadAndReturnError(class Error** pError);
|
||||
|
||||
class URL* bundleURL() const;
|
||||
class URL* resourceURL() const;
|
||||
class URL* executableURL() const;
|
||||
class URL* URLForAuxiliaryExecutable(const class String* pExecutableName) const;
|
||||
|
||||
class URL* privateFrameworksURL() const;
|
||||
class URL* sharedFrameworksURL() const;
|
||||
class URL* sharedSupportURL() const;
|
||||
class URL* builtInPlugInsURL() const;
|
||||
class URL* appStoreReceiptURL() const;
|
||||
|
||||
class String* bundlePath() const;
|
||||
class String* resourcePath() const;
|
||||
class String* executablePath() const;
|
||||
class String* pathForAuxiliaryExecutable(const class String* pExecutableName) const;
|
||||
|
||||
class String* privateFrameworksPath() const;
|
||||
class String* sharedFrameworksPath() const;
|
||||
class String* sharedSupportPath() const;
|
||||
class String* builtInPlugInsPath() const;
|
||||
|
||||
class String* bundleIdentifier() const;
|
||||
class Dictionary* infoDictionary() const;
|
||||
class Dictionary* localizedInfoDictionary() const;
|
||||
class Object* objectForInfoDictionaryKey(const class String* pKey);
|
||||
|
||||
class String* localizedString(const class String* pKey, const class String* pValue = nullptr, const class String* pTableName = nullptr) const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_PRIVATE_DEF_CONST(NS::NotificationName, BundleDidLoadNotification);
|
||||
_NS_PRIVATE_DEF_CONST(NS::NotificationName, BundleResourceRequestLowDiskSpaceNotification);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::LocalizedString(const String* pKey, const String*)
|
||||
{
|
||||
return Bundle::mainBundle()->localizedString(pKey, nullptr, nullptr);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::LocalizedStringFromTable(const String* pKey, const String* pTbl, const String*)
|
||||
{
|
||||
return Bundle::mainBundle()->localizedString(pKey, nullptr, pTbl);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::LocalizedStringFromTableInBundle(const String* pKey, const String* pTbl, const Bundle* pBdl, const String*)
|
||||
{
|
||||
return pBdl->localizedString(pKey, nullptr, pTbl);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::LocalizedStringWithDefaultValue(const String* pKey, const String* pTbl, const Bundle* pBdl, const String* pVal, const String*)
|
||||
{
|
||||
return pBdl->localizedString(pKey, pVal, pTbl);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Bundle* NS::Bundle::mainBundle()
|
||||
{
|
||||
return Object::sendMessage<Bundle*>(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(mainBundle));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Bundle* NS::Bundle::bundle(const class String* pPath)
|
||||
{
|
||||
return Object::sendMessage<Bundle*>(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(bundleWithPath_), pPath);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Bundle* NS::Bundle::bundle(const class URL* pURL)
|
||||
{
|
||||
return Object::sendMessage<Bundle*>(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(bundleWithURL_), pURL);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Bundle* NS::Bundle::alloc()
|
||||
{
|
||||
return Object::sendMessage<Bundle*>(_NS_PRIVATE_CLS(NSBundle), _NS_PRIVATE_SEL(alloc));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Bundle* NS::Bundle::init(const String* pPath)
|
||||
{
|
||||
return Object::sendMessage<Bundle*>(this, _NS_PRIVATE_SEL(initWithPath_), pPath);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Bundle* NS::Bundle::init(const URL* pURL)
|
||||
{
|
||||
return Object::sendMessage<Bundle*>(this, _NS_PRIVATE_SEL(initWithURL_), pURL);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Bundle::allBundles() const
|
||||
{
|
||||
return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(allBundles));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Bundle::allFrameworks() const
|
||||
{
|
||||
return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(allFrameworks));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Bundle::load()
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(load));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Bundle::unload()
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(unload));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Bundle::isLoaded() const
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isLoaded));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Bundle::preflightAndReturnError(Error** pError) const
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(preflightAndReturnError_), pError);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Bundle::loadAndReturnError(Error** pError)
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(loadAndReturnError_), pError);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::bundleURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(bundleURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::resourceURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(resourceURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::executableURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(executableURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::URLForAuxiliaryExecutable(const String* pExecutableName) const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(URLForAuxiliaryExecutable_), pExecutableName);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::privateFrameworksURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(privateFrameworksURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::sharedFrameworksURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(sharedFrameworksURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::sharedSupportURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(sharedSupportURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::builtInPlugInsURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(builtInPlugInsURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::Bundle::appStoreReceiptURL() const
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(appStoreReceiptURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::bundlePath() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(bundlePath));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::resourcePath() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(resourcePath));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::executablePath() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(executablePath));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::pathForAuxiliaryExecutable(const String* pExecutableName) const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(pathForAuxiliaryExecutable_), pExecutableName);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::privateFrameworksPath() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(privateFrameworksPath));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::sharedFrameworksPath() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(sharedFrameworksPath));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::sharedSupportPath() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(sharedSupportPath));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::builtInPlugInsPath() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(builtInPlugInsPath));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::bundleIdentifier() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(bundleIdentifier));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Bundle::infoDictionary() const
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(this, _NS_PRIVATE_SEL(infoDictionary));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Bundle::localizedInfoDictionary() const
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(this, _NS_PRIVATE_SEL(localizedInfoDictionary));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Object* NS::Bundle::objectForInfoDictionaryKey(const String* pKey)
|
||||
{
|
||||
return Object::sendMessage<Object*>(this, _NS_PRIVATE_SEL(objectForInfoDictionaryKey_), pKey);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Bundle::localizedString(const String* pKey, const String* pValue /* = nullptr */, const String* pTableName /* = nullptr */) const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(localizedStringForKey_value_table_), pKey, pValue, pTableName);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
54
third_party/metal-cpp/Foundation/NSData.hpp
vendored
Normal file
54
third_party/metal-cpp/Foundation/NSData.hpp
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSData.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSObject.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
class Data : public Copying<Data>
|
||||
{
|
||||
public:
|
||||
void* mutableBytes() const;
|
||||
UInteger length() const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void* NS::Data::mutableBytes() const
|
||||
{
|
||||
return Object::sendMessage<void*>(this, _NS_PRIVATE_SEL(mutableBytes));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::Data::length() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(length));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
53
third_party/metal-cpp/Foundation/NSDate.hpp
vendored
Normal file
53
third_party/metal-cpp/Foundation/NSDate.hpp
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSDate.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
|
||||
using TimeInterval = double;
|
||||
|
||||
class Date : public Copying<Date>
|
||||
{
|
||||
public:
|
||||
static Date* dateWithTimeIntervalSinceNow(TimeInterval secs);
|
||||
};
|
||||
|
||||
} // NS
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Date* NS::Date::dateWithTimeIntervalSinceNow(NS::TimeInterval secs)
|
||||
{
|
||||
return NS::Object::sendMessage<NS::Date*>(_NS_PRIVATE_CLS(NSDate), _NS_PRIVATE_SEL(dateWithTimeIntervalSinceNow_), secs);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
45
third_party/metal-cpp/Foundation/NSDefines.hpp
vendored
Normal file
45
third_party/metal-cpp/Foundation/NSDefines.hpp
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSDefines.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define _NS_WEAK_IMPORT __attribute__((weak_import))
|
||||
#ifdef METALCPP_SYMBOL_VISIBILITY_HIDDEN
|
||||
#define _NS_EXPORT __attribute__((visibility("hidden")))
|
||||
#else
|
||||
#define _NS_EXPORT __attribute__((visibility("default")))
|
||||
#endif // METALCPP_SYMBOL_VISIBILITY_HIDDEN
|
||||
#define _NS_EXTERN extern "C" _NS_EXPORT
|
||||
#define _NS_INLINE inline __attribute__((always_inline))
|
||||
#define _NS_PACKED __attribute__((packed))
|
||||
|
||||
#define _NS_CONST(type, name) _NS_EXTERN type const name
|
||||
#define _NS_ENUM(type, name) enum name : type
|
||||
#define _NS_OPTIONS(type, name) \
|
||||
using name = type; \
|
||||
enum : name
|
||||
|
||||
#define _NS_CAST_TO_UINT(value) static_cast<NS::UInteger>(value)
|
||||
#define _NS_VALIDATE_SIZE(ns, name) static_assert(sizeof(ns::name) == sizeof(ns##name), "size mismatch " #ns "::" #name)
|
||||
#define _NS_VALIDATE_ENUM(ns, name) static_assert(_NS_CAST_TO_UINT(ns::name) == _NS_CAST_TO_UINT(ns##name), "value mismatch " #ns "::" #name)
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
128
third_party/metal-cpp/Foundation/NSDictionary.hpp
vendored
Normal file
128
third_party/metal-cpp/Foundation/NSDictionary.hpp
vendored
Normal file
|
@ -0,0 +1,128 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSDictionary.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSEnumerator.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
class Dictionary : public NS::Copying<Dictionary>
|
||||
{
|
||||
public:
|
||||
static Dictionary* dictionary();
|
||||
static Dictionary* dictionary(const Object* pObject, const Object* pKey);
|
||||
static Dictionary* dictionary(const Object* const* pObjects, const Object* const* pKeys, UInteger count);
|
||||
|
||||
static Dictionary* alloc();
|
||||
|
||||
Dictionary* init();
|
||||
Dictionary* init(const Object* const* pObjects, const Object* const* pKeys, UInteger count);
|
||||
Dictionary* init(const class Coder* pCoder);
|
||||
|
||||
template <class _KeyType = Object>
|
||||
Enumerator<_KeyType>* keyEnumerator() const;
|
||||
|
||||
template <class _Object = Object>
|
||||
_Object* object(const Object* pKey) const;
|
||||
UInteger count() const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Dictionary::dictionary()
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(_NS_PRIVATE_CLS(NSDictionary), _NS_PRIVATE_SEL(dictionary));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Dictionary::dictionary(const Object* pObject, const Object* pKey)
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(_NS_PRIVATE_CLS(NSDictionary), _NS_PRIVATE_SEL(dictionaryWithObject_forKey_), pObject, pKey);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Dictionary::dictionary(const Object* const* pObjects, const Object* const* pKeys, UInteger count)
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(_NS_PRIVATE_CLS(NSDictionary), _NS_PRIVATE_SEL(dictionaryWithObjects_forKeys_count_),
|
||||
pObjects, pKeys, count);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Dictionary::alloc()
|
||||
{
|
||||
return NS::Object::alloc<Dictionary>(_NS_PRIVATE_CLS(NSDictionary));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Dictionary::init()
|
||||
{
|
||||
return NS::Object::init<Dictionary>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Dictionary::init(const Object* const* pObjects, const Object* const* pKeys, UInteger count)
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(this, _NS_PRIVATE_SEL(initWithObjects_forKeys_count_), pObjects, pKeys, count);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Dictionary::init(const class Coder* pCoder)
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _KeyType>
|
||||
_NS_INLINE NS::Enumerator<_KeyType>* NS::Dictionary::keyEnumerator() const
|
||||
{
|
||||
return Object::sendMessage<Enumerator<_KeyType>*>(this, _NS_PRIVATE_SEL(keyEnumerator));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Object>
|
||||
_NS_INLINE _Object* NS::Dictionary::object(const Object* pKey) const
|
||||
{
|
||||
return Object::sendMessage<_Object*>(this, _NS_PRIVATE_SEL(objectForKey_), pKey);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::Dictionary::count() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(count));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
78
third_party/metal-cpp/Foundation/NSEnumerator.hpp
vendored
Normal file
78
third_party/metal-cpp/Foundation/NSEnumerator.hpp
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSEnumerator.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSObject.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
struct FastEnumerationState
|
||||
{
|
||||
unsigned long state;
|
||||
Object** itemsPtr;
|
||||
unsigned long* mutationsPtr;
|
||||
unsigned long extra[5];
|
||||
} _NS_PACKED;
|
||||
|
||||
class FastEnumeration : public Referencing<FastEnumeration>
|
||||
{
|
||||
public:
|
||||
NS::UInteger countByEnumerating(FastEnumerationState* pState, Object** pBuffer, NS::UInteger len);
|
||||
};
|
||||
|
||||
template <class _ObjectType>
|
||||
class Enumerator : public Referencing<Enumerator<_ObjectType>, FastEnumeration>
|
||||
{
|
||||
public:
|
||||
_ObjectType* nextObject();
|
||||
class Array* allObjects();
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::FastEnumeration::countByEnumerating(FastEnumerationState* pState, Object** pBuffer, NS::UInteger len)
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(countByEnumeratingWithState_objects_count_), pState, pBuffer, len);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _ObjectType>
|
||||
_NS_INLINE _ObjectType* NS::Enumerator<_ObjectType>::nextObject()
|
||||
{
|
||||
return Object::sendMessage<_ObjectType*>(this, _NS_PRIVATE_SEL(nextObject));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _ObjectType>
|
||||
_NS_INLINE NS::Array* NS::Enumerator<_ObjectType>::allObjects()
|
||||
{
|
||||
return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(allObjects));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
173
third_party/metal-cpp/Foundation/NSError.hpp
vendored
Normal file
173
third_party/metal-cpp/Foundation/NSError.hpp
vendored
Normal file
|
@ -0,0 +1,173 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSError.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
using ErrorDomain = class String*;
|
||||
|
||||
_NS_CONST(ErrorDomain, CocoaErrorDomain);
|
||||
_NS_CONST(ErrorDomain, POSIXErrorDomain);
|
||||
_NS_CONST(ErrorDomain, OSStatusErrorDomain);
|
||||
_NS_CONST(ErrorDomain, MachErrorDomain);
|
||||
|
||||
using ErrorUserInfoKey = class String*;
|
||||
|
||||
_NS_CONST(ErrorUserInfoKey, UnderlyingErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, LocalizedDescriptionKey);
|
||||
_NS_CONST(ErrorUserInfoKey, LocalizedFailureReasonErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, LocalizedRecoverySuggestionErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, LocalizedRecoveryOptionsErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, RecoveryAttempterErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, HelpAnchorErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, DebugDescriptionErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, LocalizedFailureErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, StringEncodingErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, URLErrorKey);
|
||||
_NS_CONST(ErrorUserInfoKey, FilePathErrorKey);
|
||||
|
||||
class Error : public Copying<Error>
|
||||
{
|
||||
public:
|
||||
static Error* error(ErrorDomain domain, Integer code, class Dictionary* pDictionary);
|
||||
|
||||
static Error* alloc();
|
||||
Error* init();
|
||||
Error* init(ErrorDomain domain, Integer code, class Dictionary* pDictionary);
|
||||
|
||||
Integer code() const;
|
||||
ErrorDomain domain() const;
|
||||
class Dictionary* userInfo() const;
|
||||
|
||||
class String* localizedDescription() const;
|
||||
class Array* localizedRecoveryOptions() const;
|
||||
class String* localizedRecoverySuggestion() const;
|
||||
class String* localizedFailureReason() const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorDomain, CocoaErrorDomain);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorDomain, POSIXErrorDomain);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorDomain, OSStatusErrorDomain);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorDomain, MachErrorDomain);
|
||||
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, UnderlyingErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, LocalizedDescriptionKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, LocalizedFailureReasonErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, LocalizedRecoverySuggestionErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, LocalizedRecoveryOptionsErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, RecoveryAttempterErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, HelpAnchorErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, DebugDescriptionErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, LocalizedFailureErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, StringEncodingErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, URLErrorKey);
|
||||
_NS_PRIVATE_DEF_CONST(NS::ErrorUserInfoKey, FilePathErrorKey);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Error* NS::Error::error(ErrorDomain domain, Integer code, class Dictionary* pDictionary)
|
||||
{
|
||||
return Object::sendMessage<Error*>(_NS_PRIVATE_CLS(NSError), _NS_PRIVATE_SEL(errorWithDomain_code_userInfo_), domain, code, pDictionary);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Error* NS::Error::alloc()
|
||||
{
|
||||
return Object::alloc<Error>(_NS_PRIVATE_CLS(NSError));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Error* NS::Error::init()
|
||||
{
|
||||
return Object::init<Error>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Error* NS::Error::init(ErrorDomain domain, Integer code, class Dictionary* pDictionary)
|
||||
{
|
||||
return Object::sendMessage<Error*>(this, _NS_PRIVATE_SEL(initWithDomain_code_userInfo_), domain, code, pDictionary);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Integer NS::Error::code() const
|
||||
{
|
||||
return Object::sendMessage<Integer>(this, _NS_PRIVATE_SEL(code));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::ErrorDomain NS::Error::domain() const
|
||||
{
|
||||
return Object::sendMessage<ErrorDomain>(this, _NS_PRIVATE_SEL(domain));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Error::userInfo() const
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(this, _NS_PRIVATE_SEL(userInfo));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Error::localizedDescription() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(localizedDescription));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::Error::localizedRecoveryOptions() const
|
||||
{
|
||||
return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(localizedRecoveryOptions));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Error::localizedRecoverySuggestion() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(localizedRecoverySuggestion));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Error::localizedFailureReason() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(localizedFailureReason));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
118
third_party/metal-cpp/Foundation/NSLock.hpp
vendored
Normal file
118
third_party/metal-cpp/Foundation/NSLock.hpp
vendored
Normal file
|
@ -0,0 +1,118 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSLock.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
#include "NSDate.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
|
||||
template <class _Class, class _Base = class Object>
|
||||
class Locking : public _Base
|
||||
{
|
||||
public:
|
||||
void lock();
|
||||
void unlock();
|
||||
};
|
||||
|
||||
class Condition : public Locking<Condition>
|
||||
{
|
||||
public:
|
||||
static Condition* alloc();
|
||||
|
||||
Condition* init();
|
||||
|
||||
void wait();
|
||||
bool waitUntilDate(Date* pLimit);
|
||||
void signal();
|
||||
void broadcast();
|
||||
};
|
||||
|
||||
} // NS
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template<class _Class, class _Base /* = NS::Object */>
|
||||
_NS_INLINE void NS::Locking<_Class, _Base>::lock()
|
||||
{
|
||||
NS::Object::sendMessage<void>(this, _NS_PRIVATE_SEL(lock));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template<class _Class, class _Base /* = NS::Object */>
|
||||
_NS_INLINE void NS::Locking<_Class, _Base>::unlock()
|
||||
{
|
||||
NS::Object::sendMessage<void>(this, _NS_PRIVATE_SEL(unlock));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Condition* NS::Condition::alloc()
|
||||
{
|
||||
return NS::Object::alloc<NS::Condition>(_NS_PRIVATE_CLS(NSCondition));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Condition* NS::Condition::init()
|
||||
{
|
||||
return NS::Object::init<NS::Condition>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::Condition::wait()
|
||||
{
|
||||
NS::Object::sendMessage<void>(this, _NS_PRIVATE_SEL(wait));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Condition::waitUntilDate(NS::Date* pLimit)
|
||||
{
|
||||
return NS::Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(waitUntilDate_), pLimit);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::Condition::signal()
|
||||
{
|
||||
NS::Object::sendMessage<void>(this, _NS_PRIVATE_SEL(signal));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::Condition::broadcast()
|
||||
{
|
||||
NS::Object::sendMessage<void>(this, _NS_PRIVATE_SEL(broadcast));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
110
third_party/metal-cpp/Foundation/NSNotification.hpp
vendored
Normal file
110
third_party/metal-cpp/Foundation/NSNotification.hpp
vendored
Normal file
|
@ -0,0 +1,110 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSNotification.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSDictionary.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSString.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
#include <functional>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
using NotificationName = class String*;
|
||||
|
||||
class Notification : public NS::Referencing<Notification>
|
||||
{
|
||||
public:
|
||||
NS::String* name() const;
|
||||
NS::Object* object() const;
|
||||
NS::Dictionary* userInfo() const;
|
||||
};
|
||||
|
||||
using ObserverBlock = void(^)(Notification*);
|
||||
using ObserverFunction = std::function<void(Notification*)>;
|
||||
|
||||
class NotificationCenter : public NS::Referencing<NotificationCenter>
|
||||
{
|
||||
public:
|
||||
static class NotificationCenter* defaultCenter();
|
||||
Object* addObserver(NotificationName name, Object* pObj, void* pQueue, ObserverBlock block);
|
||||
Object* addObserver(NotificationName name, Object* pObj, void* pQueue, ObserverFunction &handler);
|
||||
void removeObserver(Object* pObserver);
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Notification::name() const
|
||||
{
|
||||
return Object::sendMessage<NS::String*>(this, _NS_PRIVATE_SEL(name));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Object* NS::Notification::object() const
|
||||
{
|
||||
return Object::sendMessage<NS::Object*>(this, _NS_PRIVATE_SEL(object));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::Notification::userInfo() const
|
||||
{
|
||||
return Object::sendMessage<NS::Dictionary*>(this, _NS_PRIVATE_SEL(userInfo));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::NotificationCenter* NS::NotificationCenter::defaultCenter()
|
||||
{
|
||||
return NS::Object::sendMessage<NS::NotificationCenter*>(_NS_PRIVATE_CLS(NSNotificationCenter), _NS_PRIVATE_SEL(defaultCenter));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Object* NS::NotificationCenter::addObserver(NS::NotificationName name, Object* pObj, void* pQueue, NS::ObserverBlock block)
|
||||
{
|
||||
return NS::Object::sendMessage<Object*>(this, _NS_PRIVATE_SEL(addObserverName_object_queue_block_), name, pObj, pQueue, block);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Object* NS::NotificationCenter::addObserver(NS::NotificationName name, Object* pObj, void* pQueue, NS::ObserverFunction &handler)
|
||||
{
|
||||
__block ObserverFunction blockFunction = handler;
|
||||
|
||||
return addObserver(name, pObj, pQueue, ^(NS::Notification* pNotif) {blockFunction(pNotif);});
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::NotificationCenter::removeObserver(Object* pObserver)
|
||||
{
|
||||
return NS::Object::sendMessage<void>(this, _NS_PRIVATE_SEL(removeObserver_), pObserver);
|
||||
}
|
||||
|
501
third_party/metal-cpp/Foundation/NSNumber.hpp
vendored
Normal file
501
third_party/metal-cpp/Foundation/NSNumber.hpp
vendored
Normal file
|
@ -0,0 +1,501 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSNumber.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSObjCRuntime.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
class Value : public Copying<Value>
|
||||
{
|
||||
public:
|
||||
static Value* value(const void* pValue, const char* pType);
|
||||
static Value* value(const void* pPointer);
|
||||
|
||||
static Value* alloc();
|
||||
|
||||
Value* init(const void* pValue, const char* pType);
|
||||
Value* init(const class Coder* pCoder);
|
||||
|
||||
void getValue(void* pValue, UInteger size) const;
|
||||
const char* objCType() const;
|
||||
|
||||
bool isEqualToValue(Value* pValue) const;
|
||||
void* pointerValue() const;
|
||||
};
|
||||
|
||||
class Number : public Copying<Number, Value>
|
||||
{
|
||||
public:
|
||||
static Number* number(char value);
|
||||
static Number* number(unsigned char value);
|
||||
static Number* number(short value);
|
||||
static Number* number(unsigned short value);
|
||||
static Number* number(int value);
|
||||
static Number* number(unsigned int value);
|
||||
static Number* number(long value);
|
||||
static Number* number(unsigned long value);
|
||||
static Number* number(long long value);
|
||||
static Number* number(unsigned long long value);
|
||||
static Number* number(float value);
|
||||
static Number* number(double value);
|
||||
static Number* number(bool value);
|
||||
|
||||
static Number* alloc();
|
||||
|
||||
Number* init(const class Coder* pCoder);
|
||||
Number* init(char value);
|
||||
Number* init(unsigned char value);
|
||||
Number* init(short value);
|
||||
Number* init(unsigned short value);
|
||||
Number* init(int value);
|
||||
Number* init(unsigned int value);
|
||||
Number* init(long value);
|
||||
Number* init(unsigned long value);
|
||||
Number* init(long long value);
|
||||
Number* init(unsigned long long value);
|
||||
Number* init(float value);
|
||||
Number* init(double value);
|
||||
Number* init(bool value);
|
||||
|
||||
char charValue() const;
|
||||
unsigned char unsignedCharValue() const;
|
||||
short shortValue() const;
|
||||
unsigned short unsignedShortValue() const;
|
||||
int intValue() const;
|
||||
unsigned int unsignedIntValue() const;
|
||||
long longValue() const;
|
||||
unsigned long unsignedLongValue() const;
|
||||
long long longLongValue() const;
|
||||
unsigned long long unsignedLongLongValue() const;
|
||||
float floatValue() const;
|
||||
double doubleValue() const;
|
||||
bool boolValue() const;
|
||||
Integer integerValue() const;
|
||||
UInteger unsignedIntegerValue() const;
|
||||
class String* stringValue() const;
|
||||
|
||||
ComparisonResult compare(const Number* pOtherNumber) const;
|
||||
bool isEqualToNumber(const Number* pNumber) const;
|
||||
|
||||
class String* descriptionWithLocale(const Object* pLocale) const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Value* NS::Value::value(const void* pValue, const char* pType)
|
||||
{
|
||||
return Object::sendMessage<Value*>(_NS_PRIVATE_CLS(NSValue), _NS_PRIVATE_SEL(valueWithBytes_objCType_), pValue, pType);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Value* NS::Value::value(const void* pPointer)
|
||||
{
|
||||
return Object::sendMessage<Value*>(_NS_PRIVATE_CLS(NSValue), _NS_PRIVATE_SEL(valueWithPointer_), pPointer);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Value* NS::Value::alloc()
|
||||
{
|
||||
return NS::Object::alloc<Value>(_NS_PRIVATE_CLS(NSValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Value* NS::Value::init(const void* pValue, const char* pType)
|
||||
{
|
||||
return Object::sendMessage<Value*>(this, _NS_PRIVATE_SEL(initWithBytes_objCType_), pValue, pType);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Value* NS::Value::init(const class Coder* pCoder)
|
||||
{
|
||||
return Object::sendMessage<Value*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::Value::getValue(void* pValue, UInteger size) const
|
||||
{
|
||||
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(getValue_size_), pValue, size);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE const char* NS::Value::objCType() const
|
||||
{
|
||||
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(objCType));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Value::isEqualToValue(Value* pValue) const
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToValue_), pValue);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void* NS::Value::pointerValue() const
|
||||
{
|
||||
return Object::sendMessage<void*>(this, _NS_PRIVATE_SEL(pointerValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(char value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithChar_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(unsigned char value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedChar_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(short value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithShort_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(unsigned short value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedShort_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(int value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithInt_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(unsigned int value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedInt_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(unsigned long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(long long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithLongLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(unsigned long long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithUnsignedLongLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(float value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithFloat_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(double value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithDouble_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::number(bool value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(_NS_PRIVATE_CLS(NSNumber), _NS_PRIVATE_SEL(numberWithBool_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::alloc()
|
||||
{
|
||||
return NS::Object::alloc<Number>(_NS_PRIVATE_CLS(NSNumber));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(const Coder* pCoder)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(char value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithChar_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(unsigned char value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedChar_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(short value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithShort_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(unsigned short value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedShort_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(int value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithInt_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(unsigned int value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedInt_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(unsigned long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(long long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithLongLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(unsigned long long value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithUnsignedLongLong_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(float value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithFloat_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(double value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithDouble_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Number* NS::Number::init(bool value)
|
||||
{
|
||||
return Object::sendMessage<Number*>(this, _NS_PRIVATE_SEL(initWithBool_), value);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE char NS::Number::charValue() const
|
||||
{
|
||||
return Object::sendMessage<char>(this, _NS_PRIVATE_SEL(charValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE unsigned char NS::Number::unsignedCharValue() const
|
||||
{
|
||||
return Object::sendMessage<unsigned char>(this, _NS_PRIVATE_SEL(unsignedCharValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE short NS::Number::shortValue() const
|
||||
{
|
||||
return Object::sendMessage<short>(this, _NS_PRIVATE_SEL(shortValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE unsigned short NS::Number::unsignedShortValue() const
|
||||
{
|
||||
return Object::sendMessage<unsigned short>(this, _NS_PRIVATE_SEL(unsignedShortValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE int NS::Number::intValue() const
|
||||
{
|
||||
return Object::sendMessage<int>(this, _NS_PRIVATE_SEL(intValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE unsigned int NS::Number::unsignedIntValue() const
|
||||
{
|
||||
return Object::sendMessage<unsigned int>(this, _NS_PRIVATE_SEL(unsignedIntValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE long NS::Number::longValue() const
|
||||
{
|
||||
return Object::sendMessage<long>(this, _NS_PRIVATE_SEL(longValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE unsigned long NS::Number::unsignedLongValue() const
|
||||
{
|
||||
return Object::sendMessage<unsigned long>(this, _NS_PRIVATE_SEL(unsignedLongValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE long long NS::Number::longLongValue() const
|
||||
{
|
||||
return Object::sendMessage<long long>(this, _NS_PRIVATE_SEL(longLongValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE unsigned long long NS::Number::unsignedLongLongValue() const
|
||||
{
|
||||
return Object::sendMessage<unsigned long long>(this, _NS_PRIVATE_SEL(unsignedLongLongValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE float NS::Number::floatValue() const
|
||||
{
|
||||
return Object::sendMessage<float>(this, _NS_PRIVATE_SEL(floatValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE double NS::Number::doubleValue() const
|
||||
{
|
||||
return Object::sendMessage<double>(this, _NS_PRIVATE_SEL(doubleValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Number::boolValue() const
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(boolValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Integer NS::Number::integerValue() const
|
||||
{
|
||||
return Object::sendMessage<Integer>(this, _NS_PRIVATE_SEL(integerValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::Number::unsignedIntegerValue() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(unsignedIntegerValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Number::stringValue() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(stringValue));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::ComparisonResult NS::Number::compare(const Number* pOtherNumber) const
|
||||
{
|
||||
return Object::sendMessage<ComparisonResult>(this, _NS_PRIVATE_SEL(compare_), pOtherNumber);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Number::isEqualToNumber(const Number* pNumber) const
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToNumber_), pNumber);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Number::descriptionWithLocale(const Object* pLocale) const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(descriptionWithLocale_), pLocale);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
43
third_party/metal-cpp/Foundation/NSObjCRuntime.hpp
vendored
Normal file
43
third_party/metal-cpp/Foundation/NSObjCRuntime.hpp
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSObjCRuntime.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
|
||||
_NS_ENUM(Integer, ComparisonResult) {
|
||||
OrderedAscending = -1L,
|
||||
OrderedSame,
|
||||
OrderedDescending
|
||||
};
|
||||
|
||||
const Integer NotFound = IntegerMax;
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
302
third_party/metal-cpp/Foundation/NSObject.hpp
vendored
Normal file
302
third_party/metal-cpp/Foundation/NSObject.hpp
vendored
Normal file
|
@ -0,0 +1,302 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSObject.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
#include <objc/message.h>
|
||||
#include <objc/runtime.h>
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
template <class _Class, class _Base = class Object>
|
||||
class _NS_EXPORT Referencing : public _Base
|
||||
{
|
||||
public:
|
||||
_Class* retain();
|
||||
void release();
|
||||
|
||||
_Class* autorelease();
|
||||
|
||||
UInteger retainCount() const;
|
||||
};
|
||||
|
||||
template <class _Class, class _Base = class Object>
|
||||
class Copying : public Referencing<_Class, _Base>
|
||||
{
|
||||
public:
|
||||
_Class* copy() const;
|
||||
};
|
||||
|
||||
template <class _Class, class _Base = class Object>
|
||||
class SecureCoding : public Referencing<_Class, _Base>
|
||||
{
|
||||
};
|
||||
|
||||
class Object : public Referencing<Object, objc_object>
|
||||
{
|
||||
public:
|
||||
UInteger hash() const;
|
||||
bool isEqual(const Object* pObject) const;
|
||||
|
||||
class String* description() const;
|
||||
class String* debugDescription() const;
|
||||
|
||||
protected:
|
||||
friend class Referencing<Object, objc_object>;
|
||||
|
||||
template <class _Class>
|
||||
static _Class* alloc(const char* pClassName);
|
||||
template <class _Class>
|
||||
static _Class* alloc(const void* pClass);
|
||||
template <class _Class>
|
||||
_Class* init();
|
||||
|
||||
template <class _Dst>
|
||||
static _Dst bridgingCast(const void* pObj);
|
||||
static class MethodSignature* methodSignatureForSelector(const void* pObj, SEL selector);
|
||||
static bool respondsToSelector(const void* pObj, SEL selector);
|
||||
template <typename _Type>
|
||||
static constexpr bool doesRequireMsgSendStret();
|
||||
template <typename _Ret, typename... _Args>
|
||||
static _Ret sendMessage(const void* pObj, SEL selector, _Args... args);
|
||||
template <typename _Ret, typename... _Args>
|
||||
static _Ret sendMessageSafe(const void* pObj, SEL selector, _Args... args);
|
||||
|
||||
private:
|
||||
Object() = delete;
|
||||
Object(const Object&) = delete;
|
||||
~Object() = delete;
|
||||
|
||||
Object& operator=(const Object&) = delete;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class, class _Base /* = Object */>
|
||||
_NS_INLINE _Class* NS::Referencing<_Class, _Base>::retain()
|
||||
{
|
||||
return Object::sendMessage<_Class*>(this, _NS_PRIVATE_SEL(retain));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class, class _Base /* = Object */>
|
||||
_NS_INLINE void NS::Referencing<_Class, _Base>::release()
|
||||
{
|
||||
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(release));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class, class _Base /* = Object */>
|
||||
_NS_INLINE _Class* NS::Referencing<_Class, _Base>::autorelease()
|
||||
{
|
||||
return Object::sendMessage<_Class*>(this, _NS_PRIVATE_SEL(autorelease));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class, class _Base /* = Object */>
|
||||
_NS_INLINE NS::UInteger NS::Referencing<_Class, _Base>::retainCount() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(retainCount));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class, class _Base /* = Object */>
|
||||
_NS_INLINE _Class* NS::Copying<_Class, _Base>::copy() const
|
||||
{
|
||||
return Object::sendMessage<_Class*>(this, _NS_PRIVATE_SEL(copy));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Dst>
|
||||
_NS_INLINE _Dst NS::Object::bridgingCast(const void* pObj)
|
||||
{
|
||||
#ifdef __OBJC__
|
||||
return (__bridge _Dst)pObj;
|
||||
#else
|
||||
return (_Dst)pObj;
|
||||
#endif // __OBJC__
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <typename _Type>
|
||||
_NS_INLINE constexpr bool NS::Object::doesRequireMsgSendStret()
|
||||
{
|
||||
#if (defined(__i386__) || defined(__x86_64__))
|
||||
constexpr size_t kStructLimit = (sizeof(std::uintptr_t) << 1);
|
||||
|
||||
return sizeof(_Type) > kStructLimit;
|
||||
#elif defined(__arm64__)
|
||||
return false;
|
||||
#elif defined(__arm__)
|
||||
constexpr size_t kStructLimit = sizeof(std::uintptr_t);
|
||||
|
||||
return std::is_class(_Type) && (sizeof(_Type) > kStructLimit);
|
||||
#else
|
||||
#error "Unsupported architecture!"
|
||||
#endif
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <>
|
||||
_NS_INLINE constexpr bool NS::Object::doesRequireMsgSendStret<void>()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <typename _Ret, typename... _Args>
|
||||
_NS_INLINE _Ret NS::Object::sendMessage(const void* pObj, SEL selector, _Args... args)
|
||||
{
|
||||
#if (defined(__i386__) || defined(__x86_64__))
|
||||
if constexpr (std::is_floating_point<_Ret>())
|
||||
{
|
||||
using SendMessageProcFpret = _Ret (*)(const void*, SEL, _Args...);
|
||||
|
||||
const SendMessageProcFpret pProc = reinterpret_cast<SendMessageProcFpret>(&objc_msgSend_fpret);
|
||||
|
||||
return (*pProc)(pObj, selector, args...);
|
||||
}
|
||||
else
|
||||
#endif // ( defined( __i386__ ) || defined( __x86_64__ ) )
|
||||
#if !defined(__arm64__)
|
||||
if constexpr (doesRequireMsgSendStret<_Ret>())
|
||||
{
|
||||
using SendMessageProcStret = void (*)(_Ret*, const void*, SEL, _Args...);
|
||||
|
||||
const SendMessageProcStret pProc = reinterpret_cast<SendMessageProcStret>(&objc_msgSend_stret);
|
||||
_Ret ret;
|
||||
|
||||
(*pProc)(&ret, pObj, selector, args...);
|
||||
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
#endif // !defined( __arm64__ )
|
||||
{
|
||||
using SendMessageProc = _Ret (*)(const void*, SEL, _Args...);
|
||||
|
||||
const SendMessageProc pProc = reinterpret_cast<SendMessageProc>(&objc_msgSend);
|
||||
|
||||
return (*pProc)(pObj, selector, args...);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::MethodSignature* NS::Object::methodSignatureForSelector(const void* pObj, SEL selector)
|
||||
{
|
||||
return sendMessage<MethodSignature*>(pObj, _NS_PRIVATE_SEL(methodSignatureForSelector_), selector);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Object::respondsToSelector(const void* pObj, SEL selector)
|
||||
{
|
||||
return sendMessage<bool>(pObj, _NS_PRIVATE_SEL(respondsToSelector_), selector);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <typename _Ret, typename... _Args>
|
||||
_NS_INLINE _Ret NS::Object::sendMessageSafe(const void* pObj, SEL selector, _Args... args)
|
||||
{
|
||||
if ((respondsToSelector(pObj, selector)) || (nullptr != methodSignatureForSelector(pObj, selector)))
|
||||
{
|
||||
return sendMessage<_Ret>(pObj, selector, args...);
|
||||
}
|
||||
|
||||
if constexpr (!std::is_void<_Ret>::value)
|
||||
{
|
||||
return _Ret(0);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE _Class* NS::Object::alloc(const char* pClassName)
|
||||
{
|
||||
return sendMessage<_Class*>(objc_lookUpClass(pClassName), _NS_PRIVATE_SEL(alloc));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE _Class* NS::Object::alloc(const void* pClass)
|
||||
{
|
||||
return sendMessage<_Class*>(pClass, _NS_PRIVATE_SEL(alloc));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE _Class* NS::Object::init()
|
||||
{
|
||||
return sendMessage<_Class*>(this, _NS_PRIVATE_SEL(init));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::Object::hash() const
|
||||
{
|
||||
return sendMessage<UInteger>(this, _NS_PRIVATE_SEL(hash));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Object::isEqual(const Object* pObject) const
|
||||
{
|
||||
return sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqual_), pObject);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Object::description() const
|
||||
{
|
||||
return sendMessage<String*>(this, _NS_PRIVATE_SEL(description));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::Object::debugDescription() const
|
||||
{
|
||||
return sendMessageSafe<String*>(this, _NS_PRIVATE_SEL(debugDescription));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
507
third_party/metal-cpp/Foundation/NSPrivate.hpp
vendored
Normal file
507
third_party/metal-cpp/Foundation/NSPrivate.hpp
vendored
Normal file
|
@ -0,0 +1,507 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSPrivate.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include <objc/runtime.h>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define _NS_PRIVATE_CLS(symbol) (Private::Class::s_k##symbol)
|
||||
#define _NS_PRIVATE_SEL(accessor) (Private::Selector::s_k##accessor)
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#if defined(NS_PRIVATE_IMPLEMENTATION)
|
||||
|
||||
#ifdef METALCPP_SYMBOL_VISIBILITY_HIDDEN
|
||||
#define _NS_PRIVATE_VISIBILITY __attribute__((visibility("hidden")))
|
||||
#else
|
||||
#define _NS_PRIVATE_VISIBILITY __attribute__((visibility("default")))
|
||||
#endif // METALCPP_SYMBOL_VISIBILITY_HIDDEN
|
||||
|
||||
#define _NS_PRIVATE_IMPORT __attribute__((weak_import))
|
||||
|
||||
#ifdef __OBJC__
|
||||
#define _NS_PRIVATE_OBJC_LOOKUP_CLASS(symbol) ((__bridge void*)objc_lookUpClass(#symbol))
|
||||
#define _NS_PRIVATE_OBJC_GET_PROTOCOL(symbol) ((__bridge void*)objc_getProtocol(#symbol))
|
||||
#else
|
||||
#define _NS_PRIVATE_OBJC_LOOKUP_CLASS(symbol) objc_lookUpClass(#symbol)
|
||||
#define _NS_PRIVATE_OBJC_GET_PROTOCOL(symbol) objc_getProtocol(#symbol)
|
||||
#endif // __OBJC__
|
||||
|
||||
#define _NS_PRIVATE_DEF_CLS(symbol) void* s_k##symbol _NS_PRIVATE_VISIBILITY = _NS_PRIVATE_OBJC_LOOKUP_CLASS(symbol)
|
||||
#define _NS_PRIVATE_DEF_PRO(symbol) void* s_k##symbol _NS_PRIVATE_VISIBILITY = _NS_PRIVATE_OBJC_GET_PROTOCOL(symbol)
|
||||
#define _NS_PRIVATE_DEF_SEL(accessor, symbol) SEL s_k##accessor _NS_PRIVATE_VISIBILITY = sel_registerName(symbol)
|
||||
#define _NS_PRIVATE_DEF_CONST(type, symbol) \
|
||||
_NS_EXTERN type const NS##symbol _NS_PRIVATE_IMPORT; \
|
||||
type const NS::symbol = (nullptr != &NS##symbol) ? NS##symbol : nullptr
|
||||
|
||||
#else
|
||||
|
||||
#define _NS_PRIVATE_DEF_CLS(symbol) extern void* s_k##symbol
|
||||
#define _NS_PRIVATE_DEF_PRO(symbol) extern void* s_k##symbol
|
||||
#define _NS_PRIVATE_DEF_SEL(accessor, symbol) extern SEL s_k##accessor
|
||||
#define _NS_PRIVATE_DEF_CONST(type, symbol) extern type const NS::symbol
|
||||
|
||||
#endif // NS_PRIVATE_IMPLEMENTATION
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
namespace Private
|
||||
{
|
||||
namespace Class
|
||||
{
|
||||
|
||||
_NS_PRIVATE_DEF_CLS(NSArray);
|
||||
_NS_PRIVATE_DEF_CLS(NSAutoreleasePool);
|
||||
_NS_PRIVATE_DEF_CLS(NSBundle);
|
||||
_NS_PRIVATE_DEF_CLS(NSCondition);
|
||||
_NS_PRIVATE_DEF_CLS(NSDate);
|
||||
_NS_PRIVATE_DEF_CLS(NSDictionary);
|
||||
_NS_PRIVATE_DEF_CLS(NSError);
|
||||
_NS_PRIVATE_DEF_CLS(NSNotificationCenter);
|
||||
_NS_PRIVATE_DEF_CLS(NSNumber);
|
||||
_NS_PRIVATE_DEF_CLS(NSObject);
|
||||
_NS_PRIVATE_DEF_CLS(NSProcessInfo);
|
||||
_NS_PRIVATE_DEF_CLS(NSSet);
|
||||
_NS_PRIVATE_DEF_CLS(NSString);
|
||||
_NS_PRIVATE_DEF_CLS(NSURL);
|
||||
_NS_PRIVATE_DEF_CLS(NSValue);
|
||||
|
||||
} // Class
|
||||
} // Private
|
||||
} // MTL
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
namespace Private
|
||||
{
|
||||
namespace Protocol
|
||||
{
|
||||
|
||||
} // Protocol
|
||||
} // Private
|
||||
} // NS
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
namespace Private
|
||||
{
|
||||
namespace Selector
|
||||
{
|
||||
|
||||
_NS_PRIVATE_DEF_SEL(addObject_,
|
||||
"addObject:");
|
||||
_NS_PRIVATE_DEF_SEL(addObserverName_object_queue_block_,
|
||||
"addObserverForName:object:queue:usingBlock:");
|
||||
_NS_PRIVATE_DEF_SEL(activeProcessorCount,
|
||||
"activeProcessorCount");
|
||||
_NS_PRIVATE_DEF_SEL(allBundles,
|
||||
"allBundles");
|
||||
_NS_PRIVATE_DEF_SEL(allFrameworks,
|
||||
"allFrameworks");
|
||||
_NS_PRIVATE_DEF_SEL(allObjects,
|
||||
"allObjects");
|
||||
_NS_PRIVATE_DEF_SEL(alloc,
|
||||
"alloc");
|
||||
_NS_PRIVATE_DEF_SEL(appStoreReceiptURL,
|
||||
"appStoreReceiptURL");
|
||||
_NS_PRIVATE_DEF_SEL(arguments,
|
||||
"arguments");
|
||||
_NS_PRIVATE_DEF_SEL(array,
|
||||
"array");
|
||||
_NS_PRIVATE_DEF_SEL(arrayWithObject_,
|
||||
"arrayWithObject:");
|
||||
_NS_PRIVATE_DEF_SEL(arrayWithObjects_count_,
|
||||
"arrayWithObjects:count:");
|
||||
_NS_PRIVATE_DEF_SEL(automaticTerminationSupportEnabled,
|
||||
"automaticTerminationSupportEnabled");
|
||||
_NS_PRIVATE_DEF_SEL(autorelease,
|
||||
"autorelease");
|
||||
_NS_PRIVATE_DEF_SEL(beginActivityWithOptions_reason_,
|
||||
"beginActivityWithOptions:reason:");
|
||||
_NS_PRIVATE_DEF_SEL(boolValue,
|
||||
"boolValue");
|
||||
_NS_PRIVATE_DEF_SEL(broadcast,
|
||||
"broadcast");
|
||||
_NS_PRIVATE_DEF_SEL(builtInPlugInsPath,
|
||||
"builtInPlugInsPath");
|
||||
_NS_PRIVATE_DEF_SEL(builtInPlugInsURL,
|
||||
"builtInPlugInsURL");
|
||||
_NS_PRIVATE_DEF_SEL(bundleIdentifier,
|
||||
"bundleIdentifier");
|
||||
_NS_PRIVATE_DEF_SEL(bundlePath,
|
||||
"bundlePath");
|
||||
_NS_PRIVATE_DEF_SEL(bundleURL,
|
||||
"bundleURL");
|
||||
_NS_PRIVATE_DEF_SEL(bundleWithPath_,
|
||||
"bundleWithPath:");
|
||||
_NS_PRIVATE_DEF_SEL(bundleWithURL_,
|
||||
"bundleWithURL:");
|
||||
_NS_PRIVATE_DEF_SEL(caseInsensitiveCompare_,
|
||||
"caseInsensitiveCompare:");
|
||||
_NS_PRIVATE_DEF_SEL(characterAtIndex_,
|
||||
"characterAtIndex:");
|
||||
_NS_PRIVATE_DEF_SEL(charValue,
|
||||
"charValue");
|
||||
_NS_PRIVATE_DEF_SEL(countByEnumeratingWithState_objects_count_,
|
||||
"countByEnumeratingWithState:objects:count:");
|
||||
_NS_PRIVATE_DEF_SEL(cStringUsingEncoding_,
|
||||
"cStringUsingEncoding:");
|
||||
_NS_PRIVATE_DEF_SEL(code,
|
||||
"code");
|
||||
_NS_PRIVATE_DEF_SEL(compare_,
|
||||
"compare:");
|
||||
_NS_PRIVATE_DEF_SEL(copy,
|
||||
"copy");
|
||||
_NS_PRIVATE_DEF_SEL(count,
|
||||
"count");
|
||||
_NS_PRIVATE_DEF_SEL(dateWithTimeIntervalSinceNow_,
|
||||
"dateWithTimeIntervalSinceNow:");
|
||||
_NS_PRIVATE_DEF_SEL(defaultCenter,
|
||||
"defaultCenter");
|
||||
_NS_PRIVATE_DEF_SEL(descriptionWithLocale_,
|
||||
"descriptionWithLocale:");
|
||||
_NS_PRIVATE_DEF_SEL(disableAutomaticTermination_,
|
||||
"disableAutomaticTermination:");
|
||||
_NS_PRIVATE_DEF_SEL(disableSuddenTermination,
|
||||
"disableSuddenTermination");
|
||||
_NS_PRIVATE_DEF_SEL(debugDescription,
|
||||
"debugDescription");
|
||||
_NS_PRIVATE_DEF_SEL(description,
|
||||
"description");
|
||||
_NS_PRIVATE_DEF_SEL(dictionary,
|
||||
"dictionary");
|
||||
_NS_PRIVATE_DEF_SEL(dictionaryWithObject_forKey_,
|
||||
"dictionaryWithObject:forKey:");
|
||||
_NS_PRIVATE_DEF_SEL(dictionaryWithObjects_forKeys_count_,
|
||||
"dictionaryWithObjects:forKeys:count:");
|
||||
_NS_PRIVATE_DEF_SEL(domain,
|
||||
"domain");
|
||||
_NS_PRIVATE_DEF_SEL(doubleValue,
|
||||
"doubleValue");
|
||||
_NS_PRIVATE_DEF_SEL(drain,
|
||||
"drain");
|
||||
_NS_PRIVATE_DEF_SEL(enableAutomaticTermination_,
|
||||
"enableAutomaticTermination:");
|
||||
_NS_PRIVATE_DEF_SEL(enableSuddenTermination,
|
||||
"enableSuddenTermination");
|
||||
_NS_PRIVATE_DEF_SEL(endActivity_,
|
||||
"endActivity:");
|
||||
_NS_PRIVATE_DEF_SEL(environment,
|
||||
"environment");
|
||||
_NS_PRIVATE_DEF_SEL(errorWithDomain_code_userInfo_,
|
||||
"errorWithDomain:code:userInfo:");
|
||||
_NS_PRIVATE_DEF_SEL(executablePath,
|
||||
"executablePath");
|
||||
_NS_PRIVATE_DEF_SEL(executableURL,
|
||||
"executableURL");
|
||||
_NS_PRIVATE_DEF_SEL(fileSystemRepresentation,
|
||||
"fileSystemRepresentation");
|
||||
_NS_PRIVATE_DEF_SEL(fileURLWithPath_,
|
||||
"fileURLWithPath:");
|
||||
_NS_PRIVATE_DEF_SEL(floatValue,
|
||||
"floatValue");
|
||||
_NS_PRIVATE_DEF_SEL(fullUserName,
|
||||
"fullUserName");
|
||||
_NS_PRIVATE_DEF_SEL(getValue_size_,
|
||||
"getValue:size:");
|
||||
_NS_PRIVATE_DEF_SEL(globallyUniqueString,
|
||||
"globallyUniqueString");
|
||||
_NS_PRIVATE_DEF_SEL(hash,
|
||||
"hash");
|
||||
_NS_PRIVATE_DEF_SEL(hostName,
|
||||
"hostName");
|
||||
_NS_PRIVATE_DEF_SEL(infoDictionary,
|
||||
"infoDictionary");
|
||||
_NS_PRIVATE_DEF_SEL(init,
|
||||
"init");
|
||||
_NS_PRIVATE_DEF_SEL(initFileURLWithPath_,
|
||||
"initFileURLWithPath:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithBool_,
|
||||
"initWithBool:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithBytes_objCType_,
|
||||
"initWithBytes:objCType:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithBytesNoCopy_length_encoding_freeWhenDone_,
|
||||
"initWithBytesNoCopy:length:encoding:freeWhenDone:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithChar_,
|
||||
"initWithChar:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithCoder_,
|
||||
"initWithCoder:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithCString_encoding_,
|
||||
"initWithCString:encoding:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithDomain_code_userInfo_,
|
||||
"initWithDomain:code:userInfo:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithDouble_,
|
||||
"initWithDouble:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithFloat_,
|
||||
"initWithFloat:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithInt_,
|
||||
"initWithInt:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithLong_,
|
||||
"initWithLong:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithLongLong_,
|
||||
"initWithLongLong:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithObjects_count_,
|
||||
"initWithObjects:count:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithObjects_forKeys_count_,
|
||||
"initWithObjects:forKeys:count:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithPath_,
|
||||
"initWithPath:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithShort_,
|
||||
"initWithShort:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithString_,
|
||||
"initWithString:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithUnsignedChar_,
|
||||
"initWithUnsignedChar:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithUnsignedInt_,
|
||||
"initWithUnsignedInt:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithUnsignedLong_,
|
||||
"initWithUnsignedLong:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithUnsignedLongLong_,
|
||||
"initWithUnsignedLongLong:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithUnsignedShort_,
|
||||
"initWithUnsignedShort:");
|
||||
_NS_PRIVATE_DEF_SEL(initWithURL_,
|
||||
"initWithURL:");
|
||||
_NS_PRIVATE_DEF_SEL(integerValue,
|
||||
"integerValue");
|
||||
_NS_PRIVATE_DEF_SEL(intValue,
|
||||
"intValue");
|
||||
_NS_PRIVATE_DEF_SEL(isEqual_,
|
||||
"isEqual:");
|
||||
_NS_PRIVATE_DEF_SEL(isEqualToNumber_,
|
||||
"isEqualToNumber:");
|
||||
_NS_PRIVATE_DEF_SEL(isEqualToString_,
|
||||
"isEqualToString:");
|
||||
_NS_PRIVATE_DEF_SEL(isEqualToValue_,
|
||||
"isEqualToValue:");
|
||||
_NS_PRIVATE_DEF_SEL(isiOSAppOnMac,
|
||||
"isiOSAppOnMac");
|
||||
_NS_PRIVATE_DEF_SEL(isLoaded,
|
||||
"isLoaded");
|
||||
_NS_PRIVATE_DEF_SEL(isLowPowerModeEnabled,
|
||||
"isLowPowerModeEnabled");
|
||||
_NS_PRIVATE_DEF_SEL(isMacCatalystApp,
|
||||
"isMacCatalystApp");
|
||||
_NS_PRIVATE_DEF_SEL(isOperatingSystemAtLeastVersion_,
|
||||
"isOperatingSystemAtLeastVersion:");
|
||||
_NS_PRIVATE_DEF_SEL(keyEnumerator,
|
||||
"keyEnumerator");
|
||||
_NS_PRIVATE_DEF_SEL(length,
|
||||
"length");
|
||||
_NS_PRIVATE_DEF_SEL(lengthOfBytesUsingEncoding_,
|
||||
"lengthOfBytesUsingEncoding:");
|
||||
_NS_PRIVATE_DEF_SEL(load,
|
||||
"load");
|
||||
_NS_PRIVATE_DEF_SEL(loadAndReturnError_,
|
||||
"loadAndReturnError:");
|
||||
_NS_PRIVATE_DEF_SEL(localizedDescription,
|
||||
"localizedDescription");
|
||||
_NS_PRIVATE_DEF_SEL(localizedFailureReason,
|
||||
"localizedFailureReason");
|
||||
_NS_PRIVATE_DEF_SEL(localizedInfoDictionary,
|
||||
"localizedInfoDictionary");
|
||||
_NS_PRIVATE_DEF_SEL(localizedRecoveryOptions,
|
||||
"localizedRecoveryOptions");
|
||||
_NS_PRIVATE_DEF_SEL(localizedRecoverySuggestion,
|
||||
"localizedRecoverySuggestion");
|
||||
_NS_PRIVATE_DEF_SEL(localizedStringForKey_value_table_,
|
||||
"localizedStringForKey:value:table:");
|
||||
_NS_PRIVATE_DEF_SEL(lock,
|
||||
"lock");
|
||||
_NS_PRIVATE_DEF_SEL(longValue,
|
||||
"longValue");
|
||||
_NS_PRIVATE_DEF_SEL(longLongValue,
|
||||
"longLongValue");
|
||||
_NS_PRIVATE_DEF_SEL(mainBundle,
|
||||
"mainBundle");
|
||||
_NS_PRIVATE_DEF_SEL(maximumLengthOfBytesUsingEncoding_,
|
||||
"maximumLengthOfBytesUsingEncoding:");
|
||||
_NS_PRIVATE_DEF_SEL(methodSignatureForSelector_,
|
||||
"methodSignatureForSelector:");
|
||||
_NS_PRIVATE_DEF_SEL(mutableBytes,
|
||||
"mutableBytes");
|
||||
_NS_PRIVATE_DEF_SEL(name,
|
||||
"name");
|
||||
_NS_PRIVATE_DEF_SEL(nextObject,
|
||||
"nextObject");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithBool_,
|
||||
"numberWithBool:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithChar_,
|
||||
"numberWithChar:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithDouble_,
|
||||
"numberWithDouble:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithFloat_,
|
||||
"numberWithFloat:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithInt_,
|
||||
"numberWithInt:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithLong_,
|
||||
"numberWithLong:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithLongLong_,
|
||||
"numberWithLongLong:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithShort_,
|
||||
"numberWithShort:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithUnsignedChar_,
|
||||
"numberWithUnsignedChar:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithUnsignedInt_,
|
||||
"numberWithUnsignedInt:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithUnsignedLong_,
|
||||
"numberWithUnsignedLong:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithUnsignedLongLong_,
|
||||
"numberWithUnsignedLongLong:");
|
||||
_NS_PRIVATE_DEF_SEL(numberWithUnsignedShort_,
|
||||
"numberWithUnsignedShort:");
|
||||
_NS_PRIVATE_DEF_SEL(objCType,
|
||||
"objCType");
|
||||
_NS_PRIVATE_DEF_SEL(object,
|
||||
"object");
|
||||
_NS_PRIVATE_DEF_SEL(objectAtIndex_,
|
||||
"objectAtIndex:");
|
||||
_NS_PRIVATE_DEF_SEL(objectEnumerator,
|
||||
"objectEnumerator");
|
||||
_NS_PRIVATE_DEF_SEL(objectForInfoDictionaryKey_,
|
||||
"objectForInfoDictionaryKey:");
|
||||
_NS_PRIVATE_DEF_SEL(objectForKey_,
|
||||
"objectForKey:");
|
||||
_NS_PRIVATE_DEF_SEL(operatingSystem,
|
||||
"operatingSystem");
|
||||
_NS_PRIVATE_DEF_SEL(operatingSystemVersion,
|
||||
"operatingSystemVersion");
|
||||
_NS_PRIVATE_DEF_SEL(operatingSystemVersionString,
|
||||
"operatingSystemVersionString");
|
||||
_NS_PRIVATE_DEF_SEL(pathForAuxiliaryExecutable_,
|
||||
"pathForAuxiliaryExecutable:");
|
||||
_NS_PRIVATE_DEF_SEL(performActivityWithOptions_reason_usingBlock_,
|
||||
"performActivityWithOptions:reason:usingBlock:");
|
||||
_NS_PRIVATE_DEF_SEL(performExpiringActivityWithReason_usingBlock_,
|
||||
"performExpiringActivityWithReason:usingBlock:");
|
||||
_NS_PRIVATE_DEF_SEL(physicalMemory,
|
||||
"physicalMemory");
|
||||
_NS_PRIVATE_DEF_SEL(pointerValue,
|
||||
"pointerValue");
|
||||
_NS_PRIVATE_DEF_SEL(preflightAndReturnError_,
|
||||
"preflightAndReturnError:");
|
||||
_NS_PRIVATE_DEF_SEL(privateFrameworksPath,
|
||||
"privateFrameworksPath");
|
||||
_NS_PRIVATE_DEF_SEL(privateFrameworksURL,
|
||||
"privateFrameworksURL");
|
||||
_NS_PRIVATE_DEF_SEL(processIdentifier,
|
||||
"processIdentifier");
|
||||
_NS_PRIVATE_DEF_SEL(processInfo,
|
||||
"processInfo");
|
||||
_NS_PRIVATE_DEF_SEL(processName,
|
||||
"processName");
|
||||
_NS_PRIVATE_DEF_SEL(processorCount,
|
||||
"processorCount");
|
||||
_NS_PRIVATE_DEF_SEL(rangeOfString_options_,
|
||||
"rangeOfString:options:");
|
||||
_NS_PRIVATE_DEF_SEL(release,
|
||||
"release");
|
||||
_NS_PRIVATE_DEF_SEL(removeObserver_,
|
||||
"removeObserver:");
|
||||
_NS_PRIVATE_DEF_SEL(resourcePath,
|
||||
"resourcePath");
|
||||
_NS_PRIVATE_DEF_SEL(resourceURL,
|
||||
"resourceURL");
|
||||
_NS_PRIVATE_DEF_SEL(respondsToSelector_,
|
||||
"respondsToSelector:");
|
||||
_NS_PRIVATE_DEF_SEL(retain,
|
||||
"retain");
|
||||
_NS_PRIVATE_DEF_SEL(retainCount,
|
||||
"retainCount");
|
||||
_NS_PRIVATE_DEF_SEL(setAutomaticTerminationSupportEnabled_,
|
||||
"setAutomaticTerminationSupportEnabled:");
|
||||
_NS_PRIVATE_DEF_SEL(setProcessName_,
|
||||
"setProcessName:");
|
||||
_NS_PRIVATE_DEF_SEL(sharedFrameworksPath,
|
||||
"sharedFrameworksPath");
|
||||
_NS_PRIVATE_DEF_SEL(sharedFrameworksURL,
|
||||
"sharedFrameworksURL");
|
||||
_NS_PRIVATE_DEF_SEL(sharedSupportPath,
|
||||
"sharedSupportPath");
|
||||
_NS_PRIVATE_DEF_SEL(sharedSupportURL,
|
||||
"sharedSupportURL");
|
||||
_NS_PRIVATE_DEF_SEL(shortValue,
|
||||
"shortValue");
|
||||
_NS_PRIVATE_DEF_SEL(showPools,
|
||||
"showPools");
|
||||
_NS_PRIVATE_DEF_SEL(signal,
|
||||
"signal");
|
||||
_NS_PRIVATE_DEF_SEL(string,
|
||||
"string");
|
||||
_NS_PRIVATE_DEF_SEL(stringValue,
|
||||
"stringValue");
|
||||
_NS_PRIVATE_DEF_SEL(stringWithString_,
|
||||
"stringWithString:");
|
||||
_NS_PRIVATE_DEF_SEL(stringWithCString_encoding_,
|
||||
"stringWithCString:encoding:");
|
||||
_NS_PRIVATE_DEF_SEL(stringByAppendingString_,
|
||||
"stringByAppendingString:");
|
||||
_NS_PRIVATE_DEF_SEL(systemUptime,
|
||||
"systemUptime");
|
||||
_NS_PRIVATE_DEF_SEL(thermalState,
|
||||
"thermalState");
|
||||
_NS_PRIVATE_DEF_SEL(unload,
|
||||
"unload");
|
||||
_NS_PRIVATE_DEF_SEL(unlock,
|
||||
"unlock");
|
||||
_NS_PRIVATE_DEF_SEL(unsignedCharValue,
|
||||
"unsignedCharValue");
|
||||
_NS_PRIVATE_DEF_SEL(unsignedIntegerValue,
|
||||
"unsignedIntegerValue");
|
||||
_NS_PRIVATE_DEF_SEL(unsignedIntValue,
|
||||
"unsignedIntValue");
|
||||
_NS_PRIVATE_DEF_SEL(unsignedLongValue,
|
||||
"unsignedLongValue");
|
||||
_NS_PRIVATE_DEF_SEL(unsignedLongLongValue,
|
||||
"unsignedLongLongValue");
|
||||
_NS_PRIVATE_DEF_SEL(unsignedShortValue,
|
||||
"unsignedShortValue");
|
||||
_NS_PRIVATE_DEF_SEL(URLForAuxiliaryExecutable_,
|
||||
"URLForAuxiliaryExecutable:");
|
||||
_NS_PRIVATE_DEF_SEL(userInfo,
|
||||
"userInfo");
|
||||
_NS_PRIVATE_DEF_SEL(userName,
|
||||
"userName");
|
||||
_NS_PRIVATE_DEF_SEL(UTF8String,
|
||||
"UTF8String");
|
||||
_NS_PRIVATE_DEF_SEL(valueWithBytes_objCType_,
|
||||
"valueWithBytes:objCType:");
|
||||
_NS_PRIVATE_DEF_SEL(valueWithPointer_,
|
||||
"valueWithPointer:");
|
||||
_NS_PRIVATE_DEF_SEL(wait,
|
||||
"wait");
|
||||
_NS_PRIVATE_DEF_SEL(waitUntilDate_,
|
||||
"waitUntilDate:");
|
||||
} // Class
|
||||
} // Private
|
||||
} // MTL
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
354
third_party/metal-cpp/Foundation/NSProcessInfo.hpp
vendored
Normal file
354
third_party/metal-cpp/Foundation/NSProcessInfo.hpp
vendored
Normal file
|
@ -0,0 +1,354 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSProcessInfo.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSNotification.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
#include <functional>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
_NS_CONST(NotificationName, ProcessInfoThermalStateDidChangeNotification);
|
||||
_NS_CONST(NotificationName, ProcessInfoPowerStateDidChangeNotification);
|
||||
|
||||
_NS_ENUM(NS::Integer, ProcessInfoThermalState) {
|
||||
ProcessInfoThermalStateNominal = 0,
|
||||
ProcessInfoThermalStateFair = 1,
|
||||
ProcessInfoThermalStateSerious = 2,
|
||||
ProcessInfoThermalStateCritical = 3
|
||||
};
|
||||
|
||||
_NS_OPTIONS(std::uint64_t, ActivityOptions) {
|
||||
ActivityIdleDisplaySleepDisabled = (1ULL << 40),
|
||||
ActivityIdleSystemSleepDisabled = (1ULL << 20),
|
||||
ActivitySuddenTerminationDisabled = (1ULL << 14),
|
||||
ActivityAutomaticTerminationDisabled = (1ULL << 15),
|
||||
ActivityUserInitiated = (0x00FFFFFFULL | ActivityIdleSystemSleepDisabled),
|
||||
ActivityUserInitiatedAllowingIdleSystemSleep = (ActivityUserInitiated & ~ActivityIdleSystemSleepDisabled),
|
||||
ActivityBackground = 0x000000FFULL,
|
||||
ActivityLatencyCritical = 0xFF00000000ULL,
|
||||
};
|
||||
|
||||
class ProcessInfo : public Referencing<ProcessInfo>
|
||||
{
|
||||
public:
|
||||
static ProcessInfo* processInfo();
|
||||
|
||||
class Array* arguments() const;
|
||||
class Dictionary* environment() const;
|
||||
class String* hostName() const;
|
||||
class String* processName() const;
|
||||
void setProcessName(const String* pString);
|
||||
int processIdentifier() const;
|
||||
class String* globallyUniqueString() const;
|
||||
|
||||
class String* userName() const;
|
||||
class String* fullUserName() const;
|
||||
|
||||
UInteger operatingSystem() const;
|
||||
OperatingSystemVersion operatingSystemVersion() const;
|
||||
class String* operatingSystemVersionString() const;
|
||||
bool isOperatingSystemAtLeastVersion(OperatingSystemVersion version) const;
|
||||
|
||||
UInteger processorCount() const;
|
||||
UInteger activeProcessorCount() const;
|
||||
unsigned long long physicalMemory() const;
|
||||
TimeInterval systemUptime() const;
|
||||
|
||||
void disableSuddenTermination();
|
||||
void enableSuddenTermination();
|
||||
|
||||
void disableAutomaticTermination(const class String* pReason);
|
||||
void enableAutomaticTermination(const class String* pReason);
|
||||
bool automaticTerminationSupportEnabled() const;
|
||||
void setAutomaticTerminationSupportEnabled(bool enabled);
|
||||
|
||||
class Object* beginActivity(ActivityOptions options, const class String* pReason);
|
||||
void endActivity(class Object* pActivity);
|
||||
void performActivity(ActivityOptions options, const class String* pReason, void (^block)(void));
|
||||
void performActivity(ActivityOptions options, const class String* pReason, const std::function<void()>& func);
|
||||
void performExpiringActivity(const class String* pReason, void (^block)(bool expired));
|
||||
void performExpiringActivity(const class String* pReason, const std::function<void(bool expired)>& func);
|
||||
|
||||
ProcessInfoThermalState thermalState() const;
|
||||
bool isLowPowerModeEnabled() const;
|
||||
|
||||
bool isiOSAppOnMac() const;
|
||||
bool isMacCatalystApp() const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_PRIVATE_DEF_CONST(NS::NotificationName, ProcessInfoThermalStateDidChangeNotification);
|
||||
_NS_PRIVATE_DEF_CONST(NS::NotificationName, ProcessInfoPowerStateDidChangeNotification);
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::ProcessInfo* NS::ProcessInfo::processInfo()
|
||||
{
|
||||
return Object::sendMessage<ProcessInfo*>(_NS_PRIVATE_CLS(NSProcessInfo), _NS_PRIVATE_SEL(processInfo));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Array* NS::ProcessInfo::arguments() const
|
||||
{
|
||||
return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(arguments));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Dictionary* NS::ProcessInfo::environment() const
|
||||
{
|
||||
return Object::sendMessage<Dictionary*>(this, _NS_PRIVATE_SEL(environment));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::ProcessInfo::hostName() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(hostName));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::ProcessInfo::processName() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(processName));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::setProcessName(const String* pString)
|
||||
{
|
||||
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(setProcessName_), pString);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE int NS::ProcessInfo::processIdentifier() const
|
||||
{
|
||||
return Object::sendMessage<int>(this, _NS_PRIVATE_SEL(processIdentifier));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::ProcessInfo::globallyUniqueString() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(globallyUniqueString));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::ProcessInfo::userName() const
|
||||
{
|
||||
return Object::sendMessageSafe<String*>(this, _NS_PRIVATE_SEL(userName));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::ProcessInfo::fullUserName() const
|
||||
{
|
||||
return Object::sendMessageSafe<String*>(this, _NS_PRIVATE_SEL(fullUserName));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::ProcessInfo::operatingSystem() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(operatingSystem));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::OperatingSystemVersion NS::ProcessInfo::operatingSystemVersion() const
|
||||
{
|
||||
return Object::sendMessage<OperatingSystemVersion>(this, _NS_PRIVATE_SEL(operatingSystemVersion));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::ProcessInfo::operatingSystemVersionString() const
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(operatingSystemVersionString));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::ProcessInfo::isOperatingSystemAtLeastVersion(OperatingSystemVersion version) const
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isOperatingSystemAtLeastVersion_), version);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::ProcessInfo::processorCount() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(processorCount));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::ProcessInfo::activeProcessorCount() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(activeProcessorCount));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE unsigned long long NS::ProcessInfo::physicalMemory() const
|
||||
{
|
||||
return Object::sendMessage<unsigned long long>(this, _NS_PRIVATE_SEL(physicalMemory));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::TimeInterval NS::ProcessInfo::systemUptime() const
|
||||
{
|
||||
return Object::sendMessage<TimeInterval>(this, _NS_PRIVATE_SEL(systemUptime));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::disableSuddenTermination()
|
||||
{
|
||||
Object::sendMessageSafe<void>(this, _NS_PRIVATE_SEL(disableSuddenTermination));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::enableSuddenTermination()
|
||||
{
|
||||
Object::sendMessageSafe<void>(this, _NS_PRIVATE_SEL(enableSuddenTermination));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::disableAutomaticTermination(const String* pReason)
|
||||
{
|
||||
Object::sendMessageSafe<void>(this, _NS_PRIVATE_SEL(disableAutomaticTermination_), pReason);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::enableAutomaticTermination(const String* pReason)
|
||||
{
|
||||
Object::sendMessageSafe<void>(this, _NS_PRIVATE_SEL(enableAutomaticTermination_), pReason);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::ProcessInfo::automaticTerminationSupportEnabled() const
|
||||
{
|
||||
return Object::sendMessageSafe<bool>(this, _NS_PRIVATE_SEL(automaticTerminationSupportEnabled));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::setAutomaticTerminationSupportEnabled(bool enabled)
|
||||
{
|
||||
Object::sendMessageSafe<void>(this, _NS_PRIVATE_SEL(setAutomaticTerminationSupportEnabled_), enabled);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Object* NS::ProcessInfo::beginActivity(ActivityOptions options, const String* pReason)
|
||||
{
|
||||
return Object::sendMessage<Object*>(this, _NS_PRIVATE_SEL(beginActivityWithOptions_reason_), options, pReason);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::endActivity(Object* pActivity)
|
||||
{
|
||||
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(endActivity_), pActivity);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::performActivity(ActivityOptions options, const String* pReason, void (^block)(void))
|
||||
{
|
||||
Object::sendMessage<void>(this, _NS_PRIVATE_SEL(performActivityWithOptions_reason_usingBlock_), options, pReason, block);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::performActivity(ActivityOptions options, const String* pReason, const std::function<void()>& function)
|
||||
{
|
||||
__block std::function<void()> blockFunction = function;
|
||||
|
||||
performActivity(options, pReason, ^() { blockFunction(); });
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::performExpiringActivity(const String* pReason, void (^block)(bool expired))
|
||||
{
|
||||
Object::sendMessageSafe<void>(this, _NS_PRIVATE_SEL(performExpiringActivityWithReason_usingBlock_), pReason, block);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE void NS::ProcessInfo::performExpiringActivity(const String* pReason, const std::function<void(bool expired)>& function)
|
||||
{
|
||||
__block std::function<void(bool expired)> blockFunction = function;
|
||||
|
||||
performExpiringActivity(pReason, ^(bool expired) { blockFunction(expired); });
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::ProcessInfoThermalState NS::ProcessInfo::thermalState() const
|
||||
{
|
||||
return Object::sendMessage<ProcessInfoThermalState>(this, _NS_PRIVATE_SEL(thermalState));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::ProcessInfo::isLowPowerModeEnabled() const
|
||||
{
|
||||
return Object::sendMessageSafe<bool>(this, _NS_PRIVATE_SEL(isLowPowerModeEnabled));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::ProcessInfo::isiOSAppOnMac() const
|
||||
{
|
||||
return Object::sendMessageSafe<bool>(this, _NS_PRIVATE_SEL(isiOSAppOnMac));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::ProcessInfo::isMacCatalystApp() const
|
||||
{
|
||||
return Object::sendMessageSafe<bool>(this, _NS_PRIVATE_SEL(isMacCatalystApp));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
83
third_party/metal-cpp/Foundation/NSRange.hpp
vendored
Normal file
83
third_party/metal-cpp/Foundation/NSRange.hpp
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSRange.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
struct Range
|
||||
{
|
||||
static Range Make(UInteger loc, UInteger len);
|
||||
|
||||
Range(UInteger loc, UInteger len);
|
||||
|
||||
bool Equal(const Range& range) const;
|
||||
bool LocationInRange(UInteger loc) const;
|
||||
UInteger Max() const;
|
||||
|
||||
UInteger location;
|
||||
UInteger length;
|
||||
} _NS_PACKED;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Range::Range(UInteger loc, UInteger len)
|
||||
: location(loc)
|
||||
, length(len)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Range NS::Range::Make(UInteger loc, UInteger len)
|
||||
{
|
||||
return Range(loc, len);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Range::Equal(const Range& range) const
|
||||
{
|
||||
return (location == range.location) && (length == range.length);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::Range::LocationInRange(UInteger loc) const
|
||||
{
|
||||
return (!(loc < location)) && ((loc - location) < length);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::Range::Max() const
|
||||
{
|
||||
return location + length;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
87
third_party/metal-cpp/Foundation/NSSet.hpp
vendored
Normal file
87
third_party/metal-cpp/Foundation/NSSet.hpp
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSSet.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSObject.hpp"
|
||||
#include "NSEnumerator.hpp"
|
||||
|
||||
/*****Immutable Set*******/
|
||||
|
||||
namespace NS
|
||||
{
|
||||
class Set : public NS::Copying <Set>
|
||||
{
|
||||
public:
|
||||
UInteger count() const;
|
||||
Enumerator<Object>* objectEnumerator() const;
|
||||
|
||||
static Set* alloc();
|
||||
|
||||
Set* init();
|
||||
Set* init(const Object* const* pObjects, UInteger count);
|
||||
Set* init(const class Coder* pCoder);
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::Set::count() const
|
||||
{
|
||||
return NS::Object::sendMessage<NS::UInteger>(this, _NS_PRIVATE_SEL(count));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Enumerator<NS::Object>* NS::Set::objectEnumerator() const
|
||||
{
|
||||
return NS::Object::sendMessage<Enumerator<NS::Object>*>(this, _NS_PRIVATE_SEL(objectEnumerator));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Set* NS::Set::alloc()
|
||||
{
|
||||
return NS::Object::alloc<Set>(_NS_PRIVATE_CLS(NSSet));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Set* NS::Set::init()
|
||||
{
|
||||
return NS::Object::init<Set>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Set* NS::Set::init(const Object* const* pObjects, NS::UInteger count)
|
||||
{
|
||||
return NS::Object::sendMessage<Set*>(this, _NS_PRIVATE_SEL(initWithObjects_count_), pObjects, count);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Set* NS::Set::init(const class Coder* pCoder)
|
||||
{
|
||||
return Object::sendMessage<Set*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
|
||||
}
|
311
third_party/metal-cpp/Foundation/NSSharedPtr.hpp
vendored
Normal file
311
third_party/metal-cpp/Foundation/NSSharedPtr.hpp
vendored
Normal file
|
@ -0,0 +1,311 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSSharedPtr.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
|
||||
namespace NS
|
||||
{
|
||||
template <class _Class>
|
||||
class SharedPtr
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Create a new null pointer.
|
||||
*/
|
||||
SharedPtr();
|
||||
|
||||
/**
|
||||
* Destroy this SharedPtr, decreasing the reference count.
|
||||
*/
|
||||
~SharedPtr();
|
||||
|
||||
/**
|
||||
* SharedPtr copy constructor.
|
||||
*/
|
||||
SharedPtr(const SharedPtr<_Class>& other) noexcept;
|
||||
|
||||
/**
|
||||
* Construction from another pointee type.
|
||||
*/
|
||||
template <class _OtherClass>
|
||||
SharedPtr(const SharedPtr<_OtherClass>& other, typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>> * = nullptr) noexcept;
|
||||
|
||||
/**
|
||||
* SharedPtr move constructor.
|
||||
*/
|
||||
SharedPtr(SharedPtr<_Class>&& other) noexcept;
|
||||
|
||||
/**
|
||||
* Move from another pointee type.
|
||||
*/
|
||||
template <class _OtherClass>
|
||||
SharedPtr(SharedPtr<_OtherClass>&& other, typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>> * = nullptr) noexcept;
|
||||
|
||||
/**
|
||||
* Copy assignment operator.
|
||||
* Copying increases reference count. Only releases previous pointee if objects are different.
|
||||
*/
|
||||
SharedPtr& operator=(const SharedPtr<_Class>& other);
|
||||
|
||||
/**
|
||||
* Copy-assignment from different pointee.
|
||||
* Copying increases reference count. Only releases previous pointee if objects are different.
|
||||
*/
|
||||
template <class _OtherClass>
|
||||
typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>, SharedPtr &>
|
||||
operator=(const SharedPtr<_OtherClass>& other);
|
||||
|
||||
/**
|
||||
* Move assignment operator.
|
||||
* Move without affecting reference counts, unless pointees are equal. Moved-from object is reset to nullptr.
|
||||
*/
|
||||
SharedPtr& operator=(SharedPtr<_Class>&& other);
|
||||
|
||||
/**
|
||||
* Move-asignment from different pointee.
|
||||
* Move without affecting reference counts, unless pointees are equal. Moved-from object is reset to nullptr.
|
||||
*/
|
||||
template <class _OtherClass>
|
||||
typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>, SharedPtr &>
|
||||
operator=(SharedPtr<_OtherClass>&& other);
|
||||
|
||||
/**
|
||||
* Access raw pointee.
|
||||
* @warning Avoid wrapping the returned value again, as it may lead double frees unless this object becomes detached.
|
||||
*/
|
||||
_Class* get() const;
|
||||
|
||||
/**
|
||||
* Call operations directly on the pointee.
|
||||
*/
|
||||
_Class* operator->() const;
|
||||
|
||||
/**
|
||||
* Implicit cast to bool.
|
||||
*/
|
||||
explicit operator bool() const;
|
||||
|
||||
/**
|
||||
* Reset this SharedPtr to null, decreasing the reference count.
|
||||
*/
|
||||
void reset();
|
||||
|
||||
/**
|
||||
* Detach the SharedPtr from the pointee, without decreasing the reference count.
|
||||
*/
|
||||
void detach();
|
||||
|
||||
template <class _OtherClass>
|
||||
friend SharedPtr<_OtherClass> RetainPtr(_OtherClass* ptr);
|
||||
|
||||
template <class _OtherClass>
|
||||
friend SharedPtr<_OtherClass> TransferPtr(_OtherClass* ptr);
|
||||
|
||||
private:
|
||||
_Class* m_pObject;
|
||||
};
|
||||
|
||||
/**
|
||||
* Create a SharedPtr by retaining an existing raw pointer.
|
||||
* Increases the reference count of the passed-in object.
|
||||
* If the passed-in object was in an AutoreleasePool, it will be removed from it.
|
||||
*/
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class> RetainPtr(_Class* pObject)
|
||||
{
|
||||
NS::SharedPtr<_Class> ret;
|
||||
ret.m_pObject = pObject->retain();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a SharedPtr by transfering the ownership of an existing raw pointer to SharedPtr.
|
||||
* Does not increase the reference count of the passed-in pointer, it is assumed to be >= 1.
|
||||
* This method does not remove objects from an AutoreleasePool.
|
||||
*/
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class> TransferPtr(_Class* pObject)
|
||||
{
|
||||
NS::SharedPtr<_Class> ret;
|
||||
ret.m_pObject = pObject;
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::SharedPtr()
|
||||
: m_pObject(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::~SharedPtr<_Class>()
|
||||
{
|
||||
if (m_pObject)
|
||||
{
|
||||
m_pObject->release();
|
||||
}
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::SharedPtr(const NS::SharedPtr<_Class>& other) noexcept
|
||||
: m_pObject(other.m_pObject->retain())
|
||||
{
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
template <class _OtherClass>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::SharedPtr(const NS::SharedPtr<_OtherClass>& other, typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>> *) noexcept
|
||||
: m_pObject(reinterpret_cast<_Class*>(other.get()->retain()))
|
||||
{
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::SharedPtr(NS::SharedPtr<_Class>&& other) noexcept
|
||||
: m_pObject(other.m_pObject)
|
||||
{
|
||||
other.m_pObject = nullptr;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
template <class _OtherClass>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::SharedPtr(NS::SharedPtr<_OtherClass>&& other, typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>> *) noexcept
|
||||
: m_pObject(reinterpret_cast<_Class*>(other.get()))
|
||||
{
|
||||
other.detach();
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE _Class* NS::SharedPtr<_Class>::get() const
|
||||
{
|
||||
return m_pObject;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE _Class* NS::SharedPtr<_Class>::operator->() const
|
||||
{
|
||||
return m_pObject;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::operator bool() const
|
||||
{
|
||||
return nullptr != m_pObject;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE void NS::SharedPtr<_Class>::reset()
|
||||
{
|
||||
m_pObject->release();
|
||||
m_pObject = nullptr;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE void NS::SharedPtr<_Class>::detach()
|
||||
{
|
||||
m_pObject = nullptr;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class>& NS::SharedPtr<_Class>::operator=(const SharedPtr<_Class>& other)
|
||||
{
|
||||
if (m_pObject != other.m_pObject)
|
||||
{
|
||||
if (m_pObject)
|
||||
{
|
||||
m_pObject->release();
|
||||
}
|
||||
m_pObject = other.m_pObject->retain();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
template <class _OtherClass>
|
||||
typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>, NS::SharedPtr<_Class> &>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::operator=(const SharedPtr<_OtherClass>& other)
|
||||
{
|
||||
if (m_pObject != other.get())
|
||||
{
|
||||
if (m_pObject)
|
||||
{
|
||||
m_pObject->release();
|
||||
}
|
||||
m_pObject = reinterpret_cast<_Class*>(other.get()->retain());
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
_NS_INLINE NS::SharedPtr<_Class>& NS::SharedPtr<_Class>::operator=(SharedPtr<_Class>&& other)
|
||||
{
|
||||
if (m_pObject != other.m_pObject)
|
||||
{
|
||||
if (m_pObject)
|
||||
{
|
||||
m_pObject->release();
|
||||
}
|
||||
m_pObject = other.m_pObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pObject = other.m_pObject;
|
||||
other.m_pObject->release();
|
||||
}
|
||||
other.m_pObject = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class _Class>
|
||||
template <class _OtherClass>
|
||||
typename std::enable_if_t<std::is_convertible_v<_OtherClass *, _Class *>, NS::SharedPtr<_Class> &>
|
||||
_NS_INLINE NS::SharedPtr<_Class>::operator=(SharedPtr<_OtherClass>&& other)
|
||||
{
|
||||
if (m_pObject != other.get())
|
||||
{
|
||||
if (m_pObject)
|
||||
{
|
||||
m_pObject->release();
|
||||
}
|
||||
m_pObject = reinterpret_cast<_Class*>(other.get());
|
||||
other.detach();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pObject = other.get();
|
||||
other.reset();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <class _ClassLhs, class _ClassRhs>
|
||||
_NS_INLINE bool operator==(const NS::SharedPtr<_ClassLhs>& lhs, const NS::SharedPtr<_ClassRhs>& rhs)
|
||||
{
|
||||
return lhs.get() == rhs.get();
|
||||
}
|
||||
|
||||
template <class _ClassLhs, class _ClassRhs>
|
||||
_NS_INLINE bool operator!=(const NS::SharedPtr<_ClassLhs>& lhs, const NS::SharedPtr<_ClassRhs>& rhs)
|
||||
{
|
||||
return lhs.get() != rhs.get();
|
||||
}
|
255
third_party/metal-cpp/Foundation/NSString.hpp
vendored
Normal file
255
third_party/metal-cpp/Foundation/NSString.hpp
vendored
Normal file
|
@ -0,0 +1,255 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSString.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSObjCRuntime.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSRange.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
_NS_ENUM(NS::UInteger, StringEncoding) {
|
||||
ASCIIStringEncoding = 1,
|
||||
NEXTSTEPStringEncoding = 2,
|
||||
JapaneseEUCStringEncoding = 3,
|
||||
UTF8StringEncoding = 4,
|
||||
ISOLatin1StringEncoding = 5,
|
||||
SymbolStringEncoding = 6,
|
||||
NonLossyASCIIStringEncoding = 7,
|
||||
ShiftJISStringEncoding = 8,
|
||||
ISOLatin2StringEncoding = 9,
|
||||
UnicodeStringEncoding = 10,
|
||||
WindowsCP1251StringEncoding = 11,
|
||||
WindowsCP1252StringEncoding = 12,
|
||||
WindowsCP1253StringEncoding = 13,
|
||||
WindowsCP1254StringEncoding = 14,
|
||||
WindowsCP1250StringEncoding = 15,
|
||||
ISO2022JPStringEncoding = 21,
|
||||
MacOSRomanStringEncoding = 30,
|
||||
|
||||
UTF16StringEncoding = UnicodeStringEncoding,
|
||||
|
||||
UTF16BigEndianStringEncoding = 0x90000100,
|
||||
UTF16LittleEndianStringEncoding = 0x94000100,
|
||||
|
||||
UTF32StringEncoding = 0x8c000100,
|
||||
UTF32BigEndianStringEncoding = 0x98000100,
|
||||
UTF32LittleEndianStringEncoding = 0x9c000100
|
||||
};
|
||||
|
||||
_NS_OPTIONS(NS::UInteger, StringCompareOptions) {
|
||||
CaseInsensitiveSearch = 1,
|
||||
LiteralSearch = 2,
|
||||
BackwardsSearch = 4,
|
||||
AnchoredSearch = 8,
|
||||
NumericSearch = 64,
|
||||
DiacriticInsensitiveSearch = 128,
|
||||
WidthInsensitiveSearch = 256,
|
||||
ForcedOrderingSearch = 512,
|
||||
RegularExpressionSearch = 1024
|
||||
};
|
||||
|
||||
using unichar = unsigned short;
|
||||
|
||||
class String : public Copying<String>
|
||||
{
|
||||
public:
|
||||
static String* string();
|
||||
static String* string(const String* pString);
|
||||
static String* string(const char* pString, StringEncoding encoding);
|
||||
|
||||
static String* alloc();
|
||||
String* init();
|
||||
String* init(const String* pString);
|
||||
String* init(const char* pString, StringEncoding encoding);
|
||||
String* init(void* pBytes, UInteger len, StringEncoding encoding, bool freeBuffer);
|
||||
|
||||
unichar character(UInteger index) const;
|
||||
UInteger length() const;
|
||||
|
||||
const char* cString(StringEncoding encoding) const;
|
||||
const char* utf8String() const;
|
||||
UInteger maximumLengthOfBytes(StringEncoding encoding) const;
|
||||
UInteger lengthOfBytes(StringEncoding encoding) const;
|
||||
|
||||
bool isEqualToString(const String* pString) const;
|
||||
Range rangeOfString(const String* pString, StringCompareOptions options) const;
|
||||
|
||||
const char* fileSystemRepresentation() const;
|
||||
|
||||
String* stringByAppendingString(const String* pString) const;
|
||||
ComparisonResult caseInsensitiveCompare(const String* pString) const;
|
||||
};
|
||||
|
||||
/// Create an NS::String* from a string literal.
|
||||
#define MTLSTR(literal) (NS::String*)__builtin___CFStringMakeConstantString("" literal "")
|
||||
|
||||
template <std::size_t _StringLen>
|
||||
[[deprecated("please use MTLSTR(str)")]] constexpr const String* MakeConstantString(const char (&str)[_StringLen])
|
||||
{
|
||||
return reinterpret_cast<const String*>(__CFStringMakeConstantString(str));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::string()
|
||||
{
|
||||
return Object::sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(string));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::string(const String* pString)
|
||||
{
|
||||
return Object::sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(stringWithString_), pString);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::string(const char* pString, StringEncoding encoding)
|
||||
{
|
||||
return Object::sendMessage<String*>(_NS_PRIVATE_CLS(NSString), _NS_PRIVATE_SEL(stringWithCString_encoding_), pString, encoding);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::alloc()
|
||||
{
|
||||
return Object::alloc<String>(_NS_PRIVATE_CLS(NSString));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::init()
|
||||
{
|
||||
return Object::init<String>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::init(const String* pString)
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithString_), pString);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::init(const char* pString, StringEncoding encoding)
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithCString_encoding_), pString, encoding);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::init(void* pBytes, UInteger len, StringEncoding encoding, bool freeBuffer)
|
||||
{
|
||||
return Object::sendMessage<String*>(this, _NS_PRIVATE_SEL(initWithBytesNoCopy_length_encoding_freeWhenDone_), pBytes, len, encoding, freeBuffer);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::unichar NS::String::character(UInteger index) const
|
||||
{
|
||||
return Object::sendMessage<unichar>(this, _NS_PRIVATE_SEL(characterAtIndex_), index);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::String::length() const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(length));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE const char* NS::String::cString(StringEncoding encoding) const
|
||||
{
|
||||
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(cStringUsingEncoding_), encoding);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE const char* NS::String::utf8String() const
|
||||
{
|
||||
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(UTF8String));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::String::maximumLengthOfBytes(StringEncoding encoding) const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(maximumLengthOfBytesUsingEncoding_), encoding);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::UInteger NS::String::lengthOfBytes(StringEncoding encoding) const
|
||||
{
|
||||
return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(lengthOfBytesUsingEncoding_), encoding);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE bool NS::String::isEqualToString(const NS::String* pString) const
|
||||
{
|
||||
return Object::sendMessage<bool>(this, _NS_PRIVATE_SEL(isEqualToString_), pString);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::Range NS::String::rangeOfString(const NS::String* pString, NS::StringCompareOptions options) const
|
||||
{
|
||||
return Object::sendMessage<Range>(this, _NS_PRIVATE_SEL(rangeOfString_options_), pString, options);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE const char* NS::String::fileSystemRepresentation() const
|
||||
{
|
||||
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(fileSystemRepresentation));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::String* NS::String::stringByAppendingString(const String* pString) const
|
||||
{
|
||||
return Object::sendMessage<NS::String*>(this, _NS_PRIVATE_SEL(stringByAppendingString_), pString);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::ComparisonResult NS::String::caseInsensitiveCompare(const String* pString) const
|
||||
{
|
||||
return Object::sendMessage<NS::ComparisonResult>(this, _NS_PRIVATE_SEL(caseInsensitiveCompare_), pString);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
51
third_party/metal-cpp/Foundation/NSTypes.hpp
vendored
Normal file
51
third_party/metal-cpp/Foundation/NSTypes.hpp
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSTypes.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#include <cstdint>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
using TimeInterval = double;
|
||||
|
||||
using Integer = std::intptr_t;
|
||||
using UInteger = std::uintptr_t;
|
||||
|
||||
const Integer IntegerMax = INTPTR_MAX;
|
||||
const Integer IntegerMin = INTPTR_MIN;
|
||||
const UInteger UIntegerMax = UINTPTR_MAX;
|
||||
|
||||
struct OperatingSystemVersion
|
||||
{
|
||||
Integer majorVersion;
|
||||
Integer minorVersion;
|
||||
Integer patchVersion;
|
||||
} _NS_PACKED;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
90
third_party/metal-cpp/Foundation/NSURL.hpp
vendored
Normal file
90
third_party/metal-cpp/Foundation/NSURL.hpp
vendored
Normal file
|
@ -0,0 +1,90 @@
|
|||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Foundation/NSURL.hpp
|
||||
//
|
||||
// Copyright 2020-2023 Apple Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "NSDefines.hpp"
|
||||
#include "NSObject.hpp"
|
||||
#include "NSPrivate.hpp"
|
||||
#include "NSTypes.hpp"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
namespace NS
|
||||
{
|
||||
class URL : public Copying<URL>
|
||||
{
|
||||
public:
|
||||
static URL* fileURLWithPath(const class String* pPath);
|
||||
|
||||
static URL* alloc();
|
||||
URL* init();
|
||||
URL* init(const class String* pString);
|
||||
URL* initFileURLWithPath(const class String* pPath);
|
||||
|
||||
const char* fileSystemRepresentation() const;
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::URL::fileURLWithPath(const String* pPath)
|
||||
{
|
||||
return Object::sendMessage<URL*>(_NS_PRIVATE_CLS(NSURL), _NS_PRIVATE_SEL(fileURLWithPath_), pPath);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::URL::alloc()
|
||||
{
|
||||
return Object::alloc<URL>(_NS_PRIVATE_CLS(NSURL));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::URL::init()
|
||||
{
|
||||
return Object::init<URL>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::URL::init(const String* pString)
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(initWithString_), pString);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE NS::URL* NS::URL::initFileURLWithPath(const String* pPath)
|
||||
{
|
||||
return Object::sendMessage<URL*>(this, _NS_PRIVATE_SEL(initFileURLWithPath_), pPath);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
_NS_INLINE const char* NS::URL::fileSystemRepresentation() const
|
||||
{
|
||||
return Object::sendMessage<const char*>(this, _NS_PRIVATE_SEL(fileSystemRepresentation));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
Loading…
Add table
Add a link
Reference in a new issue