MagickCore  6.7.5
cache-private.h
Go to the documentation of this file.
00001 /*
00002   Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization
00003   dedicated to making software imaging solutions freely available.
00004 
00005   You may not use this file except in compliance with the License.
00006   obtain a copy of the License at
00007 
00008     http://www.imagemagick.org/script/license.php
00009 
00010   Unless required by applicable law or agreed to in writing, software
00011   distributed under the License is distributed on an "AS IS" BASIS,
00012   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013   See the License for the specific language governing permissions and
00014   limitations under the License.
00015 
00016   MagickCore cache private methods.
00017 */
00018 #ifndef _MAGICKCORE_CACHE_PRIVATE_H
00019 #define _MAGICKCORE_CACHE_PRIVATE_H
00020 
00021 #if defined(__cplusplus) || defined(c_plusplus)
00022 extern "C" {
00023 #endif
00024 
00025 #include <time.h>
00026 #include "MagickCore/random_.h"
00027 #include "MagickCore/thread-private.h"
00028 #include "MagickCore/semaphore.h"
00029 
00030 typedef enum
00031 {
00032   UndefinedCache,
00033   MemoryCache,
00034   MapCache,
00035   DiskCache,
00036   PingCache
00037 } CacheType;
00038 
00039 typedef void
00040   *Cache;
00041 
00042 typedef MagickBooleanType
00043   (*GetOneAuthenticPixelFromHandler)(Image *,const ssize_t,const ssize_t,
00044     Quantum *,ExceptionInfo *),
00045   (*GetOneVirtualPixelFromHandler)(const Image *,const VirtualPixelMethod,
00046     const ssize_t,const ssize_t,Quantum *,ExceptionInfo *),
00047   (*SyncAuthenticPixelsHandler)(Image *,ExceptionInfo *);
00048 
00049 typedef const Quantum
00050   *(*GetVirtualPixelHandler)(const Image *,const VirtualPixelMethod,
00051     const ssize_t,const ssize_t,const size_t,const size_t,ExceptionInfo *),
00052   *(*GetVirtualPixelsHandler)(const Image *);
00053 
00054 typedef const void
00055   *(*GetVirtualMetacontentFromHandler)(const Image *);
00056 
00057 typedef Quantum
00058   *(*GetAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
00059     const size_t,const size_t,ExceptionInfo *);
00060 
00061 typedef Quantum
00062   *(*GetAuthenticPixelsFromHandler)(const Image *);
00063 
00064 typedef Quantum
00065   *(*QueueAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
00066     const size_t,const size_t,ExceptionInfo *);
00067 
00068 typedef void
00069   (*DestroyPixelHandler)(Image *);
00070 
00071 typedef void
00072   *(*GetAuthenticMetacontentFromHandler)(const Image *);
00073 
00074 typedef struct _CacheMethods
00075 {
00076   GetVirtualPixelHandler
00077     get_virtual_pixel_handler;
00078 
00079   GetVirtualPixelsHandler
00080     get_virtual_pixels_handler;
00081 
00082   GetVirtualMetacontentFromHandler
00083     get_virtual_metacontent_from_handler;
00084 
00085   GetOneVirtualPixelFromHandler
00086     get_one_virtual_pixel_from_handler;
00087 
00088   GetAuthenticPixelsHandler
00089     get_authentic_pixels_handler;
00090 
00091   GetAuthenticMetacontentFromHandler
00092     get_authentic_metacontent_from_handler;
00093 
00094   GetOneAuthenticPixelFromHandler
00095     get_one_authentic_pixel_from_handler;
00096 
00097   GetAuthenticPixelsFromHandler
00098     get_authentic_pixels_from_handler;
00099 
00100   QueueAuthenticPixelsHandler
00101     queue_authentic_pixels_handler;
00102 
00103   SyncAuthenticPixelsHandler
00104     sync_authentic_pixels_handler;
00105 
00106   DestroyPixelHandler
00107     destroy_pixel_handler;
00108 } CacheMethods;
00109 
00110 typedef struct _NexusInfo
00111    NexusInfo;
00112 
00113 typedef struct _CacheInfo
00114 {
00115   ClassType
00116     storage_class;
00117 
00118   ColorspaceType
00119     colorspace;
00120 
00121   MagickBooleanType
00122     matte,
00123     mask;
00124 
00125   size_t
00126     columns,
00127     rows;
00128 
00129   size_t
00130     metacontent_extent,
00131     number_channels;
00132 
00133   PixelChannelMap
00134     channel_map[MaxPixelChannels];
00135 
00136   CacheType
00137     type;
00138 
00139   MapMode
00140     mode;
00141 
00142   MagickBooleanType
00143     mapped;
00144 
00145   MagickOffsetType
00146     offset;
00147 
00148   MagickSizeType
00149     length;
00150 
00151   VirtualPixelMethod
00152     virtual_pixel_method;
00153 
00154   PixelInfo
00155     virtual_pixel_color;
00156 
00157   size_t
00158     number_threads;
00159 
00160   NexusInfo
00161     **nexus_info;
00162 
00163   Quantum
00164     *pixels;
00165 
00166   void
00167     *metacontent;
00168 
00169   int
00170     file;
00171 
00172   char
00173     filename[MaxTextExtent],
00174     cache_filename[MaxTextExtent];
00175 
00176   CacheMethods
00177     methods;
00178 
00179   RandomInfo
00180     *random_info;
00181 
00182   MagickBooleanType
00183     debug;
00184 
00185   MagickThreadType
00186     id;
00187 
00188   ssize_t
00189     reference_count;
00190 
00191   SemaphoreInfo
00192     *semaphore,
00193     *disk_semaphore;
00194 
00195   time_t
00196     timestamp;
00197 
00198   size_t
00199     signature;
00200 } CacheInfo;
00201 
00202 extern MagickPrivate Cache
00203   AcquirePixelCache(const size_t),
00204   ClonePixelCache(const Cache),
00205   DestroyPixelCache(Cache),
00206   ReferencePixelCache(Cache);
00207 
00208 extern MagickPrivate CacheType
00209   GetPixelCacheType(const Image *);
00210 
00211 extern MagickPrivate ClassType
00212   GetPixelCacheStorageClass(const Cache);
00213 
00214 extern MagickPrivate ColorspaceType
00215   GetPixelCacheColorspace(const Cache);
00216 
00217 extern MagickPrivate const Quantum
00218   *GetVirtualPixelsFromNexus(const Image *,const VirtualPixelMethod,
00219     const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
00220     ExceptionInfo *),
00221   *GetVirtualPixelsNexus(const Cache,NexusInfo *);
00222 
00223 extern MagickPrivate const void
00224   *AcquirePixelCachePixels(const Image *,MagickSizeType *,ExceptionInfo *),
00225   *GetVirtualMetacontentFromNexus(const Cache,NexusInfo *);
00226 
00227 extern MagickPrivate MagickBooleanType
00228   CacheComponentGenesis(void),
00229   SyncAuthenticPixelCacheNexus(Image *,NexusInfo *,ExceptionInfo *),
00230   SyncImagePixelCache(Image *,ExceptionInfo *);
00231 
00232 extern MagickPrivate MagickSizeType
00233   GetPixelCacheNexusExtent(const Cache,NexusInfo *);
00234 
00235 extern MagickPrivate NexusInfo
00236   **AcquirePixelCacheNexus(const size_t),
00237   **DestroyPixelCacheNexus(NexusInfo **,const size_t);
00238 
00239 extern MagickPrivate Quantum
00240   *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
00241     const size_t,const size_t,NexusInfo *,ExceptionInfo *),
00242   *GetPixelCacheNexusPixels(const Cache,NexusInfo *),
00243   *QueueAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
00244     const size_t,const size_t,const MagickBooleanType,NexusInfo *,
00245     ExceptionInfo *);
00246 
00247 extern MagickPrivate size_t
00248   GetPixelCacheChannels(const Cache);
00249 
00250 extern MagickPrivate VirtualPixelMethod
00251   GetPixelCacheVirtualMethod(const Image *),
00252   SetPixelCacheVirtualMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
00253 
00254 extern MagickPrivate void
00255   CacheComponentTerminus(void),
00256   ClonePixelCacheMethods(Cache,const Cache),
00257   *GetPixelCacheNexusMetacontent(const Cache,NexusInfo *),
00258   *GetPixelCachePixels(Image *,MagickSizeType *,ExceptionInfo *),
00259   GetPixelCacheTileSize(const Image *,size_t *,size_t *),
00260   GetPixelCacheMethods(CacheMethods *),
00261   SetPixelCacheMethods(Cache,CacheMethods *);
00262 
00263 #if defined(__cplusplus) || defined(c_plusplus)
00264 }
00265 #endif
00266 
00267 #endif