1*30fdc8d8SChris Lattner //===-- CFCMutableSet.cpp ---------------------------------------*- C++ -*-===//
2*30fdc8d8SChris Lattner //
3*30fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
4*30fdc8d8SChris Lattner //
5*30fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
6*30fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
7*30fdc8d8SChris Lattner //
8*30fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
9*30fdc8d8SChris Lattner 
10*30fdc8d8SChris Lattner #include "CFCMutableSet.h"
11*30fdc8d8SChris Lattner 
12*30fdc8d8SChris Lattner // C Includes
13*30fdc8d8SChris Lattner // C++ Includes
14*30fdc8d8SChris Lattner // Other libraries and framework includes
15*30fdc8d8SChris Lattner // Project includes
16*30fdc8d8SChris Lattner 
17*30fdc8d8SChris Lattner //----------------------------------------------------------------------
18*30fdc8d8SChris Lattner // CFCString constructor
19*30fdc8d8SChris Lattner //----------------------------------------------------------------------
20*30fdc8d8SChris Lattner CFCMutableSet::CFCMutableSet(CFMutableSetRef s) :
21*30fdc8d8SChris Lattner     CFCReleaser<CFMutableSetRef> (s)
22*30fdc8d8SChris Lattner {
23*30fdc8d8SChris Lattner }
24*30fdc8d8SChris Lattner 
25*30fdc8d8SChris Lattner //----------------------------------------------------------------------
26*30fdc8d8SChris Lattner // CFCMutableSet copy constructor
27*30fdc8d8SChris Lattner //----------------------------------------------------------------------
28*30fdc8d8SChris Lattner CFCMutableSet::CFCMutableSet(const CFCMutableSet& rhs) :
29*30fdc8d8SChris Lattner     CFCReleaser<CFMutableSetRef> (rhs)
30*30fdc8d8SChris Lattner {
31*30fdc8d8SChris Lattner }
32*30fdc8d8SChris Lattner 
33*30fdc8d8SChris Lattner //----------------------------------------------------------------------
34*30fdc8d8SChris Lattner // CFCMutableSet copy constructor
35*30fdc8d8SChris Lattner //----------------------------------------------------------------------
36*30fdc8d8SChris Lattner const CFCMutableSet&
37*30fdc8d8SChris Lattner CFCMutableSet::operator=(const CFCMutableSet& rhs)
38*30fdc8d8SChris Lattner {
39*30fdc8d8SChris Lattner     if (this != &rhs)
40*30fdc8d8SChris Lattner         *this = rhs;
41*30fdc8d8SChris Lattner     return *this;
42*30fdc8d8SChris Lattner }
43*30fdc8d8SChris Lattner 
44*30fdc8d8SChris Lattner //----------------------------------------------------------------------
45*30fdc8d8SChris Lattner // Destructor
46*30fdc8d8SChris Lattner //----------------------------------------------------------------------
47*30fdc8d8SChris Lattner CFCMutableSet::~CFCMutableSet()
48*30fdc8d8SChris Lattner {
49*30fdc8d8SChris Lattner }
50*30fdc8d8SChris Lattner 
51*30fdc8d8SChris Lattner 
52*30fdc8d8SChris Lattner CFIndex
53*30fdc8d8SChris Lattner CFCMutableSet::GetCount() const
54*30fdc8d8SChris Lattner {
55*30fdc8d8SChris Lattner     CFMutableSetRef set = get();
56*30fdc8d8SChris Lattner     if (set)
57*30fdc8d8SChris Lattner         return ::CFSetGetCount (set);
58*30fdc8d8SChris Lattner     return 0;
59*30fdc8d8SChris Lattner }
60*30fdc8d8SChris Lattner 
61*30fdc8d8SChris Lattner CFIndex
62*30fdc8d8SChris Lattner CFCMutableSet::GetCountOfValue(const void *value) const
63*30fdc8d8SChris Lattner {
64*30fdc8d8SChris Lattner     CFMutableSetRef set = get();
65*30fdc8d8SChris Lattner     if (set)
66*30fdc8d8SChris Lattner         return ::CFSetGetCountOfValue (set, value);
67*30fdc8d8SChris Lattner     return 0;
68*30fdc8d8SChris Lattner }
69*30fdc8d8SChris Lattner 
70*30fdc8d8SChris Lattner const void *
71*30fdc8d8SChris Lattner CFCMutableSet::GetValue(const void *value) const
72*30fdc8d8SChris Lattner {
73*30fdc8d8SChris Lattner     CFMutableSetRef set = get();
74*30fdc8d8SChris Lattner     if (set)
75*30fdc8d8SChris Lattner         return ::CFSetGetValue(set, value);
76*30fdc8d8SChris Lattner     return NULL;
77*30fdc8d8SChris Lattner }
78*30fdc8d8SChris Lattner 
79*30fdc8d8SChris Lattner 
80*30fdc8d8SChris Lattner const void *
81*30fdc8d8SChris Lattner CFCMutableSet::AddValue(const void *value, bool can_create)
82*30fdc8d8SChris Lattner {
83*30fdc8d8SChris Lattner     CFMutableSetRef set = get();
84*30fdc8d8SChris Lattner     if (set == NULL)
85*30fdc8d8SChris Lattner     {
86*30fdc8d8SChris Lattner         if (can_create == false)
87*30fdc8d8SChris Lattner             return false;
88*30fdc8d8SChris Lattner         set = ::CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks);
89*30fdc8d8SChris Lattner         reset ( set );
90*30fdc8d8SChris Lattner     }
91*30fdc8d8SChris Lattner     if (set != NULL)
92*30fdc8d8SChris Lattner     {
93*30fdc8d8SChris Lattner         ::CFSetAddValue(set, value);
94*30fdc8d8SChris Lattner         return value;
95*30fdc8d8SChris Lattner     }
96*30fdc8d8SChris Lattner     return NULL;
97*30fdc8d8SChris Lattner }
98*30fdc8d8SChris Lattner 
99*30fdc8d8SChris Lattner void
100*30fdc8d8SChris Lattner CFCMutableSet::RemoveValue(const void *value)
101*30fdc8d8SChris Lattner {
102*30fdc8d8SChris Lattner     CFMutableSetRef set = get();
103*30fdc8d8SChris Lattner     if (set)
104*30fdc8d8SChris Lattner         ::CFSetRemoveValue(set, value);
105*30fdc8d8SChris Lattner }
106*30fdc8d8SChris Lattner 
107*30fdc8d8SChris Lattner void
108*30fdc8d8SChris Lattner CFCMutableSet::RemoveAllValues()
109*30fdc8d8SChris Lattner {
110*30fdc8d8SChris Lattner     CFMutableSetRef set = get();
111*30fdc8d8SChris Lattner     if (set)
112*30fdc8d8SChris Lattner         ::CFSetRemoveAllValues(set);
113*30fdc8d8SChris Lattner }
114*30fdc8d8SChris Lattner 
115