1//===-- CFData.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//  Created by Greg Clayton on 1/16/08.
11//
12//===----------------------------------------------------------------------===//
13
14#include "CFData.h"
15
16//----------------------------------------------------------------------
17// CFData constructor
18//----------------------------------------------------------------------
19CFData::CFData(CFDataRef data) :
20    CFReleaser<CFDataRef>(data)
21{
22
23}
24
25//----------------------------------------------------------------------
26// CFData copy constructor
27//----------------------------------------------------------------------
28CFData::CFData(const CFData& rhs) :
29    CFReleaser<CFDataRef>(rhs)
30{
31
32}
33
34//----------------------------------------------------------------------
35// CFData copy constructor
36//----------------------------------------------------------------------
37CFData&
38CFData::operator=(const CFData& rhs)
39
40{
41    *this = rhs;
42    return *this;
43}
44
45//----------------------------------------------------------------------
46// Destructor
47//----------------------------------------------------------------------
48CFData::~CFData()
49{
50}
51
52
53CFIndex
54CFData::GetLength() const
55{
56    CFDataRef data = get();
57    if (data)
58        return CFDataGetLength (data);
59    return 0;
60}
61
62
63const uint8_t*
64CFData::GetBytePtr() const
65{
66    CFDataRef data = get();
67    if (data)
68        return CFDataGetBytePtr (data);
69    return NULL;
70}
71
72CFDataRef
73CFData::Serialize(CFPropertyListRef plist, CFPropertyListFormat format)
74{
75    CFAllocatorRef alloc = kCFAllocatorDefault;
76    reset();
77    CFReleaser<CFWriteStreamRef> stream (::CFWriteStreamCreateWithAllocatedBuffers (alloc, alloc));
78    ::CFWriteStreamOpen (stream.get());
79    CFIndex len = ::CFPropertyListWriteToStream (plist, stream.get(), format, NULL);
80    if (len > 0)
81        reset((CFDataRef)::CFWriteStreamCopyProperty (stream.get(), kCFStreamPropertyDataWritten));
82    ::CFWriteStreamClose (stream.get());
83    return get();
84}
85
86