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