/ include / Foundation / NSArray.hpp
NSArray.hpp
  1  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
  2  //
  3  // Foundation/NSArray.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 "NSObject.hpp"
 26  #include "NSTypes.hpp"
 27  #include "NSEnumerator.hpp"
 28  
 29  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 30  
 31  namespace NS
 32  {
 33  class Array : public Copying<Array>
 34  {
 35  public:
 36      static Array* array();
 37      static Array* array(const Object* pObject);
 38      static Array* array(const Object* const* pObjects, UInteger count);
 39  
 40      static Array* alloc();
 41  
 42      Array*        init();
 43      Array*        init(const Object* const* pObjects, UInteger count);
 44      Array*        init(const class Coder* pCoder);
 45  
 46      template <class _Object = Object>
 47      _Object*            object(UInteger index) const;
 48      UInteger            count() const;
 49      Enumerator<Object>* objectEnumerator() const;
 50  };
 51  }
 52  
 53  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 54  
 55  _NS_INLINE NS::Array* NS::Array::array()
 56  {
 57      return Object::sendMessage<Array*>(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(array));
 58  }
 59  
 60  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 61  
 62  _NS_INLINE NS::Array* NS::Array::array(const Object* pObject)
 63  {
 64      return Object::sendMessage<Array*>(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(arrayWithObject_), pObject);
 65  }
 66  
 67  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 68  
 69  _NS_INLINE NS::Array* NS::Array::array(const Object* const* pObjects, UInteger count)
 70  {
 71      return Object::sendMessage<Array*>(_NS_PRIVATE_CLS(NSArray), _NS_PRIVATE_SEL(arrayWithObjects_count_), pObjects, count);
 72  }
 73  
 74  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 75  
 76  _NS_INLINE NS::Array* NS::Array::alloc()
 77  {
 78      return NS::Object::alloc<Array>(_NS_PRIVATE_CLS(NSArray));
 79  }
 80  
 81  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 82  
 83  _NS_INLINE NS::Array* NS::Array::init()
 84  {
 85      return NS::Object::init<Array>();
 86  }
 87  
 88  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 89  
 90  _NS_INLINE NS::Array* NS::Array::init(const Object* const* pObjects, UInteger count)
 91  {
 92      return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(initWithObjects_count_), pObjects, count);
 93  }
 94  
 95  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
 96  
 97  _NS_INLINE NS::Array* NS::Array::init(const class Coder* pCoder)
 98  {
 99      return Object::sendMessage<Array*>(this, _NS_PRIVATE_SEL(initWithCoder_), pCoder);
100  }
101  
102  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
103  
104  _NS_INLINE NS::UInteger NS::Array::count() const
105  {
106      return Object::sendMessage<UInteger>(this, _NS_PRIVATE_SEL(count));
107  }
108  
109  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
110  
111  template <class _Object>
112  _NS_INLINE _Object* NS::Array::object(UInteger index) const
113  {
114      return Object::sendMessage<_Object*>(this, _NS_PRIVATE_SEL(objectAtIndex_), index);
115  }
116  
117  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
118  
119  _NS_INLINE NS::Enumerator<NS::Object>* NS::Array::objectEnumerator() const
120  {
121      return NS::Object::sendMessage<Enumerator<NS::Object>*>(this, _NS_PRIVATE_SEL(objectEnumerator));
122  }
123  
124  //-------------------------------------------------------------------------------------------------------------------------------------------------------------