18 #ifndef MAGICKCORE_MAGICK_TYPE_H
19 #define MAGICKCORE_MAGICK_TYPE_H
21 #include "magick/magick-config.h"
23 #if defined(__cplusplus) || defined(c_plusplus)
27 #if !defined(MAGICKCORE_QUANTUM_DEPTH)
28 #define MAGICKCORE_QUANTUM_DEPTH 16
30 #if !defined(MagickPathExtent)
31 #define MagickPathExtent MaxTextExtent
34 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__)
35 # define MagickLLConstant(c) ((MagickOffsetType) (c ## i64))
36 # define MagickULLConstant(c) ((MagickSizeType) (c ## ui64))
38 # define MagickLLConstant(c) ((MagickOffsetType) (c ## LL))
39 # define MagickULLConstant(c) ((MagickSizeType) (c ## ULL))
42 #if MAGICKCORE_SIZEOF_FLOAT_T == 0
43 typedef float MagickFloatType;
44 #elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_FLOAT)
45 typedef float MagickFloatType;
46 #elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_DOUBLE)
47 typedef double MagickFloatType;
48 #elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_LONG_DOUBLE)
49 typedef double MagickFloatType;
51 #error Your MagickFloatType type is neither a float, nor a double, nor a long double
53 #if MAGICKCORE_SIZEOF_DOUBLE_T == 0
54 typedef double MagickDoubleType;
55 #elif (MAGICKCORE_SIZEOF_DOUBLE_T == MAGICKCORE_SIZEOF_DOUBLE)
56 typedef double MagickDoubleType;
57 #elif (MAGICKCORE_SIZEOF_DOUBLE_T == MAGICKCORE_SIZEOF_LONG_DOUBLE)
58 typedef long double MagickDoubleType;
60 #error Your MagickDoubleType type is neither a float, nor a double, nor a long double
63 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
64 #define MaxColormapSize 256UL
66 typedef ssize_t SignedQuantum;
67 #if defined(MAGICKCORE_HDRI_SUPPORT)
68 typedef MagickFloatType Quantum;
69 #define QuantumRange 255.0
70 #define QuantumFormat "%g"
72 typedef unsigned char Quantum;
73 #define QuantumRange ((Quantum) 255)
74 #define QuantumFormat "%u"
76 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
77 #define MaxColormapSize 65536UL
78 #define MaxMap 65535UL
79 typedef ssize_t SignedQuantum;
80 #if defined(MAGICKCORE_HDRI_SUPPORT)
81 typedef MagickFloatType Quantum;
82 #define QuantumRange 65535.0
83 #define QuantumFormat "%g"
85 typedef unsigned short Quantum;
86 #define QuantumRange ((Quantum) 65535)
87 #define QuantumFormat "%u"
89 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
90 #define MaxColormapSize 65536UL
91 #define MaxMap 65535UL
92 typedef MagickDoubleType SignedQuantum;
93 #if defined(MAGICKCORE_HDRI_SUPPORT)
94 typedef MagickDoubleType Quantum;
95 #define QuantumRange 4294967295.0
96 #define QuantumFormat "%g"
98 typedef unsigned int Quantum;
99 #define QuantumRange ((Quantum) 4294967295)
100 #define QuantumFormat "%u"
102 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
103 #define MAGICKCORE_HDRI_SUPPORT 1
104 #define MaxColormapSize 65536UL
105 #define MaxMap 65535UL
106 typedef MagickDoubleType SignedQuantum;
107 typedef MagickDoubleType Quantum;
108 #define QuantumRange 18446744073709551615.0
109 #define QuantumFormat "%g"
112 # error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64"
115 #define MagickEpsilon (1.0e-12)
116 #define MagickMaximumValue 1.79769313486231570E+308
117 #define MagickMinimumValue 2.22507385850720140E-308
118 #define MagickStringify(macro_or_string) MagickStringifyArg(macro_or_string)
119 #define MagickStringifyArg(contents) #contents
120 #define QuantumScale ((double) 1.0/(double) QuantumRange)
125 typedef MagickDoubleType MagickRealType;
127 typedef unsigned int MagickStatusType;
128 #if !defined(MAGICKCORE_WINDOWS_SUPPORT)
129 #if (MAGICKCORE_SIZEOF_UNSIGNED_LONG_LONG == 8)
130 typedef long long MagickOffsetType;
131 typedef unsigned long long MagickSizeType;
132 #define MagickOffsetFormat "lld"
133 #define MagickSizeFormat "llu"
135 typedef ssize_t MagickOffsetType;
136 typedef size_t MagickSizeType;
137 #define MagickOffsetFormat "ld"
138 #define MagickSizeFormat "lu"
141 typedef __int64 MagickOffsetType;
142 typedef unsigned __int64 MagickSizeType;
143 #define MagickOffsetFormat "I64i"
144 #define MagickSizeFormat "I64u"
147 #if MAGICKCORE_HAVE_UINTPTR_T || defined(uintptr_t)
148 typedef uintptr_t MagickAddressType;
151 typedef size_t MagickAddressType;
154 #if defined(_MSC_VER) && (_MSC_VER == 1200)
155 typedef MagickOffsetType QuantumAny;
157 typedef MagickSizeType QuantumAny;
160 #if defined(macintosh)
161 #define ExceptionInfo MagickExceptionInfo
168 GrayChannel = 0x0001,
169 CyanChannel = 0x0001,
170 GreenChannel = 0x0002,
171 MagentaChannel = 0x0002,
172 BlueChannel = 0x0004,
173 YellowChannel = 0x0004,
174 AlphaChannel = 0x0008,
175 OpacityChannel = 0x0008,
176 MatteChannel = 0x0008,
177 BlackChannel = 0x0020,
178 IndexChannel = 0x0020,
179 CompositeChannels = 0x002F,
180 AllChannels = 0x7ffffff,
184 TrueAlphaChannel = 0x0040,
185 RGBChannels = 0x0080,
186 GrayChannels = 0x0080,
187 SyncChannels = 0x0100,
188 DefaultChannels = ((AllChannels | SyncChannels) &~ OpacityChannel)
215 #if defined(MAGICKCORE_HAVE_ISNAN) && !defined(__cplusplus) && !defined(c_plusplus)
216 # define IsNaN(a) isnan(a)
217 #elif defined(_MSC_VER) && (_MSC_VER >= 1310)
219 # define IsNaN(a) _isnan(a)
221 # define IsNaN(a) ((a) != (a))
223 #if !defined(INFINITY)
224 # define INFINITY ((double) -logf(0f))
235 #if defined(__cplusplus) || defined(c_plusplus)