MagickWand
7.1.2-31
Convert, Edit, Or Compose Bitmap Images
Toggle main menu visibility
Loading...
Searching...
No Matches
wand.c
1
/*
2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
% %
4
% %
5
% %
6
% W W AAA N N DDDD %
7
% W W A A NN N D D %
8
% W W W AAAAA N N N D D %
9
% WW WW A A N NN D D %
10
% W W A A N N DDDD %
11
% %
12
% %
13
% MagickWand Support Methods %
14
% %
15
% Software Design %
16
% Cristy %
17
% May 2004 %
18
% %
19
% %
20
% Copyright @ 1999 ImageMagick Studio LLC, a non-profit organization %
21
% dedicated to making software imaging solutions freely available. %
22
% %
23
% You may not use this file except in compliance with the License. You may %
24
% obtain a copy of the License at %
25
% %
26
% https://imagemagick.org/license/ %
27
% %
28
% Unless required by applicable law or agreed to in writing, software %
29
% distributed under the License is distributed on an "AS IS" BASIS, %
30
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
31
% See the License for the specific language governing permissions and %
32
% limitations under the License. %
33
% %
34
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35
%
36
% Assign unique ID's to each magick wand. We store the ID's in a splay-tree
37
% to track which ID's persist and which were destroyed.
38
%
39
%
40
*/
41
␌
42
/*
43
Include declarations.
44
*/
45
#include "MagickWand/studio.h"
46
#include "MagickWand/MagickWand.h"
47
#include "MagickWand/magick-wand-private.h"
48
#include "MagickWand/wand.h"
49
␌
50
static
SplayTreeInfo
51
*wand_ids = (SplayTreeInfo *) NULL;
52
53
static
SemaphoreInfo
54
*wand_semaphore = (SemaphoreInfo *) NULL;
55
␌
56
/*
57
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58
% %
59
% %
60
% %
61
% A c q u i r e W a n d I d %
62
% %
63
% %
64
% %
65
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66
%
67
% AcquireWandId() returns a unique wand id.
68
%
69
% The format of the AcquireWandId() method is:
70
%
71
% size_t AcquireWandId()
72
%
73
*/
74
WandExport
size_t
AcquireWandId(
void
)
75
{
76
MagickAddressType
77
wand_id;
78
79
static
size_t
80
id
= 0;
81
82
if
(wand_semaphore == (SemaphoreInfo *) NULL)
83
ActivateSemaphoreInfo(&wand_semaphore);
84
LockSemaphoreInfo(wand_semaphore);
85
if
(wand_ids == (SplayTreeInfo *) NULL)
86
wand_ids=NewSplayTree((
int
(*)(
const
void
*,
const
void
*)) NULL,
87
(
void
*(*)(
void
*)) NULL,(
void
*(*)(
void
*)) NULL);
88
wand_id=
id
++;
89
(void) AddValueToSplayTree(wand_ids,(
const
void
*) wand_id,(
const
void
*)
90
wand_id);
91
UnlockSemaphoreInfo(wand_semaphore);
92
return
((
size_t
) wand_id);
93
}
94
␌
95
/*
96
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
97
% %
98
% %
99
% %
100
% D e s t r o y W a n d I d s %
101
% %
102
% %
103
% %
104
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
105
%
106
% DestroyWandIds() deallocates memory associated with the wand id's.
107
%
108
% The format of the DestroyWandIds() method is:
109
%
110
% void DestroyWandIds(void)
111
%
112
% A description of each parameter follows:
113
%
114
*/
115
WandExport
void
DestroyWandIds(
void
)
116
{
117
if
(wand_semaphore == (SemaphoreInfo *) NULL)
118
ActivateSemaphoreInfo(&wand_semaphore);
119
LockSemaphoreInfo(wand_semaphore);
120
if
(wand_ids != (SplayTreeInfo *) NULL)
121
wand_ids=DestroySplayTree(wand_ids);
122
UnlockSemaphoreInfo(wand_semaphore);
123
RelinquishSemaphoreInfo(&wand_semaphore);
124
}
125
␌
126
/*
127
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
128
% %
129
% %
130
% %
131
% R e l i n q u i s h W a n d I d %
132
% %
133
% %
134
% %
135
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
136
%
137
% RelinquishWandId() relinquishes a unique wand id.
138
%
139
% The format of the RelinquishWandId() method is:
140
%
141
% void RelinquishWandId(const size_t *id)
142
%
143
% A description of each parameter follows:
144
%
145
% o id: a unique wand id.
146
%
147
*/
148
WandExport
void
RelinquishWandId(
const
size_t
id
)
149
{
150
MagickAddressType
151
wand_id = (MagickAddressType)
id
;
152
153
LockSemaphoreInfo(wand_semaphore);
154
if
(wand_ids != (SplayTreeInfo *) NULL)
155
(void) DeleteNodeFromSplayTree(wand_ids,(
const
void
*) wand_id);
156
UnlockSemaphoreInfo(wand_semaphore);
157
}
MagickWand
wand.c
Generated by
1.17.0