]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - source/Host/macosx/cfcpp/CFCData.cpp
Vendor import of lldb trunk r290819:
[FreeBSD/FreeBSD.git] / source / Host / macosx / cfcpp / CFCData.cpp
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 }