1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
//===-- CFCMutableArray.cpp -------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "CFCMutableArray.h"
#include "CFCString.h"
//----------------------------------------------------------------------
// CFCString constructor
//----------------------------------------------------------------------
CFCMutableArray::CFCMutableArray(CFMutableArrayRef s) :
CFCReleaser<CFMutableArrayRef> (s)
{
}
//----------------------------------------------------------------------
// CFCMutableArray copy constructor
//----------------------------------------------------------------------
CFCMutableArray::CFCMutableArray(const CFCMutableArray& rhs) :
CFCReleaser<CFMutableArrayRef> (rhs) // NOTE: this won't make a copy of the array, just add a new reference to it
{
}
//----------------------------------------------------------------------
// CFCMutableArray copy constructor
//----------------------------------------------------------------------
CFCMutableArray&
CFCMutableArray::operator=(const CFCMutableArray& rhs)
{
if (this != &rhs)
*this = rhs; // NOTE: this operator won't make a copy of the array, just add a new reference to it
return *this;
}
//----------------------------------------------------------------------
// Destructor
//----------------------------------------------------------------------
CFCMutableArray::~CFCMutableArray()
{
}
CFIndex
CFCMutableArray::GetCount() const
{
CFMutableArrayRef array = get();
if (array)
return ::CFArrayGetCount (array);
return 0;
}
CFIndex
CFCMutableArray::GetCountOfValue(CFRange range, const void *value) const
{
CFMutableArrayRef array = get();
if (array)
return ::CFArrayGetCountOfValue (array, range, value);
return 0;
}
CFIndex
CFCMutableArray::GetCountOfValue(const void *value) const
{
CFMutableArrayRef array = get();
if (array)
return ::CFArrayGetCountOfValue (array, CFRangeMake(0, GetCount()), value);
return 0;
}
const void *
CFCMutableArray::GetValueAtIndex(CFIndex idx) const
{
CFMutableArrayRef array = get();
if (array)
{
const CFIndex num_array_items = ::CFArrayGetCount (array);
if (0 <= idx && idx < num_array_items)
{
return ::CFArrayGetValueAtIndex (array, idx);
}
}
return NULL;
}
bool
CFCMutableArray::SetValueAtIndex(CFIndex idx, const void *value)
{
CFMutableArrayRef array = get();
if (array != NULL)
{
const CFIndex num_array_items = ::CFArrayGetCount (array);
if (0 <= idx && idx < num_array_items)
{
::CFArraySetValueAtIndex (array, idx, value);
return true;
}
}
return false;
}
bool
CFCMutableArray::AppendValue(const void *value, bool can_create)
{
CFMutableArrayRef array = get();
if (array == NULL)
{
if (can_create == false)
return false;
array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
reset ( array );
}
if (array != NULL)
{
::CFArrayAppendValue(array, value);
return true;
}
return false;
}
bool
CFCMutableArray::AppendCStringAsCFString (const char *s, CFStringEncoding encoding, bool can_create)
{
CFMutableArrayRef array = get();
if (array == NULL)
{
if (can_create == false)
return false;
array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
reset ( array );
}
if (array != NULL)
{
CFCString cf_str (s, encoding);
::CFArrayAppendValue (array, cf_str.get());
return true;
}
return false;
}
bool
CFCMutableArray::AppendFileSystemRepresentationAsCFString (const char *s, bool can_create)
{
CFMutableArrayRef array = get();
if (array == NULL)
{
if (can_create == false)
return false;
array = ::CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
reset ( array );
}
if (array != NULL)
{
CFCString cf_path;
cf_path.SetFileSystemRepresentation(s);
::CFArrayAppendValue (array, cf_path.get());
return true;
}
return false;
}
|