2 Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
8 http://www.imagemagick.org/script/license.php
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.
18 #ifndef _MAGICKCORE_MAGICK_TYPE_H
19 #define _MAGICKCORE_MAGICK_TYPE_H
21 #include "MagickCore/magick-config.h"
23 #if defined(__cplusplus) || defined(c_plusplus)
27 #if !defined(MAGICKCORE_QUANTUM_DEPTH)
28 #define MAGICKCORE_QUANTUM_DEPTH 16
31 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__) && !defined(__MINGW64__)
32 # define MagickLLConstant(c) (MagickOffsetType) (c ## i64)
33 # define MagickULLConstant(c) (MagickSizeType) (c ## ui64)
35 # define MagickLLConstant(c) (MagickOffsetType) (c ## LL)
36 # define MagickULLConstant(c) (MagickSizeType) (c ## ULL)
39 #if !defined(MAGICKCORE_HAVE_DOUBLE_T)
40 typedef double double_t;
42 #if !defined(MAGICKCORE_HAVE_FLOAT_T)
43 typedef float float_t;
46 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
47 #define MaxColormapSize 256UL
49 typedef float_t MagickRealType;
51 #if defined(MAGICKCORE_HDRI_SUPPORT)
52 typedef float Quantum;
53 #define QuantumRange 255.0
54 #define QuantumFormat "%g"
56 typedef unsigned char Quantum;
57 #define QuantumRange ((Quantum) 255)
58 #define QuantumFormat "%u"
60 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
61 #define MaxColormapSize 65536UL
62 #define MaxMap 65535UL
63 typedef float_t MagickRealType;
65 #if defined(MAGICKCORE_HDRI_SUPPORT)
66 typedef float Quantum;
67 #define QuantumRange 65535.0
68 #define QuantumFormat "%g"
70 typedef unsigned short Quantum;
71 #define QuantumRange ((Quantum) 65535)
72 #define QuantumFormat "%u"
74 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
75 #define MaxColormapSize 65536UL
76 #define MaxMap 65535UL
77 typedef float_t MagickRealType;
79 #if defined(MAGICKCORE_HDRI_SUPPORT)
80 typedef float Quantum;
81 #define QuantumRange 4294967295.0
82 #define QuantumFormat "%g"
84 typedef unsigned int Quantum;
85 #define QuantumRange ((Quantum) 4294967295)
86 #define QuantumFormat "%u"
88 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
89 #define MAGICKCORE_HDRI_SUPPORT
90 #define MaxColormapSize 65536UL
91 #define MaxMap 65535UL
93 typedef long double MagickRealType;
94 typedef double_t Quantum;
95 #define QuantumRange 18446744073709551615.0
96 #define QuantumFormat "%g"
98 #error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64"
100 #define MagickEpsilon (1.0e-15)
101 #define MagickMaximumValue 1.79769313486231570E+308
102 #define MagickMinimumValue 2.22507385850720140E-308
103 #define QuantumScale ((double) 1.0/(double) QuantumRange)
106 Typedef declarations.
108 typedef unsigned int MagickStatusType;
109 #if !defined(MAGICKCORE_WINDOWS_SUPPORT)
110 #if (MAGICKCORE_SIZEOF_UNSIGNED_LONG_LONG == 8)
111 typedef long long MagickOffsetType;
112 typedef unsigned long long MagickSizeType;
113 #define MagickOffsetFormat "lld"
114 #define MagickSizeFormat "llu"
116 typedef ssize_t MagickOffsetType;
117 typedef size_t MagickSizeType;
118 #define MagickOffsetFormat "ld"
119 #define MagickSizeFormat "lu"
122 typedef __int64 MagickOffsetType;
123 typedef unsigned __int64 MagickSizeType;
124 #define MagickOffsetFormat "I64i"
125 #define MagickSizeFormat "I64u"
128 #if defined(_MSC_VER) && (_MSC_VER == 1200)
129 typedef MagickOffsetType QuantumAny;
131 typedef MagickSizeType QuantumAny;
134 #if defined(macintosh)
135 #define ExceptionInfo MagickExceptionInfo
152 Define some short-hand macros for handling MagickBooleanType
153 and uses fast C typing with C boolean operations
155 Is -- returns a MagickBooleanType (for storage)
156 If -- returns C integer boolean (for if's and while's)
158 IfMagickTrue() converts MagickBooleanType to C integer Boolean
159 IfMagickFalse() Not the MagickBooleanType to C integer Boolean
161 IsMagickTrue() converts a C integer boolean to a MagickBooleanType
162 IsMagickFalse() converts and is also a MagickBooleanType 'not' operation
165 IsMagickNotNULL() converts C pointers tests MagickBooleanType
168 /* Fast C typing method assumes MagickBooleanType match 0,1 values */
169 # define IfMagickTrue(v) ((int)(v))
170 # define IfMagickFalse(v) (!(int)(v))
171 # define IsMagickTrue(v) ((MagickBooleanType)((int)(v)!=0))
172 # define IsMagickFalse(v) ((MagickBooleanType)(!(int)(v)))
173 # define IsMagickNot(v) ((MagickBooleanType)(!(int)(v)))
175 /* Do not depend MagickBooleanType's values */
176 # define IfMagickTrue(v) ((v) != MagickFalse)
177 # define IfMagickFalse(v) ((v) == MagickFalse)
178 # define IsMagickTrue(v) ((v)?MagickTrue:MagickFalse)
179 # define IsMagickFalse(v) ((v)?MagickFalse:MagickTrue)
180 # define IsMagickNot(v) (IfMagickTrue(v)?MagickFalse:MagickTrue)
182 #define IfStringTrue(v) IfMagickTrue(IsStringTrue(v))
183 #define IfStringNotFalse(v) IfMagickTrue(IsStringNotFalse(v))
184 #define IsMagickNULL(v) (((void *)(v) == NULL)?MagickTrue:MagickFalse)
185 #define IsMagickNotNULL(v) (((void *)(v) != NULL)?MagickTrue:MagickFalse)
188 The IsNaN and IfNan tests for special floating point numbers of
189 value NaN (not a number). NaN's are defined as part of the IEEE standard
190 for floating point number representation, and need to be watched out for.
191 Morphology Kernels often use these special numbers as neighbourhood masks.
193 The special property that two NaN's are never equal, even if they are from
194 the same variable allows you to test if a value is special NaN value.
196 The macros are thus is only true if the value given is NaN.
198 # define IfNaN(a) ((a) != (a))
199 # define IsNaN(a) ((a) != (a)?MagickTrue:MagickFalse)
202 typedef struct _BlobInfo BlobInfo;
204 typedef struct _ExceptionInfo ExceptionInfo;
206 typedef struct _Image Image;
208 typedef struct _ImageInfo ImageInfo;
210 #if defined(__cplusplus) || defined(c_plusplus)