blob: d40fcf656461d91cea5bf15e15618628641a7e6e [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
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% John Cristy %
17% May 2004 %
18% %
19% %
20% Copyright 1999-2009 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% http://www.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%
37*/
38
39/*
40 Include declarations.
41*/
42#include "wand/studio.h"
43#include "wand/MagickWand.h"
44#include "wand/magick-wand-private.h"
45#include "wand/wand.h"
46
47static SplayTreeInfo
48 *wand_ids = (SplayTreeInfo *) NULL;
49
50static MagickBooleanType
51 instantiate_wand = MagickFalse;
52
53static 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% unsigned long AcquireWandId()
72%
73*/
74WandExport unsigned long AcquireWandId(void)
75{
76 static unsigned long
77 id = 0;
78
cristy18b17442009-10-25 18:36:48 +000079 if (wand_semaphore == (SemaphoreInfo *) NULL)
80 AcquireSemaphoreInfo(&wand_semaphore);
cristya45da9d2009-10-25 21:29:37 +000081 (void) LockSemaphoreInfo(wand_semaphore);
cristy3ed852e2009-09-05 21:47:34 +000082 if ((wand_ids == (SplayTreeInfo *) NULL) && (instantiate_wand == MagickFalse))
83 {
84 wand_ids=NewSplayTree((int (*)(const void *,const void *)) NULL,
85 (void *(*)(void *)) NULL,(void *(*)(void *)) NULL);
86 instantiate_wand=MagickTrue;
87 }
88 id++;
89 (void) AddValueToSplayTree(wand_ids,(const void *) id,(const void *) id);
cristya45da9d2009-10-25 21:29:37 +000090 (void) UnlockSemaphoreInfo(wand_semaphore);
cristy3ed852e2009-09-05 21:47:34 +000091 return(id);
92}
93
94/*
95%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
96% %
97% %
98% %
99% D e s t r o y W a n d I d s %
100% %
101% %
102% %
103%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104%
105% DestroyWandIds() deallocates memory associated with the wand id's.
106%
107% The format of the DestroyWandIds() method is:
108%
109% void DestroyWandIds(void)
110%
111% A description of each parameter follows:
112%
113*/
114WandExport void DestroyWandIds(void)
115{
cristya45da9d2009-10-25 21:29:37 +0000116 (void) LockSemaphoreInfo(wand_semaphore);
cristy3ed852e2009-09-05 21:47:34 +0000117 if (wand_ids != (SplayTreeInfo *) NULL)
118 wand_ids=DestroySplayTree(wand_ids);
119 instantiate_wand=MagickFalse;
cristya45da9d2009-10-25 21:29:37 +0000120 (void) UnlockSemaphoreInfo(wand_semaphore);
cristy3ed852e2009-09-05 21:47:34 +0000121 DestroySemaphoreInfo(&wand_semaphore);
122}
123
124/*
125%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
126% %
127% %
128% %
129% R e l i n q u i s h W a n d I d %
130% %
131% %
132% %
133%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
134%
135% RelinquishWandId() relinquishes a unique wand id.
136%
137% The format of the RelinquishWandId() method is:
138%
139% void RelinquishWandId(const unsigned long *id)
140%
141% A description of each parameter follows:
142%
143% o id: a unique wand id.
144%
145*/
146WandExport void RelinquishWandId(const unsigned long id)
147{
cristya45da9d2009-10-25 21:29:37 +0000148 (void) LockSemaphoreInfo(wand_semaphore);
cristy3ed852e2009-09-05 21:47:34 +0000149 if (wand_ids != (SplayTreeInfo *) NULL)
150 (void) DeleteNodeByValueFromSplayTree(wand_ids,(const void *) id);
cristya45da9d2009-10-25 21:29:37 +0000151 (void) UnlockSemaphoreInfo(wand_semaphore);
cristy3ed852e2009-09-05 21:47:34 +0000152}