1 //===-- CFCData.cpp ---------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "CFCData.h" 11 12 //---------------------------------------------------------------------- 13 // CFCData constructor 14 //---------------------------------------------------------------------- 15 CFCData::CFCData(CFDataRef data) : CFCReleaser<CFDataRef>(data) {} 16 17 //---------------------------------------------------------------------- 18 // CFCData copy constructor 19 //---------------------------------------------------------------------- 20 CFCData::CFCData(const CFCData &rhs) : CFCReleaser<CFDataRef>(rhs) {} 21 22 //---------------------------------------------------------------------- 23 // CFCData copy constructor 24 //---------------------------------------------------------------------- 25 CFCData &CFCData::operator=(const CFCData &rhs) 26 27 { 28 if (this != &rhs) 29 *this = rhs; 30 return *this; 31 } 32 33 //---------------------------------------------------------------------- 34 // Destructor 35 //---------------------------------------------------------------------- 36 CFCData::~CFCData() {} 37 38 CFIndex CFCData::GetLength() const { 39 CFDataRef data = get(); 40 if (data) 41 return CFDataGetLength(data); 42 return 0; 43 } 44 45 const uint8_t *CFCData::GetBytePtr() const { 46 CFDataRef data = get(); 47 if (data) 48 return CFDataGetBytePtr(data); 49 return NULL; 50 } 51 52 CFDataRef CFCData::Serialize(CFPropertyListRef plist, 53 CFPropertyListFormat format) { 54 CFAllocatorRef alloc = kCFAllocatorDefault; 55 reset(); 56 CFCReleaser<CFWriteStreamRef> stream( 57 ::CFWriteStreamCreateWithAllocatedBuffers(alloc, alloc)); 58 ::CFWriteStreamOpen(stream.get()); 59 CFIndex len = 60 ::CFPropertyListWriteToStream(plist, stream.get(), format, NULL); 61 if (len > 0) 62 reset((CFDataRef)::CFWriteStreamCopyProperty(stream.get(), 63 kCFStreamPropertyDataWritten)); 64 ::CFWriteStreamClose(stream.get()); 65 return get(); 66 } 67