Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lldb / source / Host / macosx / cfcpp / CFCMutableDictionary.cpp
blob8b8672c3a886a6b9ca4a0f8bc0cf1d59792f14a5
1 //===-- CFCMutableDictionary.cpp ------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #include "CFCMutableDictionary.h"
10 #include "CFCString.h"
11 // CFCString constructor
12 CFCMutableDictionary::CFCMutableDictionary(CFMutableDictionaryRef s)
13 : CFCReleaser<CFMutableDictionaryRef>(s) {}
15 // CFCMutableDictionary copy constructor
16 CFCMutableDictionary::CFCMutableDictionary(const CFCMutableDictionary &rhs) =
17 default;
19 // CFCMutableDictionary copy constructor
20 const CFCMutableDictionary &CFCMutableDictionary::
21 operator=(const CFCMutableDictionary &rhs) {
22 if (this != &rhs)
23 *this = rhs;
24 return *this;
27 // Destructor
28 CFCMutableDictionary::~CFCMutableDictionary() = default;
30 CFIndex CFCMutableDictionary::GetCount() const {
31 CFMutableDictionaryRef dict = get();
32 if (dict)
33 return ::CFDictionaryGetCount(dict);
34 return 0;
37 CFIndex CFCMutableDictionary::GetCountOfKey(const void *key) const
40 CFMutableDictionaryRef dict = get();
41 if (dict)
42 return ::CFDictionaryGetCountOfKey(dict, key);
43 return 0;
46 CFIndex CFCMutableDictionary::GetCountOfValue(const void *value) const
49 CFMutableDictionaryRef dict = get();
50 if (dict)
51 return ::CFDictionaryGetCountOfValue(dict, value);
52 return 0;
55 void CFCMutableDictionary::GetKeysAndValues(const void **keys,
56 const void **values) const {
57 CFMutableDictionaryRef dict = get();
58 if (dict)
59 ::CFDictionaryGetKeysAndValues(dict, keys, values);
62 const void *CFCMutableDictionary::GetValue(const void *key) const
65 CFMutableDictionaryRef dict = get();
66 if (dict)
67 return ::CFDictionaryGetValue(dict, key);
68 return NULL;
71 Boolean
72 CFCMutableDictionary::GetValueIfPresent(const void *key,
73 const void **value_handle) const {
74 CFMutableDictionaryRef dict = get();
75 if (dict)
76 return ::CFDictionaryGetValueIfPresent(dict, key, value_handle);
77 return false;
80 CFMutableDictionaryRef CFCMutableDictionary::Dictionary(bool can_create) {
81 CFMutableDictionaryRef dict = get();
82 if (can_create && dict == NULL) {
83 dict = ::CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
84 &kCFTypeDictionaryKeyCallBacks,
85 &kCFTypeDictionaryValueCallBacks);
86 reset(dict);
88 return dict;
91 bool CFCMutableDictionary::AddValue(CFStringRef key, const void *value,
92 bool can_create) {
93 CFMutableDictionaryRef dict = Dictionary(can_create);
94 if (dict != NULL) {
95 // Let the dictionary own the CFNumber
96 ::CFDictionaryAddValue(dict, key, value);
97 return true;
99 return false;
102 bool CFCMutableDictionary::SetValue(CFStringRef key, const void *value,
103 bool can_create) {
104 CFMutableDictionaryRef dict = Dictionary(can_create);
105 if (dict != NULL) {
106 // Let the dictionary own the CFNumber
107 ::CFDictionarySetValue(dict, key, value);
108 return true;
110 return false;
113 bool CFCMutableDictionary::AddValueSInt8(CFStringRef key, int8_t value,
114 bool can_create) {
115 CFMutableDictionaryRef dict = Dictionary(can_create);
116 if (dict != NULL) {
117 CFCReleaser<CFNumberRef> cf_number(
118 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &value));
119 if (cf_number.get()) {
120 // Let the dictionary own the CFNumber
121 ::CFDictionaryAddValue(dict, key, cf_number.get());
122 return true;
125 return false;
128 bool CFCMutableDictionary::SetValueSInt8(CFStringRef key, int8_t value,
129 bool can_create) {
130 CFMutableDictionaryRef dict = Dictionary(can_create);
131 if (dict != NULL) {
132 CFCReleaser<CFNumberRef> cf_number(
133 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &value));
134 if (cf_number.get()) {
135 // Let the dictionary own the CFNumber
136 ::CFDictionarySetValue(dict, key, cf_number.get());
137 return true;
140 return false;
143 bool CFCMutableDictionary::AddValueSInt16(CFStringRef key, int16_t value,
144 bool can_create) {
145 CFMutableDictionaryRef dict = Dictionary(can_create);
146 if (dict != NULL) {
147 CFCReleaser<CFNumberRef> cf_number(
148 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt16Type, &value));
149 if (cf_number.get()) {
150 // Let the dictionary own the CFNumber
151 ::CFDictionaryAddValue(dict, key, cf_number.get());
152 return true;
155 return false;
158 bool CFCMutableDictionary::SetValueSInt16(CFStringRef key, int16_t value,
159 bool can_create) {
160 CFMutableDictionaryRef dict = Dictionary(can_create);
161 if (dict != NULL) {
162 CFCReleaser<CFNumberRef> cf_number(
163 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt16Type, &value));
164 if (cf_number.get()) {
165 // Let the dictionary own the CFNumber
166 ::CFDictionarySetValue(dict, key, cf_number.get());
167 return true;
170 return false;
173 bool CFCMutableDictionary::AddValueSInt32(CFStringRef key, int32_t value,
174 bool can_create) {
175 CFMutableDictionaryRef dict = Dictionary(can_create);
176 if (dict != NULL) {
177 CFCReleaser<CFNumberRef> cf_number(
178 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &value));
179 if (cf_number.get()) {
180 // Let the dictionary own the CFNumber
181 ::CFDictionaryAddValue(dict, key, cf_number.get());
182 return true;
185 return false;
188 bool CFCMutableDictionary::SetValueSInt32(CFStringRef key, int32_t value,
189 bool can_create) {
190 CFMutableDictionaryRef dict = Dictionary(can_create);
191 if (dict != NULL) {
192 CFCReleaser<CFNumberRef> cf_number(
193 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &value));
194 if (cf_number.get()) {
195 // Let the dictionary own the CFNumber
196 ::CFDictionarySetValue(dict, key, cf_number.get());
197 return true;
200 return false;
203 bool CFCMutableDictionary::AddValueSInt64(CFStringRef key, int64_t value,
204 bool can_create) {
205 CFMutableDictionaryRef dict = Dictionary(can_create);
206 if (dict != NULL) {
207 CFCReleaser<CFNumberRef> cf_number(
208 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &value));
209 if (cf_number.get()) {
210 // Let the dictionary own the CFNumber
211 ::CFDictionaryAddValue(dict, key, cf_number.get());
212 return true;
215 return false;
218 bool CFCMutableDictionary::SetValueSInt64(CFStringRef key, int64_t value,
219 bool can_create) {
220 CFMutableDictionaryRef dict = Dictionary(can_create);
221 if (dict != NULL) {
222 CFCReleaser<CFNumberRef> cf_number(
223 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &value));
224 if (cf_number.get()) {
225 // Let the dictionary own the CFNumber
226 ::CFDictionarySetValue(dict, key, cf_number.get());
227 return true;
230 return false;
233 bool CFCMutableDictionary::AddValueUInt8(CFStringRef key, uint8_t value,
234 bool can_create) {
235 CFMutableDictionaryRef dict = Dictionary(can_create);
236 if (dict != NULL) {
237 // Have to promote to the next size type so things don't appear negative of
238 // the MSBit is set...
239 int16_t sval = value;
240 CFCReleaser<CFNumberRef> cf_number(
241 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt16Type, &sval));
242 if (cf_number.get()) {
243 // Let the dictionary own the CFNumber
244 ::CFDictionaryAddValue(dict, key, cf_number.get());
245 return true;
248 return false;
251 bool CFCMutableDictionary::SetValueUInt8(CFStringRef key, uint8_t value,
252 bool can_create) {
253 CFMutableDictionaryRef dict = Dictionary(can_create);
254 if (dict != NULL) {
255 // Have to promote to the next size type so things don't appear negative of
256 // the MSBit is set...
257 int16_t sval = value;
258 CFCReleaser<CFNumberRef> cf_number(
259 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt16Type, &sval));
260 if (cf_number.get()) {
261 // Let the dictionary own the CFNumber
262 ::CFDictionarySetValue(dict, key, cf_number.get());
263 return true;
266 return false;
269 bool CFCMutableDictionary::AddValueUInt16(CFStringRef key, uint16_t value,
270 bool can_create) {
271 CFMutableDictionaryRef dict = Dictionary(can_create);
272 if (dict != NULL) {
273 // Have to promote to the next size type so things don't appear negative of
274 // the MSBit is set...
275 int32_t sval = value;
276 CFCReleaser<CFNumberRef> cf_number(
277 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &sval));
278 if (cf_number.get()) {
279 // Let the dictionary own the CFNumber
280 ::CFDictionaryAddValue(dict, key, cf_number.get());
281 return true;
284 return false;
287 bool CFCMutableDictionary::SetValueUInt16(CFStringRef key, uint16_t value,
288 bool can_create) {
289 CFMutableDictionaryRef dict = Dictionary(can_create);
290 if (dict != NULL) {
291 // Have to promote to the next size type so things don't appear negative of
292 // the MSBit is set...
293 int32_t sval = value;
294 CFCReleaser<CFNumberRef> cf_number(
295 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &sval));
296 if (cf_number.get()) {
297 // Let the dictionary own the CFNumber
298 ::CFDictionarySetValue(dict, key, cf_number.get());
299 return true;
302 return false;
305 bool CFCMutableDictionary::AddValueUInt32(CFStringRef key, uint32_t value,
306 bool can_create) {
307 CFMutableDictionaryRef dict = Dictionary(can_create);
308 if (dict != NULL) {
309 // Have to promote to the next size type so things don't appear negative of
310 // the MSBit is set...
311 int64_t sval = value;
312 CFCReleaser<CFNumberRef> cf_number(
313 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &sval));
314 if (cf_number.get()) {
315 // Let the dictionary own the CFNumber
316 ::CFDictionaryAddValue(dict, key, cf_number.get());
317 return true;
320 return false;
323 bool CFCMutableDictionary::SetValueUInt32(CFStringRef key, uint32_t value,
324 bool can_create) {
325 CFMutableDictionaryRef dict = Dictionary(can_create);
326 if (dict != NULL) {
327 // Have to promote to the next size type so things don't appear negative of
328 // the MSBit is set...
329 int64_t sval = value;
330 CFCReleaser<CFNumberRef> cf_number(
331 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &sval));
332 if (cf_number.get()) {
333 // Let the dictionary own the CFNumber
334 ::CFDictionarySetValue(dict, key, cf_number.get());
335 return true;
338 return false;
341 bool CFCMutableDictionary::AddValueUInt64(CFStringRef key, uint64_t value,
342 bool can_create) {
343 CFMutableDictionaryRef dict = Dictionary(can_create);
344 if (dict != NULL) {
345 // The number may appear negative if the MSBit is set in "value". Due to a
346 // limitation of CFNumber, there isn't a way to have it show up otherwise
347 // as of this writing.
348 CFCReleaser<CFNumberRef> cf_number(
349 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &value));
350 if (cf_number.get()) {
351 // Let the dictionary own the CFNumber
352 ::CFDictionaryAddValue(dict, key, cf_number.get());
353 return true;
356 return false;
359 bool CFCMutableDictionary::SetValueUInt64(CFStringRef key, uint64_t value,
360 bool can_create) {
361 CFMutableDictionaryRef dict = Dictionary(can_create);
362 if (dict != NULL) {
363 // The number may appear negative if the MSBit is set in "value". Due to a
364 // limitation of CFNumber, there isn't a way to have it show up otherwise
365 // as of this writing.
366 CFCReleaser<CFNumberRef> cf_number(
367 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &value));
368 if (cf_number.get()) {
369 // Let the dictionary own the CFNumber
370 ::CFDictionarySetValue(dict, key, cf_number.get());
371 return true;
374 return false;
377 bool CFCMutableDictionary::AddValueDouble(CFStringRef key, double value,
378 bool can_create) {
379 CFMutableDictionaryRef dict = Dictionary(can_create);
380 if (dict != NULL) {
381 // The number may appear negative if the MSBit is set in "value". Due to a
382 // limitation of CFNumber, there isn't a way to have it show up otherwise
383 // as of this writing.
384 CFCReleaser<CFNumberRef> cf_number(
385 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value));
386 if (cf_number.get()) {
387 // Let the dictionary own the CFNumber
388 ::CFDictionaryAddValue(dict, key, cf_number.get());
389 return true;
392 return false;
395 bool CFCMutableDictionary::SetValueDouble(CFStringRef key, double value,
396 bool can_create) {
397 CFMutableDictionaryRef dict = Dictionary(can_create);
398 if (dict != NULL) {
399 // The number may appear negative if the MSBit is set in "value". Due to a
400 // limitation of CFNumber, there isn't a way to have it show up otherwise
401 // as of this writing.
402 CFCReleaser<CFNumberRef> cf_number(
403 ::CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value));
404 if (cf_number.get()) {
405 // Let the dictionary own the CFNumber
406 ::CFDictionarySetValue(dict, key, cf_number.get());
407 return true;
410 return false;
413 bool CFCMutableDictionary::AddValueCString(CFStringRef key, const char *cstr,
414 bool can_create) {
415 CFMutableDictionaryRef dict = Dictionary(can_create);
416 if (dict != NULL) {
417 CFCString cf_str(cstr, kCFStringEncodingUTF8);
418 if (cf_str.get()) {
419 // Let the dictionary own the CFNumber
420 ::CFDictionaryAddValue(dict, key, cf_str.get());
421 return true;
424 return false;
427 bool CFCMutableDictionary::SetValueCString(CFStringRef key, const char *cstr,
428 bool can_create) {
429 CFMutableDictionaryRef dict = Dictionary(can_create);
430 if (dict != NULL) {
431 CFCString cf_str(cstr, kCFStringEncodingUTF8);
432 if (cf_str.get()) {
433 // Let the dictionary own the CFNumber
434 ::CFDictionarySetValue(dict, key, cf_str.get());
435 return true;
438 return false;
441 void CFCMutableDictionary::RemoveAllValues() {
442 CFMutableDictionaryRef dict = get();
443 if (dict)
444 ::CFDictionaryRemoveAllValues(dict);
447 void CFCMutableDictionary::RemoveValue(const void *value) {
448 CFMutableDictionaryRef dict = get();
449 if (dict)
450 ::CFDictionaryRemoveValue(dict, value);
452 void CFCMutableDictionary::ReplaceValue(const void *key, const void *value) {
453 CFMutableDictionaryRef dict = get();
454 if (dict)
455 ::CFDictionaryReplaceValue(dict, key, value);