Magick++
7.1.2-29
Convert, Edit, Or Compose Bitmap Images
Toggle main menu visibility
Loading...
Searching...
No Matches
BlobRef.cpp
1
// This may look like C code, but it is really -*- C++ -*-
2
//
3
// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2004
4
//
5
// Copyright @ 2014 ImageMagick Studio LLC, a non-profit organization
6
// dedicated to making software imaging solutions freely available.
7
//
8
// Implementation of Blob
9
//
10
11
#define MAGICKCORE_IMPLEMENTATION 1
12
#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
13
14
#include "Magick++/Include.h"
15
#include "Magick++/BlobRef.h"
16
#include "Magick++/Exception.h"
17
#include "Magick++/Thread.h"
18
19
#include <string.h>
20
21
Magick::BlobRef::BlobRef(
const
void
* data_,
const
size_t
length_)
22
: allocator(Magick::Blob::NewAllocator),
23
length(length_),
24
data((void*) NULL),
25
_mutexLock(),
26
_refCount(1)
27
{
28
if
(data_ != (
const
void
*) NULL)
29
{
30
data=
new
unsigned
char
[length_];
31
memcpy(data,data_,length_);
32
}
33
}
34
35
Magick::BlobRef::~BlobRef(
void
)
36
{
37
if
(allocator == Magick::Blob::NewAllocator)
38
{
39
delete
[]
static_cast<
unsigned
char
*
>
(data);
40
data=(
void
*) NULL;
41
}
42
else
if
(allocator == Magick::Blob::MallocAllocator)
43
data=(
void
*) RelinquishMagickMemory(data);
44
}
45
46
size_t
Magick::BlobRef::decrease()
47
{
48
size_t
49
count;
50
51
_mutexLock.lock();
52
if
(_refCount == 0)
53
{
54
_mutexLock.unlock();
55
throwExceptionExplicit(MagickCore::OptionError,
56
"Invalid call to decrease"
);
57
return
(0);
58
}
59
count=--_refCount;
60
_mutexLock.unlock();
61
return
(count);
62
}
63
64
void
Magick::BlobRef::increase()
65
{
66
_mutexLock.lock();
67
_refCount++;
68
_mutexLock.unlock();
69
}
Magick++
lib
BlobRef.cpp
Generated by
1.17.0