/* CFArray.h Copyright (C) 2010 Free Software Foundation, Inc. Written by: Stefan Bidigaray Date: January, 2010 This file is part of CoreBase. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; see the file COPYING.LIB. If not, see or write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __COREFOUNDATION_CFARRAY_H__ #define __COREFOUNDATION_CFARRAY_H__ #include "CFBase.h" CF_EXTERN_C_BEGIN /** \ingroup CFArrayRef \brief Reference to an immutable array object. */ typedef const struct __CFArray *CFArrayRef; /** \ingroup CFMutableArrayRef \brief Reference to a mutable array object. */ typedef struct __CFArray *CFMutableArrayRef; /** \defgroup CFArrayRef CFArray Reference \brief A CFArray and its mutable type, \ref CFMutableArrayRef "CFMutableArray", are simple, low overhead, ordered containers for objects. \details \#include \{ */ /** \name Callbacks \{ */ typedef void (*CFArrayApplierFunction) (const void *value, void *context); typedef CFStringRef (*CFArrayCopyDescriptionCallBack) (const void *value); typedef void (*CFArrayReleaseCallBack) (CFAllocatorRef allocator, const void *value); typedef const void *(*CFArrayRetainCallBack) (CFAllocatorRef allocator, const void *value); typedef Boolean (*CFArrayEqualCallBack) (const void *value1, const void *value2); /** \} */ /** \brief Structure with CFArray callbacks. */ typedef struct _CFArrayCallBacks CFArrayCallBacks; struct _CFArrayCallBacks { CFIndex version; /**< Structure's version number. Current version is 0. */ CFArrayRetainCallBack retain; /**< The callback used to retain values added to the array. If NULL, values are not retained. */ CFArrayReleaseCallBack release; CFArrayCopyDescriptionCallBack copyDescription; CFArrayEqualCallBack equal; }; /** \name Predefined Callback Structures \{ */ CF_EXPORT const CFArrayCallBacks kCFTypeArrayCallBacks; /** \} */ /** \name Creating an Array \{ */ CF_EXPORT CFArrayRef CFArrayCreate (CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFArrayCallBacks * callBacks); CF_EXPORT CFArrayRef CFArrayCreateCopy (CFAllocatorRef allocator, CFArrayRef theArray); /** \} */ /** \name Examining an Array \{ */ CF_EXPORT CFIndex CFArrayBSearchValues (CFArrayRef theArray, CFRange range, const void *value, CFComparatorFunction comparator, void *context); CF_EXPORT Boolean CFArrayContainsValue (CFArrayRef theArray, CFRange range, const void *value); CF_EXPORT CFIndex CFArrayGetCount (CFArrayRef theArray); CF_EXPORT CFIndex CFArrayGetCountOfValue (CFArrayRef theArray, CFRange range, const void *value); CF_EXPORT CFIndex CFArrayGetFirstIndexOfValue (CFArrayRef theArray, CFRange range, const void *value); CF_EXPORT CFIndex CFArrayGetLastIndexOfValue (CFArrayRef theArray, CFRange range, const void *value); CF_EXPORT void CFArrayGetValues (CFArrayRef theArray, CFRange range, const void **values); CF_EXPORT const void *CFArrayGetValueAtIndex (CFArrayRef theArray, CFIndex idx); /** \} */ /** \name Applying a Function to Elements \{ */ CF_EXPORT void CFArrayApplyFunction (CFArrayRef theArray, CFRange range, CFArrayApplierFunction applier, void *context); /** \} */ /** \name Getting the CFArray Type ID \{ */ CF_EXPORT CFTypeID CFArrayGetTypeID (void); /** \} */ /** \} */ /** \defgroup CFMutableArrayRef CFMutableArray Reference \details \#include \{ */ CF_EXPORT void CFArrayAppendArray (CFMutableArrayRef theArray, CFArrayRef otherArray, CFRange otherRange); CF_EXPORT void CFArrayAppendValue (CFMutableArrayRef theArray, const void *value); CF_EXPORT CFMutableArrayRef CFArrayCreateMutable (CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks * callBacks); CF_EXPORT CFMutableArrayRef CFArrayCreateMutableCopy (CFAllocatorRef allocator, CFIndex capacity, CFArrayRef theArray); CF_EXPORT void CFArrayExchangeValuesAtIndices (CFMutableArrayRef theArray, CFIndex idx1, CFIndex idx2); CF_EXPORT void CFArrayInsertValueAtIndex (CFMutableArrayRef theArray, CFIndex idx, const void *value); CF_EXPORT void CFArrayRemoveAllValues (CFMutableArrayRef theArray); CF_EXPORT void CFArrayRemoveValueAtIndex (CFMutableArrayRef theArray, CFIndex idx); CF_EXPORT void CFArrayReplaceValues (CFMutableArrayRef theArray, CFRange range, const void **newValues, CFIndex newCount); CF_EXPORT void CFArraySetValueAtIndex (CFMutableArrayRef theArray, CFIndex idx, const void *value); CF_EXPORT void CFArraySortValues (CFMutableArrayRef theArray, CFRange range, CFComparatorFunction comparator, void *context); /** \} */ CF_EXTERN_C_END #endif /* __COREFOUNDATION_CFARRAY_H__ */