41 #if !defined(__CACFData_h__)
42 #define __CACFData_h__
48 #if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
49 #include <CoreAudio/CoreAudioTypes.h>
50 #include <CoreFoundation/CFData.h>
52 #include <CoreAudioTypes.h>
56 #include "CADebugMacros.h"
67 CACFData(CFDataRef inCFData,
bool inWillRelease =
true) : mCFData(inCFData), mWillRelease(inWillRelease) {}
68 CACFData(
const void* inData, UInt32 inDataSize) : mCFData(NULL), mWillRelease(true) { mCFData = CFDataCreate(NULL, static_cast<const UInt8*>(inData), inDataSize); }
69 ~CACFData() { Release(); }
70 CACFData(
const CACFData& inNumber) : mCFData(inNumber.mCFData), mWillRelease(inNumber.mWillRelease) { Retain(); }
71 CACFData& operator=(
const CACFData& inNumber) { Release(); mCFData = inNumber.mCFData; mWillRelease = inNumber.mWillRelease; Retain();
return *
this; }
72 CACFData& operator=(CFDataRef inCFData) { Release(); mCFData = inCFData; mWillRelease =
true;
return *
this; }
75 void Retain() {
if(mWillRelease && (mCFData != NULL)) { CFRetain(mCFData); } }
76 void Release() {
if(mWillRelease && (mCFData != NULL)) { CFRelease(mCFData); } }
83 void AllowRelease() { mWillRelease =
true; }
84 void DontAllowRelease() { mWillRelease =
false; }
85 bool IsValid() {
return mCFData != NULL; }
89 CFDataRef GetCFData()
const {
return mCFData; }
90 CFDataRef CopyCFData()
const {
if(mCFData != NULL) { CFRetain(mCFData); }
return mCFData; }
92 UInt32 GetSize()
const {
return ToUInt32(CFDataGetLength(mCFData)); }
93 const void* GetDataPtr()
const {
return CFDataGetBytePtr(mCFData); }
94 void CopyData(UInt32 inStartOffset,
void* outData, UInt32 inDataSize)
const { CFRange theRange = { inStartOffset, inDataSize }; CFDataGetBytes(mCFData, theRange, static_cast<UInt8*>(outData)); }
96 SInt32 GetSInt32()
const { SInt32 theAnswer = 0; CopyData(0, &theAnswer, SizeOf32(SInt32));
return theAnswer; }
97 Float32 GetFloat32()
const { Float32 theAnswer = 0; CopyData(0, &theAnswer, SizeOf32(Float32));
return theAnswer; }