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 Stone CFCData::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 Stone CFCData &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 Stone CFIndex 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 Stone const 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 Stone CFDataRef 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