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