130fdc8d8SChris Lattner //===-- CFCMutableSet.cpp ---------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
1030fdc8d8SChris Lattner #include "CFCMutableSet.h"
1130fdc8d8SChris Lattner 
1230fdc8d8SChris Lattner // C Includes
1330fdc8d8SChris Lattner // C++ Includes
1430fdc8d8SChris Lattner // Other libraries and framework includes
1530fdc8d8SChris Lattner // Project includes
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner //----------------------------------------------------------------------
1830fdc8d8SChris Lattner // CFCString constructor
1930fdc8d8SChris Lattner //----------------------------------------------------------------------
2030fdc8d8SChris Lattner CFCMutableSet::CFCMutableSet(CFMutableSetRef s) :
2130fdc8d8SChris Lattner     CFCReleaser<CFMutableSetRef> (s)
2230fdc8d8SChris Lattner {
2330fdc8d8SChris Lattner }
2430fdc8d8SChris Lattner 
2530fdc8d8SChris Lattner //----------------------------------------------------------------------
2630fdc8d8SChris Lattner // CFCMutableSet copy constructor
2730fdc8d8SChris Lattner //----------------------------------------------------------------------
2830fdc8d8SChris Lattner CFCMutableSet::CFCMutableSet(const CFCMutableSet& rhs) :
2930fdc8d8SChris Lattner     CFCReleaser<CFMutableSetRef> (rhs)
3030fdc8d8SChris Lattner {
3130fdc8d8SChris Lattner }
3230fdc8d8SChris Lattner 
3330fdc8d8SChris Lattner //----------------------------------------------------------------------
3430fdc8d8SChris Lattner // CFCMutableSet copy constructor
3530fdc8d8SChris Lattner //----------------------------------------------------------------------
3630fdc8d8SChris Lattner const CFCMutableSet&
3730fdc8d8SChris Lattner CFCMutableSet::operator=(const CFCMutableSet& rhs)
3830fdc8d8SChris Lattner {
3930fdc8d8SChris Lattner     if (this != &rhs)
4030fdc8d8SChris Lattner         *this = rhs;
4130fdc8d8SChris Lattner     return *this;
4230fdc8d8SChris Lattner }
4330fdc8d8SChris Lattner 
4430fdc8d8SChris Lattner //----------------------------------------------------------------------
4530fdc8d8SChris Lattner // Destructor
4630fdc8d8SChris Lattner //----------------------------------------------------------------------
4730fdc8d8SChris Lattner CFCMutableSet::~CFCMutableSet()
4830fdc8d8SChris Lattner {
4930fdc8d8SChris Lattner }
5030fdc8d8SChris Lattner 
5130fdc8d8SChris Lattner 
5230fdc8d8SChris Lattner CFIndex
5330fdc8d8SChris Lattner CFCMutableSet::GetCount() const
5430fdc8d8SChris Lattner {
5530fdc8d8SChris Lattner     CFMutableSetRef set = get();
5630fdc8d8SChris Lattner     if (set)
5730fdc8d8SChris Lattner         return ::CFSetGetCount (set);
5830fdc8d8SChris Lattner     return 0;
5930fdc8d8SChris Lattner }
6030fdc8d8SChris Lattner 
6130fdc8d8SChris Lattner CFIndex
6230fdc8d8SChris Lattner CFCMutableSet::GetCountOfValue(const void *value) const
6330fdc8d8SChris Lattner {
6430fdc8d8SChris Lattner     CFMutableSetRef set = get();
6530fdc8d8SChris Lattner     if (set)
6630fdc8d8SChris Lattner         return ::CFSetGetCountOfValue (set, value);
6730fdc8d8SChris Lattner     return 0;
6830fdc8d8SChris Lattner }
6930fdc8d8SChris Lattner 
7030fdc8d8SChris Lattner const void *
7130fdc8d8SChris Lattner CFCMutableSet::GetValue(const void *value) const
7230fdc8d8SChris Lattner {
7330fdc8d8SChris Lattner     CFMutableSetRef set = get();
7430fdc8d8SChris Lattner     if (set)
7530fdc8d8SChris Lattner         return ::CFSetGetValue(set, value);
7630fdc8d8SChris Lattner     return NULL;
7730fdc8d8SChris Lattner }
7830fdc8d8SChris Lattner 
7930fdc8d8SChris Lattner 
8030fdc8d8SChris Lattner const void *
8130fdc8d8SChris Lattner CFCMutableSet::AddValue(const void *value, bool can_create)
8230fdc8d8SChris Lattner {
8330fdc8d8SChris Lattner     CFMutableSetRef set = get();
8430fdc8d8SChris Lattner     if (set == NULL)
8530fdc8d8SChris Lattner     {
8630fdc8d8SChris Lattner         if (can_create == false)
87*19503a2aSGreg Clayton             return NULL;
8830fdc8d8SChris Lattner         set = ::CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks);
8930fdc8d8SChris Lattner         reset ( set );
9030fdc8d8SChris Lattner     }
9130fdc8d8SChris Lattner     if (set != NULL)
9230fdc8d8SChris Lattner     {
9330fdc8d8SChris Lattner         ::CFSetAddValue(set, value);
9430fdc8d8SChris Lattner         return value;
9530fdc8d8SChris Lattner     }
9630fdc8d8SChris Lattner     return NULL;
9730fdc8d8SChris Lattner }
9830fdc8d8SChris Lattner 
9930fdc8d8SChris Lattner void
10030fdc8d8SChris Lattner CFCMutableSet::RemoveValue(const void *value)
10130fdc8d8SChris Lattner {
10230fdc8d8SChris Lattner     CFMutableSetRef set = get();
10330fdc8d8SChris Lattner     if (set)
10430fdc8d8SChris Lattner         ::CFSetRemoveValue(set, value);
10530fdc8d8SChris Lattner }
10630fdc8d8SChris Lattner 
10730fdc8d8SChris Lattner void
10830fdc8d8SChris Lattner CFCMutableSet::RemoveAllValues()
10930fdc8d8SChris Lattner {
11030fdc8d8SChris Lattner     CFMutableSetRef set = get();
11130fdc8d8SChris Lattner     if (set)
11230fdc8d8SChris Lattner         ::CFSetRemoveAllValues(set);
11330fdc8d8SChris Lattner }
11430fdc8d8SChris Lattner 
115