180814287SRaphael Isemann //===-- CFCData.cpp -------------------------------------------------------===// 230fdc8d8SChris Lattner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 630fdc8d8SChris Lattner // 730fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 830fdc8d8SChris Lattner 930fdc8d8SChris Lattner #include "CFCData.h" 1030fdc8d8SChris Lattner 1130fdc8d8SChris Lattner // CFCData constructor CFCData(CFDataRef data)12b9c1b51eSKate StoneCFCData::CFCData(CFDataRef data) : CFCReleaser<CFDataRef>(data) {} 1330fdc8d8SChris Lattner 1430fdc8d8SChris Lattner // CFCData copy constructor 15*24f9a2f5SShafik Yaghmour CFCData::CFCData(const CFCData &rhs) = default; 1630fdc8d8SChris Lattner 1730fdc8d8SChris Lattner // CFCData copy constructor operator =(const CFCData & rhs)18b9c1b51eSKate StoneCFCData &CFCData::operator=(const CFCData &rhs) 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner { 2130fdc8d8SChris Lattner if (this != &rhs) 2230fdc8d8SChris Lattner *this = rhs; 2330fdc8d8SChris Lattner return *this; 2430fdc8d8SChris Lattner } 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner // Destructor 27fd2433e1SJonas Devlieghere CFCData::~CFCData() = default; 2830fdc8d8SChris Lattner GetLength() const29b9c1b51eSKate StoneCFIndex CFCData::GetLength() const { 3030fdc8d8SChris Lattner CFDataRef data = get(); 3130fdc8d8SChris Lattner if (data) 3230fdc8d8SChris Lattner return CFDataGetLength(data); 3330fdc8d8SChris Lattner return 0; 3430fdc8d8SChris Lattner } 3530fdc8d8SChris Lattner GetBytePtr() const36b9c1b51eSKate Stoneconst uint8_t *CFCData::GetBytePtr() const { 3730fdc8d8SChris Lattner CFDataRef data = get(); 3830fdc8d8SChris Lattner if (data) 3930fdc8d8SChris Lattner return CFDataGetBytePtr(data); 4030fdc8d8SChris Lattner return NULL; 4130fdc8d8SChris Lattner } 4230fdc8d8SChris Lattner Serialize(CFPropertyListRef plist,CFPropertyListFormat format)43b9c1b51eSKate StoneCFDataRef CFCData::Serialize(CFPropertyListRef plist, 44b9c1b51eSKate Stone CFPropertyListFormat format) { 4530fdc8d8SChris Lattner CFAllocatorRef alloc = kCFAllocatorDefault; 4630fdc8d8SChris Lattner reset(); 47b9c1b51eSKate Stone CFCReleaser<CFWriteStreamRef> stream( 48b9c1b51eSKate Stone ::CFWriteStreamCreateWithAllocatedBuffers(alloc, alloc)); 4930fdc8d8SChris Lattner ::CFWriteStreamOpen(stream.get()); 50b9c1b51eSKate Stone CFIndex len = 51b9c1b51eSKate Stone ::CFPropertyListWriteToStream(plist, stream.get(), format, NULL); 5230fdc8d8SChris Lattner if (len > 0) 53b9c1b51eSKate Stone reset((CFDataRef)::CFWriteStreamCopyProperty(stream.get(), 54b9c1b51eSKate Stone kCFStreamPropertyDataWritten)); 5530fdc8d8SChris Lattner ::CFWriteStreamClose(stream.get()); 5630fdc8d8SChris Lattner return get(); 5730fdc8d8SChris Lattner } 58