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