124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CFCMutableSet.cpp ---------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "CFCMutableSet.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFCString constructor
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::CFCMutableSet(CFMutableSetRef s) :
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFCReleaser<CFMutableSetRef> (s)
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFCMutableSet copy constructor
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::CFCMutableSet(const CFCMutableSet& rhs) :
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFCReleaser<CFMutableSetRef> (rhs)
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFCMutableSet copy constructor
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst CFCMutableSet&
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::operator=(const CFCMutableSet& rhs)
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (this != &rhs)
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        *this = rhs;
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return *this;
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::~CFCMutableSet()
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFIndex
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::GetCount() const
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFMutableSetRef set = get();
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (set)
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return ::CFSetGetCount (set);
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFIndex
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::GetCountOfValue(const void *value) const
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFMutableSetRef set = get();
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (set)
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return ::CFSetGetCountOfValue (set, value);
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst void *
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::GetValue(const void *value) const
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFMutableSetRef set = get();
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (set)
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return ::CFSetGetValue(set, value);
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return NULL;
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst void *
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::AddValue(const void *value, bool can_create)
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFMutableSetRef set = get();
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (set == NULL)
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (can_create == false)
87f8e98a6e4560c632a9c0373abee247e747097845Greg Clayton            return NULL;
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        set = ::CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks);
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        reset ( set );
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (set != NULL)
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        ::CFSetAddValue(set, value);
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return value;
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return NULL;
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::RemoveValue(const void *value)
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFMutableSetRef set = get();
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (set)
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        ::CFSetRemoveValue(set, value);
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCMutableSet::RemoveAllValues()
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CFMutableSetRef set = get();
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (set)
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        ::CFSetRemoveAllValues(set);
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
115