• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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-2016 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 "MagickWand/studio.h"
43 #include "MagickWand/MagickWand.h"
44 #include "MagickWand/magick-wand-private.h"
45 #include "MagickWand/wand.h"
46 
47 static SplayTreeInfo
48   *wand_ids = (SplayTreeInfo *) NULL;
49 
50 static MagickBooleanType
51   instantiate_wand = MagickFalse;
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 */
AcquireWandId(void)74 WandExport size_t AcquireWandId(void)
75 {
76   static size_t
77     id = 0;
78 
79   if (wand_semaphore == (SemaphoreInfo *) NULL)
80     ActivateSemaphoreInfo(&wand_semaphore);
81   LockSemaphoreInfo(wand_semaphore);
82   if (wand_ids == (SplayTreeInfo *) NULL)
83     wand_ids=NewSplayTree((int (*)(const void *,const void *)) NULL,
84       (void *(*)(void *)) NULL,(void *(*)(void *)) NULL);
85   id++;
86   (void) AddValueToSplayTree(wand_ids,(const void *) id,(const void *) id);
87   instantiate_wand=MagickTrue;
88   UnlockSemaphoreInfo(wand_semaphore);
89   return(id);
90 }
91 
92 /*
93 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
94 %                                                                             %
95 %                                                                             %
96 %                                                                             %
97 %    D e s t r o y W a n d I d s                                              %
98 %                                                                             %
99 %                                                                             %
100 %                                                                             %
101 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
102 %
103 %  DestroyWandIds() deallocates memory associated with the wand id's.
104 %
105 %  The format of the DestroyWandIds() method is:
106 %
107 %      void DestroyWandIds(void)
108 %
109 %  A description of each parameter follows:
110 %
111 */
DestroyWandIds(void)112 WandExport void DestroyWandIds(void)
113 {
114   if (wand_semaphore == (SemaphoreInfo *) NULL)
115     ActivateSemaphoreInfo(&wand_semaphore);
116   LockSemaphoreInfo(wand_semaphore);
117   if (wand_ids != (SplayTreeInfo *) NULL)
118     wand_ids=DestroySplayTree(wand_ids);
119   instantiate_wand=MagickFalse;
120   UnlockSemaphoreInfo(wand_semaphore);
121   RelinquishSemaphoreInfo(&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 size_t *id)
140 %
141 %  A description of each parameter follows:
142 %
143 %    o id: a unique wand id.
144 %
145 */
RelinquishWandId(const size_t id)146 WandExport void RelinquishWandId(const size_t id)
147 {
148   LockSemaphoreInfo(wand_semaphore);
149   if (wand_ids != (SplayTreeInfo *) NULL)
150     (void) DeleteNodeByValueFromSplayTree(wand_ids,(const void *) id);
151   UnlockSemaphoreInfo(wand_semaphore);
152 }
153