blob: 8645ba676e93291fc3069ba6f42c5d39b2bcf40d [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristy7e41fe82010-12-04 23:12:08 +00002 Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization
cristy3ed852e2009-09-05 21:47:34 +00003 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)
22extern "C" {
23#endif
24
25#include <time.h>
26#include "magick/random_.h"
27#include "magick/thread-private.h"
28#include "magick/semaphore.h"
29
30typedef enum
31{
32 UndefinedCache,
33 MemoryCache,
34 MapCache,
cristy73724512010-04-12 14:43:14 +000035 DiskCache,
36 PingCache
cristy3ed852e2009-09-05 21:47:34 +000037} CacheType;
38
39typedef void
40 *Cache;
41
42typedef const IndexPacket
43 *(*GetVirtualIndexesFromHandler)(const Image *);
44
45typedef IndexPacket
46 *(*GetAuthenticIndexesFromHandler)(const Image *);
47
48typedef MagickBooleanType
cristybb503372010-05-27 20:51:26 +000049 (*GetOneAuthenticPixelFromHandler)(Image *,const ssize_t,const ssize_t,
cristy3ed852e2009-09-05 21:47:34 +000050 PixelPacket *,ExceptionInfo *),
51 (*GetOneVirtualPixelFromHandler)(const Image *,const VirtualPixelMethod,
cristybb503372010-05-27 20:51:26 +000052 const ssize_t,const ssize_t,PixelPacket *,ExceptionInfo *),
cristy3ed852e2009-09-05 21:47:34 +000053 (*SyncAuthenticPixelsHandler)(Image *,ExceptionInfo *);
54
55typedef const PixelPacket
cristy5ed838e2010-05-31 00:05:35 +000056 *(*GetVirtualPixelHandler)(const Image *,const VirtualPixelMethod,
57 const ssize_t,const ssize_t,const size_t,const size_t,ExceptionInfo *),
cristy3ed852e2009-09-05 21:47:34 +000058 *(*GetVirtualPixelsHandler)(const Image *);
59
60typedef PixelPacket
cristybb503372010-05-27 20:51:26 +000061 *(*GetAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
62 const size_t,const size_t,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +000063
64typedef PixelPacket
65 *(*GetAuthenticPixelsFromHandler)(const Image *);
66
67typedef PixelPacket
cristybb503372010-05-27 20:51:26 +000068 *(*QueueAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
69 const size_t,const size_t,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +000070
71typedef void
72 (*DestroyPixelHandler)(Image *);
73
74typedef struct _CacheMethods
75{
76 GetVirtualPixelHandler
77 get_virtual_pixel_handler;
78
79 GetVirtualPixelsHandler
80 get_virtual_pixels_handler;
81
82 GetVirtualIndexesFromHandler
83 get_virtual_indexes_from_handler;
84
85 GetOneVirtualPixelFromHandler
86 get_one_virtual_pixel_from_handler;
87
88 GetAuthenticPixelsHandler
89 get_authentic_pixels_handler;
90
91 GetAuthenticIndexesFromHandler
92 get_authentic_indexes_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;
cristy3ed852e2009-09-05 21:47:34 +0000108} CacheMethods;
109
110typedef struct _NexusInfo
111 NexusInfo;
112
113typedef struct _CacheInfo
114{
115 ClassType
116 storage_class;
117
118 ColorspaceType
119 colorspace;
120
cristybcc1fdc2011-04-29 13:06:35 +0000121 size_t
cristy0d267172011-04-25 20:13:48 +0000122 channels;
123
cristy3ed852e2009-09-05 21:47:34 +0000124 CacheType
125 type;
126
cristy87528ea2009-09-10 14:53:56 +0000127 MapMode
128 mode;
129
cristy3ed852e2009-09-05 21:47:34 +0000130 MagickBooleanType
131 mapped;
132
cristybb503372010-05-27 20:51:26 +0000133 size_t
cristy3ed852e2009-09-05 21:47:34 +0000134 columns,
135 rows;
136
137 MagickOffsetType
138 offset;
139
140 MagickSizeType
141 length;
142
143 VirtualPixelMethod
144 virtual_pixel_method;
145
cristyc3ec0d42010-04-07 01:18:08 +0000146 MagickPixelPacket
147 virtual_pixel_color;
148
cristybb503372010-05-27 20:51:26 +0000149 size_t
cristy3ed852e2009-09-05 21:47:34 +0000150 number_threads;
151
152 NexusInfo
153 **nexus_info;
154
155 PixelPacket
156 *pixels;
157
158 IndexPacket
159 *indexes;
160
161 MagickBooleanType
162 active_index_channel;
163
164 int
165 file;
166
167 char
168 filename[MaxTextExtent],
169 cache_filename[MaxTextExtent];
170
171 CacheMethods
172 methods;
173
174 RandomInfo
175 *random_info;
176
177 MagickBooleanType
178 debug;
179
180 MagickThreadType
181 id;
182
cristybb503372010-05-27 20:51:26 +0000183 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000184 reference_count;
185
186 SemaphoreInfo
187 *semaphore,
188 *disk_semaphore;
189
190 time_t
191 timestamp;
192
cristybb503372010-05-27 20:51:26 +0000193 size_t
cristy3ed852e2009-09-05 21:47:34 +0000194 signature;
195} CacheInfo;
196
197extern MagickExport Cache
cristybb503372010-05-27 20:51:26 +0000198 AcquirePixelCache(const size_t),
cristy3ed852e2009-09-05 21:47:34 +0000199 ClonePixelCache(const Cache),
200 DestroyPixelCache(Cache),
cristy3ed852e2009-09-05 21:47:34 +0000201 ReferencePixelCache(Cache);
202
cristyb32b90a2009-09-07 21:45:48 +0000203extern MagickExport CacheType
204 GetPixelCacheType(const Image *);
205
cristy3ed852e2009-09-05 21:47:34 +0000206extern MagickExport ClassType
207 GetPixelCacheStorageClass(const Cache);
208
209extern MagickExport ColorspaceType
210 GetPixelCacheColorspace(const Cache);
211
212extern MagickExport const IndexPacket
213 *GetVirtualIndexesFromNexus(const Cache,NexusInfo *);
214
215extern MagickExport const PixelPacket
cristy5ed838e2010-05-31 00:05:35 +0000216 *GetVirtualPixelsFromNexus(const Image *,const VirtualPixelMethod,
217 const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
cristy3ed852e2009-09-05 21:47:34 +0000218 ExceptionInfo *),
219 *GetVirtualPixelsNexus(const Cache,NexusInfo *);
220
221extern MagickExport IndexPacket
222 *GetPixelCacheNexusIndexes(const Cache,NexusInfo *);
223
224extern MagickExport MagickBooleanType
225 SyncAuthenticPixelCacheNexus(Image *,NexusInfo *,ExceptionInfo *);
226
227extern MagickExport MagickSizeType
228 GetPixelCacheNexusExtent(const Cache,NexusInfo *);
229
230extern MagickExport NexusInfo
cristybb503372010-05-27 20:51:26 +0000231 **AcquirePixelCacheNexus(const size_t),
232 **DestroyPixelCacheNexus(NexusInfo **,const size_t);
cristy3ed852e2009-09-05 21:47:34 +0000233
234extern MagickExport PixelPacket
cristybb503372010-05-27 20:51:26 +0000235 *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
236 const size_t,const size_t,NexusInfo *,ExceptionInfo *),
cristy3ed852e2009-09-05 21:47:34 +0000237 *GetPixelCacheNexusPixels(const Cache,NexusInfo *),
cristybb503372010-05-27 20:51:26 +0000238 *QueueAuthenticNexus(Image *,const ssize_t,const ssize_t,const size_t,
239 const size_t,NexusInfo *,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +0000240
cristy0d267172011-04-25 20:13:48 +0000241extern MagickExport size_t
242 GetPixelCacheChannels(const Cache);
243
cristy3ed852e2009-09-05 21:47:34 +0000244extern MagickExport void
245 ClonePixelCacheMethods(Cache,const Cache),
cristybb503372010-05-27 20:51:26 +0000246 GetPixelCacheTileSize(const Image *,size_t *,size_t *),
cristy3ed852e2009-09-05 21:47:34 +0000247 GetPixelCacheMethods(CacheMethods *),
cristy3ed852e2009-09-05 21:47:34 +0000248 SetPixelCacheMethods(Cache,CacheMethods *);
249
250#if defined(__cplusplus) || defined(c_plusplus)
251}
252#endif
253
254#endif