NSAutoreleasePool.hpp
1 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 2 // 3 // Foundation/NSAutoreleasePool.hpp 4 // 5 // Copyright 2020-2024 Apple Inc. 6 // 7 // Licensed under the Apache License, Version 2.0 (the "License"); 8 // you may not use this file except in compliance with the License. 9 // You may obtain a copy of the License at 10 // 11 // http://www.apache.org/licenses/LICENSE-2.0 12 // 13 // Unless required by applicable law or agreed to in writing, software 14 // distributed under the License is distributed on an "AS IS" BASIS, 15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 // See the License for the specific language governing permissions and 17 // limitations under the License. 18 // 19 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 21 #pragma once 22 23 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 24 25 #include "NSDefines.hpp" 26 #include "NSObject.hpp" 27 #include "NSPrivate.hpp" 28 #include "NSTypes.hpp" 29 30 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 31 32 namespace NS 33 { 34 class AutoreleasePool : public Object 35 { 36 public: 37 static AutoreleasePool* alloc(); 38 AutoreleasePool* init(); 39 40 void drain(); 41 42 void addObject(Object* pObject); 43 44 static void showPools(); 45 }; 46 } 47 48 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 49 50 _NS_INLINE NS::AutoreleasePool* NS::AutoreleasePool::alloc() 51 { 52 return NS::Object::alloc<AutoreleasePool>(_NS_PRIVATE_CLS(NSAutoreleasePool)); 53 } 54 55 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 56 57 _NS_INLINE NS::AutoreleasePool* NS::AutoreleasePool::init() 58 { 59 return NS::Object::init<AutoreleasePool>(); 60 } 61 62 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 63 64 _NS_INLINE void NS::AutoreleasePool::drain() 65 { 66 Object::sendMessage<void>(this, _NS_PRIVATE_SEL(drain)); 67 } 68 69 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 70 71 _NS_INLINE void NS::AutoreleasePool::addObject(Object* pObject) 72 { 73 Object::sendMessage<void>(this, _NS_PRIVATE_SEL(addObject_), pObject); 74 } 75 76 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 77 78 _NS_INLINE void NS::AutoreleasePool::showPools() 79 { 80 Object::sendMessage<void>(_NS_PRIVATE_CLS(NSAutoreleasePool), _NS_PRIVATE_SEL(showPools)); 81 } 82 83 //-------------------------------------------------------------------------------------------------------------------------------------------------------------