124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CFCData.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 "CFCData.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFCData constructor 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData::CFCData(CFDataRef data) : 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFCReleaser<CFDataRef>(data) 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFCData copy constructor 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData::CFCData(const CFCData& rhs) : 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFCReleaser<CFDataRef>(rhs) 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFCData copy constructor 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData& 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData::operator=(const CFCData& rhs) 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *this = rhs; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData::~CFCData() 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFIndex 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData::GetLength() const 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFDataRef data = get(); 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (data) 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return CFDataGetLength (data); 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst uint8_t* 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData::GetBytePtr() const 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFDataRef data = get(); 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (data) 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return CFDataGetBytePtr (data); 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return NULL; 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFDataRef 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFCData::Serialize(CFPropertyListRef plist, CFPropertyListFormat format) 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFAllocatorRef alloc = kCFAllocatorDefault; 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner reset(); 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFCReleaser<CFWriteStreamRef> stream (::CFWriteStreamCreateWithAllocatedBuffers (alloc, alloc)); 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ::CFWriteStreamOpen (stream.get()); 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFIndex len = ::CFPropertyListWriteToStream (plist, stream.get(), format, NULL); 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (len > 0) 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner reset((CFDataRef)::CFWriteStreamCopyProperty (stream.get(), kCFStreamPropertyDataWritten)); 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ::CFWriteStreamClose (stream.get()); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return get(); 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 83