]> granicus.if.org Git - imagemagick/blob - MagickCore/cache-private.h
(no commit message)
[imagemagick] / MagickCore / cache-private.h
1 /*
2   Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization
3   dedicated to making software imaging solutions freely available.
4
5   You may not use this file except in compliance with the License.
6   obtain a copy of the License at
7
8     http://www.imagemagick.org/script/license.php
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15
16   MagickCore cache private methods.
17 */
18 #ifndef _MAGICKCORE_CACHE_PRIVATE_H
19 #define _MAGICKCORE_CACHE_PRIVATE_H
20
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24
25 #include <time.h>
26 #include "MagickCore/random_.h"
27 #include "MagickCore/thread-private.h"
28 #include "MagickCore/semaphore.h"
29
30 typedef enum
31 {
32   UndefinedCache,
33   MemoryCache,
34   MapCache,
35   DiskCache,
36   PingCache
37 } CacheType;
38
39 typedef void
40   *Cache;
41
42 typedef MagickBooleanType
43   (*GetOneAuthenticPixelFromHandler)(Image *,const ssize_t,const ssize_t,
44     Quantum *,ExceptionInfo *),
45   (*GetOneVirtualPixelFromHandler)(const Image *,const VirtualPixelMethod,
46     const ssize_t,const ssize_t,Quantum *,ExceptionInfo *),
47   (*SyncAuthenticPixelsHandler)(Image *,ExceptionInfo *);
48
49 typedef const Quantum
50   *(*GetVirtualPixelHandler)(const Image *,const VirtualPixelMethod,
51     const ssize_t,const ssize_t,const size_t,const size_t,ExceptionInfo *),
52   *(*GetVirtualPixelsHandler)(const Image *);
53
54 typedef const void
55   *(*GetVirtualMetacontentFromHandler)(const Image *);
56
57 typedef Quantum
58   *(*GetAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
59     const size_t,const size_t,ExceptionInfo *);
60
61 typedef Quantum
62   *(*GetAuthenticPixelsFromHandler)(const Image *);
63
64 typedef Quantum
65   *(*QueueAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
66     const size_t,const size_t,ExceptionInfo *);
67
68 typedef void
69   (*DestroyPixelHandler)(Image *);
70
71 typedef void
72   *(*GetAuthenticMetacontentFromHandler)(const Image *);
73
74 typedef struct _CacheMethods
75 {
76   GetVirtualPixelHandler
77     get_virtual_pixel_handler;
78
79   GetVirtualPixelsHandler
80     get_virtual_pixels_handler;
81
82   GetVirtualMetacontentFromHandler
83     get_virtual_metacontent_from_handler;
84
85   GetOneVirtualPixelFromHandler
86     get_one_virtual_pixel_from_handler;
87
88   GetAuthenticPixelsHandler
89     get_authentic_pixels_handler;
90
91   GetAuthenticMetacontentFromHandler
92     get_authentic_metacontent_from_handler;
93
94   GetOneAuthenticPixelFromHandler
95     get_one_authentic_pixel_from_handler;
96
97   GetAuthenticPixelsFromHandler
98     get_authentic_pixels_from_handler;
99
100   QueueAuthenticPixelsHandler
101     queue_authentic_pixels_handler;
102
103   SyncAuthenticPixelsHandler
104     sync_authentic_pixels_handler;
105
106   DestroyPixelHandler
107     destroy_pixel_handler;
108 } CacheMethods;
109
110 typedef struct _NexusInfo
111    NexusInfo;
112
113 typedef struct _CacheInfo
114 {
115   ClassType
116     storage_class;
117
118   ColorspaceType
119     colorspace;
120
121   MagickBooleanType
122     matte,
123     mask;
124
125   size_t
126     columns,
127     rows;
128
129   size_t
130     metacontent_extent,
131     number_channels;
132
133   PixelChannelMap
134     channel_map[MaxPixelChannels];
135
136   CacheType
137     type;
138
139   MapMode
140     mode;
141
142   MagickBooleanType
143     mapped;
144
145   MagickOffsetType
146     offset;
147
148   MagickSizeType
149     length;
150
151   VirtualPixelMethod
152     virtual_pixel_method;
153
154   PixelInfo
155     virtual_pixel_color;
156
157   size_t
158     number_threads;
159
160   NexusInfo
161     **nexus_info;
162
163   Quantum
164     *pixels;
165
166   void
167     *metacontent;
168
169   int
170     file;
171
172   char
173     filename[MaxTextExtent],
174     cache_filename[MaxTextExtent];
175
176   CacheMethods
177     methods;
178
179   RandomInfo
180     *random_info;
181
182   MagickBooleanType
183     debug;
184
185   MagickThreadType
186     id;
187
188   ssize_t
189     reference_count;
190
191   SemaphoreInfo
192     *semaphore,
193     *disk_semaphore;
194
195   time_t
196     timestamp;
197
198   size_t
199     signature;
200 } CacheInfo;
201
202 extern MagickPrivate Cache
203   AcquirePixelCache(const size_t),
204   ClonePixelCache(const Cache),
205   DestroyPixelCache(Cache),
206   ReferencePixelCache(Cache);
207
208 extern MagickPrivate CacheType
209   GetPixelCacheType(const Image *);
210
211 extern MagickPrivate ClassType
212   GetPixelCacheStorageClass(const Cache);
213
214 extern MagickPrivate ColorspaceType
215   GetPixelCacheColorspace(const Cache);
216
217 extern MagickPrivate const Quantum
218   *GetVirtualPixelsFromNexus(const Image *,const VirtualPixelMethod,
219     const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
220     ExceptionInfo *) magick_hot_spot,
221   *GetVirtualPixelsNexus(const Cache,NexusInfo *);
222
223 extern MagickPrivate const void
224   *AcquirePixelCachePixels(const Image *,MagickSizeType *,ExceptionInfo *),
225   *GetVirtualMetacontentFromNexus(const Cache,NexusInfo *);
226
227 extern MagickPrivate MagickBooleanType
228   CacheComponentGenesis(void),
229   SyncAuthenticPixelCacheNexus(Image *,NexusInfo *,ExceptionInfo *)
230     magick_hot_spot,
231   SyncImagePixelCache(Image *,ExceptionInfo *);
232
233 extern MagickPrivate MagickSizeType
234   GetPixelCacheNexusExtent(const Cache,NexusInfo *);
235
236 extern MagickPrivate NexusInfo
237   **AcquirePixelCacheNexus(const size_t),
238   **DestroyPixelCacheNexus(NexusInfo **,const size_t);
239
240 extern MagickPrivate Quantum
241   *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
242     const size_t,const size_t,NexusInfo *,ExceptionInfo *) magick_hot_spot,
243   *GetPixelCacheNexusPixels(const Cache,NexusInfo *),
244   *QueueAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
245     const size_t,const size_t,const MagickBooleanType,NexusInfo *,
246     ExceptionInfo *) magick_hot_spot;
247
248 extern MagickPrivate size_t
249   GetPixelCacheChannels(const Cache);
250
251 extern MagickPrivate VirtualPixelMethod
252   GetPixelCacheVirtualMethod(const Image *),
253   SetPixelCacheVirtualMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
254
255 extern MagickPrivate void
256   CacheComponentTerminus(void),
257   ClonePixelCacheMethods(Cache,const Cache),
258   *GetPixelCacheNexusMetacontent(const Cache,NexusInfo *) magick_hot_spot,
259   *GetPixelCachePixels(Image *,MagickSizeType *,ExceptionInfo *),
260   GetPixelCacheTileSize(const Image *,size_t *,size_t *),
261   GetPixelCacheMethods(CacheMethods *),
262   SetPixelCacheMethods(Cache,CacheMethods *);
263
264 #if defined(__cplusplus) || defined(c_plusplus)
265 }
266 #endif
267
268 #endif