MagickWand 7.1.0
Convert, Edit, Or Compose Bitmap Images
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/script/license.php %
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
50static SplayTreeInfo
51 *wand_ids = (SplayTreeInfo *) NULL;
52
53static MagickBooleanType
54 instantiate_wand = MagickFalse;
55
56static SemaphoreInfo
57 *wand_semaphore = (SemaphoreInfo *) NULL;
58
59/*
60%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61% %
62% %
63% %
64% A c q u i r e W a n d I d %
65% %
66% %
67% %
68%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69%
70% AcquireWandId() returns a unique wand id.
71%
72% The format of the AcquireWandId() method is:
73%
74% size_t AcquireWandId()
75%
76*/
77WandExport size_t AcquireWandId(void)
78{
79 MagickAddressType
80 wand_id;
81
82 static size_t
83 id = 0;
84
85 if (wand_semaphore == (SemaphoreInfo *) NULL)
86 ActivateSemaphoreInfo(&wand_semaphore);
87 LockSemaphoreInfo(wand_semaphore);
88 if (wand_ids == (SplayTreeInfo *) NULL)
89 wand_ids=NewSplayTree((int (*)(const void *,const void *)) NULL,
90 (void *(*)(void *)) NULL,(void *(*)(void *)) NULL);
91 wand_id=id++;
92 (void) AddValueToSplayTree(wand_ids,(const void *) wand_id,(const void *)
93 wand_id);
94 instantiate_wand=MagickTrue;
95 UnlockSemaphoreInfo(wand_semaphore);
96 return((size_t) wand_id);
97}
98
99/*
100%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
101% %
102% %
103% %
104% D e s t r o y W a n d I d s %
105% %
106% %
107% %
108%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
109%
110% DestroyWandIds() deallocates memory associated with the wand id's.
111%
112% The format of the DestroyWandIds() method is:
113%
114% void DestroyWandIds(void)
115%
116% A description of each parameter follows:
117%
118*/
119WandExport void DestroyWandIds(void)
120{
121 if (wand_semaphore == (SemaphoreInfo *) NULL)
122 ActivateSemaphoreInfo(&wand_semaphore);
123 LockSemaphoreInfo(wand_semaphore);
124 if (wand_ids != (SplayTreeInfo *) NULL)
125 wand_ids=DestroySplayTree(wand_ids);
126 instantiate_wand=MagickFalse;
127 UnlockSemaphoreInfo(wand_semaphore);
128 RelinquishSemaphoreInfo(&wand_semaphore);
129}
130
131/*
132%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
133% %
134% %
135% %
136% R e l i n q u i s h W a n d I d %
137% %
138% %
139% %
140%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
141%
142% RelinquishWandId() relinquishes a unique wand id.
143%
144% The format of the RelinquishWandId() method is:
145%
146% void RelinquishWandId(const size_t *id)
147%
148% A description of each parameter follows:
149%
150% o id: a unique wand id.
151%
152*/
153WandExport void RelinquishWandId(const size_t id)
154{
155 MagickAddressType
156 wand_id = (MagickAddressType) id;
157
158 LockSemaphoreInfo(wand_semaphore);
159 if (wand_ids != (SplayTreeInfo *) NULL)
160 (void) DeleteNodeFromSplayTree(wand_ids,(const void *) wand_id);
161 UnlockSemaphoreInfo(wand_semaphore);
162}