]> granicus.if.org Git - imagemagick/blob - MagickCore/cache-private.h
(no commit message)
[imagemagick] / MagickCore / cache-private.h
1 /*
2   Copyright 1999-2011 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
124   size_t
125     columns,
126     rows;
127
128   size_t
129     metacontent_extent,
130     number_channels;
131
132   CacheType
133     type;
134
135   MapMode
136     mode;
137
138   MagickBooleanType
139     mapped;
140
141   MagickOffsetType
142     offset;
143
144   MagickSizeType
145     length;
146
147   VirtualPixelMethod
148     virtual_pixel_method;
149
150   PixelInfo
151     virtual_pixel_color;
152
153   size_t
154     number_threads;
155
156   NexusInfo
157     **nexus_info;
158
159   Quantum
160     *pixels;
161
162   void
163     *metacontent;
164
165   int
166     file;
167
168   char
169     filename[MaxTextExtent],
170     cache_filename[MaxTextExtent];
171
172   CacheMethods
173     methods;
174
175   RandomInfo
176     *random_info;
177
178   MagickBooleanType
179     debug;
180
181   MagickThreadType
182     id;
183
184   ssize_t
185     reference_count;
186
187   SemaphoreInfo
188     *semaphore,
189     *disk_semaphore;
190
191   time_t
192     timestamp;
193
194   size_t
195     signature;
196 } CacheInfo;
197
198 extern MagickPrivate Cache
199   AcquirePixelCache(const size_t),
200   ClonePixelCache(const Cache),
201   DestroyPixelCache(Cache),
202   ReferencePixelCache(Cache);
203
204 extern MagickPrivate CacheType
205   GetPixelCacheType(const Image *);
206
207 extern MagickPrivate ClassType
208   GetPixelCacheStorageClass(const Cache);
209
210 extern MagickPrivate ColorspaceType
211   GetPixelCacheColorspace(const Cache);
212
213 extern MagickPrivate const Quantum
214   *GetVirtualPixelsFromNexus(const Image *,const VirtualPixelMethod,
215     const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
216     ExceptionInfo *),
217   *GetVirtualPixelsNexus(const Cache,NexusInfo *);
218
219 extern MagickPrivate const void
220   *AcquirePixelCachePixels(const Image *,MagickSizeType *,ExceptionInfo *),
221   *GetVirtualMetacontentFromNexus(const Cache,NexusInfo *);
222
223 extern MagickPrivate MagickBooleanType
224   CacheComponentGenesis(void),
225   SyncAuthenticPixelCacheNexus(Image *,NexusInfo *,ExceptionInfo *),
226   SyncImagePixelCache(Image *,ExceptionInfo *);
227
228 extern MagickPrivate MagickSizeType
229   GetPixelCacheNexusExtent(const Cache,NexusInfo *);
230
231 extern MagickPrivate NexusInfo
232   **AcquirePixelCacheNexus(const size_t),
233   **DestroyPixelCacheNexus(NexusInfo **,const size_t);
234
235 extern MagickPrivate Quantum
236   *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
237     const size_t,const size_t,NexusInfo *,ExceptionInfo *),
238   *GetPixelCacheNexusPixels(const Cache,NexusInfo *),
239   *QueueAuthenticNexus(Image *,const ssize_t,const ssize_t,const size_t,
240     const size_t,NexusInfo *,ExceptionInfo *);
241
242 extern MagickPrivate size_t
243   GetPixelCacheChannels(const Cache);
244
245 extern MagickPrivate VirtualPixelMethod
246   GetPixelCacheVirtualMethod(const Image *),
247   SetPixelCacheVirtualMethod(const Image *,const VirtualPixelMethod);
248
249 extern MagickPrivate void
250   CacheComponentTerminus(void),
251   ClonePixelCacheMethods(Cache,const Cache),
252   *GetPixelCacheNexusMetacontent(const Cache,NexusInfo *),
253   *GetPixelCachePixels(Image *,MagickSizeType *,ExceptionInfo *),
254   GetPixelCacheTileSize(const Image *,size_t *,size_t *),
255   GetPixelCacheMethods(CacheMethods *),
256   SetPixelCacheMethods(Cache,CacheMethods *);
257
258 #if defined(__cplusplus) || defined(c_plusplus)
259 }
260 #endif
261
262 #endif