Magick++ 6.9.13
Loading...
Searching...
No Matches
Magick::Blob Class Reference
Inheritance diagram for Magick::Blob:
Collaboration diagram for Magick::Blob:

Public Types

enum  Allocator { MallocAllocator , NewAllocator }

Public Member Functions

 Blob (const void *data_, const size_t length_)
 Blob (const Blob &blob_)
Bloboperator= (const Blob &blob_)
void base64 (const std::string base64_)
std::string base64 (void)
const void * data (void) const
size_t length (void) const
void update (const void *data_, const size_t length_)
void updateNoCopy (void *data_, const size_t length_, Allocator allocator_=NewAllocator)

Private Attributes

BlobRef_blobRef

Detailed Description

Definition at line 20 of file Blob.h.

Member Enumeration Documentation

◆ Allocator

enum Magick::Blob::Allocator

Definition at line 24 of file Blob.h.

25 {
26 MallocAllocator,
27 NewAllocator
28 };

Constructor & Destructor Documentation

◆ Blob() [1/3]

Magick::Blob::Blob ( void )

Definition at line 18 of file Blob.cpp.

19 : _blobRef(new Magick::BlobRef(0,0))
20{
21}

◆ Blob() [2/3]

Magick::Blob::Blob ( const void * data_,
const size_t length_ )

Definition at line 23 of file Blob.cpp.

24 : _blobRef(new Magick::BlobRef(data_,length_))
25{
26}

◆ Blob() [3/3]

Magick::Blob::Blob ( const Blob & blob_)

Definition at line 28 of file Blob.cpp.

29 : _blobRef(blob_._blobRef)
30{
31 // Increase reference count
32 Lock lock(&_blobRef->_mutexLock);
33 ++_blobRef->_refCount;
34}

◆ ~Blob()

Magick::Blob::~Blob ( )
virtual

Definition at line 36 of file Blob.cpp.

37{
38 bool doDelete=false;
39 {
40 Lock lock(&_blobRef->_mutexLock);
41 if (--_blobRef->_refCount == 0)
42 doDelete=true;
43 }
44
45 if (doDelete)
46 {
47 // Delete old blob reference with associated data
48 delete _blobRef;
49 }
50 _blobRef=0;
51}

Member Function Documentation

◆ base64() [1/2]

void Magick::Blob::base64 ( const std::string base64_)

Definition at line 79 of file Blob.cpp.

80{
81 size_t
82 length;
83
84 unsigned char
85 *decoded;
86
87 decoded=Base64Decode(base64_.c_str(),&length);
88 if (decoded)
89 updateNoCopy(static_cast<void*>(decoded),length,
90 Magick::Blob::MallocAllocator);
91}

◆ base64() [2/2]

std::string Magick::Blob::base64 ( void )

Definition at line 93 of file Blob.cpp.

94{
95 char
96 *encoded;
97
98 size_t
99 encoded_length;
100
101 std::string
102 result;
103
104 encoded_length=0;
105 encoded=Base64Encode(static_cast<const unsigned char*>(data()),length(),
106 &encoded_length);
107
108 if (encoded)
109 {
110 result=std::string(encoded,encoded_length);
111 encoded=(char *) RelinquishMagickMemory(encoded);
112 return result;
113 }
114
115 return(std::string());
116}

◆ data()

const void * Magick::Blob::data ( void ) const

Definition at line 118 of file Blob.cpp.

119{
120 return(_blobRef->_data);
121}

◆ length()

size_t Magick::Blob::length ( void ) const

Definition at line 123 of file Blob.cpp.

124{
125 return(_blobRef->_length);
126}

◆ operator=()

Magick::Blob & Magick::Blob::operator= ( const Blob & blob_)

Definition at line 53 of file Blob.cpp.

54{
55 bool
56 doDelete;
57
58 if (this != &blob_)
59 {
60 {
61 Lock lock(&blob_._blobRef->_mutexLock);
62 ++blob_._blobRef->_refCount;
63 }
64 doDelete=false;
65 {
66 Lock lock(&_blobRef->_mutexLock);
67 if (--_blobRef->_refCount == 0)
68 doDelete=true;
69 }
70 if (doDelete)
71 {
72 delete _blobRef;
73 }
74 _blobRef=blob_._blobRef;
75 }
76 return(*this);
77}

◆ update()

void Magick::Blob::update ( const void * data_,
const size_t length_ )

Definition at line 128 of file Blob.cpp.

129{
130 bool
131 doDelete;
132
133 doDelete=false;
134 {
135 Lock lock( &_blobRef->_mutexLock );
136 if (--_blobRef->_refCount == 0)
137 doDelete=true;
138 }
139 if (doDelete)
140 {
141 // Delete old blob reference with associated data
142 delete _blobRef;
143 }
144
145 _blobRef=new Magick::BlobRef(data_,length_);
146}

◆ updateNoCopy()

void Magick::Blob::updateNoCopy ( void * data_,
const size_t length_,
Allocator allocator_ = NewAllocator )

Definition at line 148 of file Blob.cpp.

150{
151 bool
152 doDelete;
153
154 doDelete=false;
155 {
156 Lock lock(&_blobRef->_mutexLock);
157 if (--_blobRef->_refCount == 0)
158 doDelete=true;
159 }
160
161 if (doDelete)
162 {
163 // Delete old blob reference with associated data
164 delete _blobRef;
165 }
166 _blobRef=new Magick::BlobRef(0,0);
167 _blobRef->_data=data_;
168 _blobRef->_length=length_;
169 _blobRef->_allocator=allocator_;
170}

Member Data Documentation

◆ _blobRef

BlobRef* Magick::Blob::_blobRef
private

Definition at line 75 of file Blob.h.


The documentation for this class was generated from the following files:
  • ImageMagick-6/Magick++/lib/Magick++/Blob.h
  • ImageMagick-6/Magick++/lib/Blob.cpp