41 #if !defined(__CACFString_h__)
42 #define __CACFString_h__
48 #include "CADebugMacros.h"
50 #if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
51 #include <CoreAudio/CoreAudioTypes.h>
52 #include <CoreFoundation/CFString.h>
54 #include <CoreAudioTypes.h>
66 CACFString() : mCFString(NULL), mWillRelease(true) {}
67 CACFString(CFStringRef inCFString,
bool inWillRelease =
true) : mCFString(inCFString), mWillRelease(inWillRelease) {}
68 CACFString(
const char* inCString,
bool inWillRelease =
true) : mCFString(CFStringCreateWithCString(NULL, inCString, kCFStringEncodingASCII)), mWillRelease(inWillRelease) {}
69 CACFString(
const char* inCString, CFStringEncoding inCStringEncoding,
bool inWillRelease =
true) : mCFString(CFStringCreateWithCString(NULL, inCString, inCStringEncoding)), mWillRelease(inWillRelease) {}
70 ~CACFString() { Release(); }
71 CACFString(
const CACFString& inString) : mCFString(inString.mCFString), mWillRelease(inString.mWillRelease) { Retain(); }
72 CACFString& operator=(
const CACFString& inString) { Release(); mCFString = inString.mCFString; mWillRelease = inString.mWillRelease; Retain();
return *
this; }
73 CACFString& operator=(CFStringRef inCFString) { Release(); mCFString = inCFString; mWillRelease =
true;
return *
this; }
76 void Retain() {
if(mWillRelease && (mCFString != NULL)) { CFRetain(mCFString); } }
77 void Release() {
if(mWillRelease && (mCFString != NULL)) { CFRelease(mCFString); } }
79 CFStringRef mCFString;
84 void AllowRelease() { mWillRelease =
true; }
85 void DontAllowRelease() { mWillRelease =
false; }
86 bool IsValid()
const {
return mCFString != NULL; }
87 bool StartsWith(CFStringRef inString)
const {
bool theAnswer =
false;
if(mCFString != NULL) { theAnswer = CFStringHasPrefix(mCFString, inString); }
return theAnswer; }
88 bool EndsWith(CFStringRef inString)
const {
bool theAnswer =
false;
if(mCFString != NULL) { theAnswer = CFStringHasSuffix(mCFString, inString); }
return theAnswer; }
92 CFStringRef GetCFString()
const {
return mCFString; }
93 CFStringRef CopyCFString()
const {
if(mCFString != NULL) { CFRetain(mCFString); }
return mCFString; }
94 UInt32 GetLength()
const { UInt32 theAnswer = 0;
if(mCFString != NULL) { theAnswer = ToUInt32(CFStringGetLength(mCFString)); }
return theAnswer; }
95 UInt32 GetByteLength(CFStringEncoding inEncoding = kCFStringEncodingUTF8)
const { UInt32 theAnswer = 0;
if(mCFString != NULL) { theAnswer = GetStringByteLength(mCFString, inEncoding); }
return theAnswer; }
96 void GetCString(
char* outString, UInt32& ioStringSize, CFStringEncoding inEncoding = kCFStringEncodingUTF8)
const { GetCString(mCFString, outString, ioStringSize, inEncoding); }
97 void GetUnicodeString(UInt16* outString, UInt32& ioStringSize)
const { GetUnicodeString(mCFString, outString, ioStringSize); }
98 SInt32 GetAsInteger() {
return GetAsInteger(mCFString); }
99 Float64 GetAsFloat64() {
return GetAsFloat64(mCFString); }
101 static UInt32 GetStringByteLength(CFStringRef inCFString, CFStringEncoding inEncoding = kCFStringEncodingUTF8);
102 static void GetCString(CFStringRef inCFString,
char* outString, UInt32& ioStringSize, CFStringEncoding inEncoding = kCFStringEncodingUTF8);
103 static void GetUnicodeString(CFStringRef inCFString, UInt16* outString, UInt32& ioStringSize);
104 static SInt32 GetAsInteger(CFStringRef inCFString) { SInt32 theAnswer = 0;
if(inCFString != NULL){ theAnswer = CFStringGetIntValue(inCFString); }
return theAnswer; }
105 static Float64 GetAsFloat64(CFStringRef inCFString) { Float64 theAnswer = 0;
if(inCFString != NULL){ theAnswer = CFStringGetDoubleValue(inCFString); }
return theAnswer; }
109 inline bool operator<(
const CACFString& x,
const CACFString& y) {
return CFStringCompare(x.GetCFString(), y.GetCFString(), 0) == kCFCompareLessThan; }
110 inline bool operator==(
const CACFString& x,
const CACFString& y) {
return CFStringCompare(x.GetCFString(), y.GetCFString(), 0) == kCFCompareEqualTo; }
111 inline bool operator!=(
const CACFString& x,
const CACFString& y) {
return !(x == y); }
112 inline bool operator<=(
const CACFString& x,
const CACFString& y) {
return (x < y) || (x == y); }
113 inline bool operator>=(
const CACFString& x,
const CACFString& y) {
return !(x < y); }
114 inline bool operator>(
const CACFString& x,
const CACFString& y) {
return !((x < y) || (x == y)); }
120 class CACFMutableString
124 CACFMutableString() : mCFMutableString(NULL), mWillRelease(true) {}
125 CACFMutableString(CFMutableStringRef inCFMutableString,
bool inWillRelease =
true) : mCFMutableString(inCFMutableString), mWillRelease(inWillRelease) {}
126 CACFMutableString(CFStringRef inStringToCopy,
bool ,
bool inWillRelease =
true) : mCFMutableString(CFStringCreateMutableCopy(NULL, 0, inStringToCopy)), mWillRelease(inWillRelease) {}
127 CACFMutableString(
const char* inCString,
bool inWillRelease =
true) : mCFMutableString(NULL), mWillRelease(inWillRelease) { CACFString theString(inCString); mCFMutableString = CFStringCreateMutableCopy(NULL, 0, theString.GetCFString()); }
128 CACFMutableString(
const char* inCString, CFStringEncoding inCStringEncoding,
bool inWillRelease =
true) : mCFMutableString(NULL), mWillRelease(inWillRelease) { CACFString theString(inCString, inCStringEncoding); mCFMutableString = CFStringCreateMutableCopy(NULL, 0, theString.GetCFString()); }
129 ~CACFMutableString() { Release(); }
130 CACFMutableString(
const CACFMutableString& inString) : mCFMutableString(inString.mCFMutableString), mWillRelease(inString.mWillRelease) { Retain(); }
131 CACFMutableString& operator=(
const CACFMutableString& inString) { Release(); mCFMutableString = inString.mCFMutableString; mWillRelease = inString.mWillRelease; Retain();
return *
this; }
132 CACFMutableString& operator=(CFMutableStringRef inCFMutableString) { Release(); mCFMutableString = inCFMutableString; mWillRelease =
true;
return *
this; }
135 void Retain() {
if(mWillRelease && (mCFMutableString != NULL)) { CFRetain(mCFMutableString); } }
136 void Release() {
if(mWillRelease && (mCFMutableString != NULL)) { CFRelease(mCFMutableString); } }
138 CFMutableStringRef mCFMutableString;
143 void AllowRelease() { mWillRelease =
true; }
144 void DontAllowRelease() { mWillRelease =
false; }
145 bool IsValid() {
return mCFMutableString != NULL; }
146 bool StartsWith(CFStringRef inString)
const {
bool theAnswer =
false;
if(mCFMutableString != NULL) { theAnswer = CFStringHasPrefix(mCFMutableString, inString); }
return theAnswer; }
147 bool EndsWith(CFStringRef inString)
const {
bool theAnswer =
false;
if(mCFMutableString != NULL) { theAnswer = CFStringHasSuffix(mCFMutableString, inString); }
return theAnswer; }
148 void Append(CFStringRef inString) {
if(mCFMutableString != NULL) { CFStringAppend(mCFMutableString, inString); } }
152 CFMutableStringRef GetCFMutableString()
const {
return mCFMutableString; }
153 CFMutableStringRef CopyCFMutableString()
const {
if(mCFMutableString != NULL) { CFRetain(mCFMutableString); }
return mCFMutableString; }
154 UInt32 GetLength()
const { UInt32 theAnswer = 0;
if(mCFMutableString != NULL) { theAnswer = ToUInt32(CFStringGetLength(mCFMutableString)); }
return theAnswer; }
155 UInt32 GetByteLength(CFStringEncoding inEncoding = kCFStringEncodingUTF8)
const { UInt32 theAnswer = 0;
if(mCFMutableString != NULL) { theAnswer = CACFString::GetStringByteLength(mCFMutableString, inEncoding); }
return theAnswer; }
156 void GetCString(
char* outString, UInt32& ioStringSize, CFStringEncoding inEncoding = kCFStringEncodingUTF8)
const { CACFString::GetCString(mCFMutableString, outString, ioStringSize, inEncoding); }
157 void GetUnicodeString(UInt16* outString, UInt32& ioStringSize)
const { CACFString::GetUnicodeString(mCFMutableString, outString, ioStringSize); }
158 SInt32 GetAsInteger() {
return CACFString::GetAsInteger(mCFMutableString); }
159 Float64 GetAsFloat64() {
return CACFString::GetAsFloat64(mCFMutableString); }
bool TTFOUNDATION_EXPORT operator!=(const TTObject &anObject, const TTObject &anotherObject)
Compare two objects for inequality.
bool TTFOUNDATION_EXPORT operator==(const TTObject &anObject, const TTObject &anotherObject)
Compare two objects for equality.