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