1 /* CFDictionary.h 2 3 Copyright (C) 2010 Free Software Foundation, Inc. 4 5 Written by: Stefan Bidigaray 6 Date: January, 2010 7 8 This file is part of the GNUstep CoreBase Library. 9 10 This library is free software; you can redistribute it and/or 11 modify it under the terms of the GNU Lesser General Public 12 License as published by the Free Software Foundation; either 13 version 2.1 of the License, or (at your option) any later version. 14 15 This library is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 Lesser General Public License for more details. 19 20 You should have received a copy of the GNU Lesser General Public 21 License along with this library; see the file COPYING.LIB. 22 If not, see <http://www.gnu.org/licenses/> or write to the 23 Free Software Foundation, 51 Franklin Street, Fifth Floor, 24 Boston, MA 02110-1301, USA. 25 */ 26 27 #ifndef __COREFOUNDATION_CFDICTIONARY_H__ 28 #define __COREFOUNDATION_CFDICTIONARY_H__ 1 29 30 #include "CFBase.h" 31 32 CF_EXTERN_C_BEGIN 33 /** \ingroup CFDictionaryRef */ 34 typedef const struct __CFDictionary *CFDictionaryRef; 35 /** \ingroup CFMutableDictionaryRef */ 36 typedef struct __CFDictionary *CFMutableDictionaryRef; 37 38 /** \defgroup CFDictionaryRef CFDictionary Reference 39 \{ 40 */ 41 typedef void (*CFDictionaryApplierFunction) (const void *key, 42 const void *value, void *context); 43 44 typedef CFStringRef (*CFDictionaryCopyDescriptionCallBack) (const void *value); 45 typedef Boolean (*CFDictionaryEqualCallBack) (const void *value1, 46 const void *value2); 47 typedef CFHashCode (*CFDictionaryHashCallBack) (const void *value); 48 typedef void (*CFDictionaryReleaseCallBack) (CFAllocatorRef allocator, 49 const void *value); 50 typedef const void *(*CFDictionaryRetainCallBack) (CFAllocatorRef allocator, 51 const void *value); 52 53 typedef struct _CFDictionaryKeyCallBacks CFDictionaryKeyCallBacks; 54 struct _CFDictionaryKeyCallBacks 55 { 56 CFIndex version; 57 CFDictionaryRetainCallBack retain; 58 CFDictionaryReleaseCallBack release; 59 CFDictionaryCopyDescriptionCallBack copyDescription; 60 CFDictionaryEqualCallBack equal; 61 CFDictionaryHashCallBack hash; 62 }; 63 64 typedef struct _CFDictionaryValueCallBacks CFDictionaryValueCallBacks; 65 struct _CFDictionaryValueCallBacks 66 { 67 CFIndex version; 68 CFDictionaryRetainCallBack retain; 69 CFDictionaryReleaseCallBack release; 70 CFDictionaryCopyDescriptionCallBack copyDescription; 71 CFDictionaryEqualCallBack equal; 72 }; 73 74 CF_EXPORT const CFDictionaryKeyCallBacks kCFCopyStringDictionaryKeyCallBacks; 75 CF_EXPORT const CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks; 76 CF_EXPORT const CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks; 77 78 /** \name Creating a dictionary 79 \{ 80 */ 81 CF_EXPORT CFDictionaryRef 82 CFDictionaryCreate (CFAllocatorRef allocator, const void **keys, 83 const void **values, CFIndex numValues, 84 const CFDictionaryKeyCallBacks * keyCallBacks, 85 const CFDictionaryValueCallBacks * valueCallBacks); 86 87 CF_EXPORT CFDictionaryRef 88 CFDictionaryCreateCopy (CFAllocatorRef allocator, CFDictionaryRef theDict); 89 /** \} */ 90 91 /** \name Examining a dictionary 92 \{ 93 */ 94 CF_EXPORT Boolean 95 CFDictionaryContainsKey (CFDictionaryRef theDict, const void *key); 96 97 CF_EXPORT Boolean 98 CFDictionaryContainsValue (CFDictionaryRef theDict, const void *value); 99 100 CF_EXPORT CFIndex CFDictionaryGetCount (CFDictionaryRef theDict); 101 102 CF_EXPORT CFIndex 103 CFDictionaryGetCountOfKey (CFDictionaryRef theDict, const void *key); 104 105 CF_EXPORT CFIndex 106 CFDictionaryGetCountOfValue (CFDictionaryRef theDict, const void *value); 107 108 CF_EXPORT void 109 CFDictionaryGetKeysAndValues (CFDictionaryRef theDict, const void **keys, 110 const void **values); 111 112 CF_EXPORT const void *CFDictionaryGetValue (CFDictionaryRef theDict, 113 const void *key); 114 115 CF_EXPORT Boolean 116 CFDictionaryGetValueIfPresent (CFDictionaryRef theDict, const void *key, 117 const void **value); 118 /** \} */ 119 120 /** \name Applying a funcation to a dictionary 121 \{ 122 */ 123 CF_EXPORT void 124 CFDictionaryApplyFunction (CFDictionaryRef theDict, 125 CFDictionaryApplierFunction applier, void *context); 126 /** \} */ 127 128 /** \name Getting the CFDictionary type ID 129 \{ 130 */ 131 CF_EXPORT CFTypeID CFDictionaryGetTypeID (void); 132 /** \} */ 133 /** \} */ 134 135 /** \defgroup CFMutableDictionaryRef CFMutableDictionary Reference 136 \{ 137 */ 138 /** \name Creating a Mutable Dictionary 139 \{ 140 */ 141 CF_EXPORT CFMutableDictionaryRef 142 CFDictionaryCreateMutable (CFAllocatorRef allocator, CFIndex capacity, 143 const CFDictionaryKeyCallBacks * keyCallBacks, 144 const CFDictionaryValueCallBacks * valueCallBacks); 145 146 CF_EXPORT CFMutableDictionaryRef 147 CFDictionaryCreateMutableCopy (CFAllocatorRef allocator, CFIndex capacity, 148 CFDictionaryRef theDict); 149 /** \} */ 150 151 /** \name Modifying a Dictionary 152 \{ 153 */ 154 CF_EXPORT void 155 CFDictionaryAddValue (CFMutableDictionaryRef theDict, const void *key, 156 const void *value); 157 158 CF_EXPORT void CFDictionaryRemoveAllValues (CFMutableDictionaryRef theDict); 159 160 CF_EXPORT void 161 CFDictionaryRemoveValue (CFMutableDictionaryRef theDict, const void *key); 162 163 CF_EXPORT void 164 CFDictionaryReplaceValue (CFMutableDictionaryRef theDict, const void *key, 165 const void *value); 166 167 CF_EXPORT void 168 CFDictionarySetValue (CFMutableDictionaryRef theDict, const void *key, 169 const void *value); 170 /** \} */ 171 /** \} */ 172 173 CF_EXTERN_C_END 174 #endif /* __COREFOUNDATION_CFDICTIONARY_H__ */ 175