///////////////////////////////////////////////////////////////////////////// // Name: wx/osx/core/cfarrayref.h // Purpose: wxCFArrayRef class // Author: Stefan Csomor // Modified by: // Created: 2018/07/27 // Copyright: (c) 2018 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// /*! @header wx/osx/core/cfarrayref.h @abstract wxCFArrayRef class */ #ifndef _WX_OSX_COREFOUNDATION_CFARRAYREF_H__ #define _WX_OSX_COREFOUNDATION_CFARRAYREF_H__ #include "wx/osx/core/cfref.h" #include "wx/osx/core/cftype.h" #include template class wxCFArrayRefCommon : public wxCFRef { public: typedef wxCFRef super_type; typedef size_t size_type; wxCFArrayRefCommon(T r) : super_type(r) { } wxCFArrayRefCommon(const wxCFArrayRefCommon& otherRef) : super_type(otherRef) { } size_type size() const { return (size_type)CFArrayGetCount(this->m_ptr); } bool empty() const { return size() == 0; } wxCFRef at(size_type idx) { wxASSERT(idx < size()); return wxCFRefFromGet((E)CFArrayGetValueAtIndex(this->m_ptr, idx)); } operator WX_NSArray() { return (WX_NSArray) this->get(); } wxCFRef operator[](size_type idx) { return at(idx); } wxCFRef front() { return at(0); } wxCFRef back() { return at(size() - 1); } }; template class wxCFArrayRef : public wxCFArrayRefCommon { public: wxCFArrayRef(CFArrayRef r) : wxCFArrayRefCommon(r) { } wxCFArrayRef(const wxCFArrayRef& otherRef) : wxCFArrayRefCommon(otherRef) { } }; template class wxCFMutableArrayRef : public wxCFArrayRefCommon { public: wxCFMutableArrayRef() : wxCFArrayRefCommon(CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks)) { } wxCFMutableArrayRef(CFMutableArrayRef r) : wxCFArrayRefCommon(r) { } wxCFMutableArrayRef(const wxCFMutableArrayRef& otherRef) : wxCFArrayRefCommon(otherRef) { } void push_back(E v) { CFArrayAppendValue(this->m_ptr, v); } void clear() { CFArrayRemoveAllValues(this->m_ptr); } }; #endif //ifndef _WX_OSX_COREFOUNDATION_CFARRAYREF_H__