18#ifndef MAGICKCORE_MAGICK_TYPE_H
19#define MAGICKCORE_MAGICK_TYPE_H
21#include "magick/magick-config.h"
23#if defined(MAGICKCORE_HAVE_UINTPTR_T)
27#if defined(__cplusplus) || defined(c_plusplus)
31#if !defined(MAGICKCORE_QUANTUM_DEPTH)
32#define MAGICKCORE_QUANTUM_DEPTH 16
34#if !defined(MagickPathExtent)
35#define MagickPathExtent MaxTextExtent
38#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__)
39# define MagickLLConstant(c) ((MagickOffsetType) (c ## i64))
40# define MagickULLConstant(c) ((MagickSizeType) (c ## ui64))
42# define MagickLLConstant(c) ((MagickOffsetType) (c ## LL))
43# define MagickULLConstant(c) ((MagickSizeType) (c ## ULL))
46#if MAGICKCORE_SIZEOF_FLOAT_T == 0
47typedef float MagickFloatType;
48#elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_FLOAT)
49typedef float MagickFloatType;
50#elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_DOUBLE)
51typedef double MagickFloatType;
52#elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_LONG_DOUBLE)
53typedef double MagickFloatType;
55#error Your MagickFloatType type is neither a float, nor a double, nor a long double
57#if MAGICKCORE_SIZEOF_DOUBLE_T == 0
58typedef double MagickDoubleType;
59#elif (MAGICKCORE_SIZEOF_DOUBLE_T == MAGICKCORE_SIZEOF_DOUBLE)
60typedef double MagickDoubleType;
61#elif (MAGICKCORE_SIZEOF_DOUBLE_T == MAGICKCORE_SIZEOF_LONG_DOUBLE)
62typedef long double MagickDoubleType;
64#error Your MagickDoubleType type is neither a float, nor a double, nor a long double
67#if (MAGICKCORE_QUANTUM_DEPTH == 8)
68#define MaxColormapSize 256UL
70typedef ssize_t SignedQuantum;
71#if defined(MAGICKCORE_HDRI_SUPPORT)
72typedef MagickFloatType Quantum;
73#define QuantumRange ((Quantum) 255.0)
74#define QuantumFormat "%g"
76typedef unsigned char Quantum;
77#define QuantumRange ((Quantum) 255)
78#define QuantumFormat "%u"
80#elif (MAGICKCORE_QUANTUM_DEPTH == 16)
81#define MaxColormapSize 65536UL
83typedef ssize_t SignedQuantum;
84#if defined(MAGICKCORE_HDRI_SUPPORT)
85typedef MagickFloatType Quantum;
86#define QuantumRange ((Quantum) 65535.0)
87#define QuantumFormat "%g"
89typedef unsigned short Quantum;
90#define QuantumRange ((Quantum) 65535)
91#define QuantumFormat "%u"
93#elif (MAGICKCORE_QUANTUM_DEPTH == 32)
94#define MaxColormapSize 65536UL
96typedef MagickDoubleType SignedQuantum;
97#if defined(MAGICKCORE_HDRI_SUPPORT)
98typedef MagickDoubleType Quantum;
99#define QuantumRange ((Quantum) 4294967295.0)
100#define QuantumFormat "%g"
102typedef unsigned int Quantum;
103#define QuantumRange ((Quantum) 4294967295)
104#define QuantumFormat "%u"
106#elif (MAGICKCORE_QUANTUM_DEPTH == 64)
107#define MAGICKCORE_HDRI_SUPPORT 1
108#define MaxColormapSize 65536UL
109#define MaxMap 65535UL
110typedef MagickDoubleType SignedQuantum;
111typedef MagickDoubleType Quantum;
112#define QuantumRange ((Quantum) 18446744073709551615.0)
113#define QuantumFormat "%g"
116# error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64"
119#define MagickEpsilon (1.0e-12)
120#define MagickMaximumValue DBL_MAX
121#define MagickMinimumValue DBL_MIN
122#define MagickStringify(macro_or_string) MagickStringifyArg(macro_or_string)
123#define MagickStringifyArg(contents) #contents
124#define QuantumScale ((double) 1.0/(double) QuantumRange)
129typedef MagickDoubleType MagickRealType;
131typedef unsigned int MagickStatusType;
132#if !defined(MAGICKCORE_WINDOWS_SUPPORT)
133#if (MAGICKCORE_SIZEOF_UNSIGNED_LONG_LONG == 8)
134typedef long long MagickOffsetType;
135typedef unsigned long long MagickSizeType;
136#define MagickOffsetFormat "lld"
137#define MagickSizeFormat "llu"
138#define MagickOffsetMax LLONG_MAX
140typedef ssize_t MagickOffsetType;
141typedef size_t MagickSizeType;
142#define MagickOffsetFormat "ld"
143#define MagickSizeFormat "lu"
144#define MagickOffsetMax SSIZE_MAX
147typedef __int64 MagickOffsetType;
148typedef unsigned __int64 MagickSizeType;
149#define MagickOffsetFormat "I64i"
150#define MagickSizeFormat "I64u"
151#define MagickOffsetMax _I64_MAX
154#if defined(MAGICKCORE_HAVE_UINTPTR_T) || defined(uintptr_t)
155typedef uintptr_t MagickAddressType;
158typedef size_t MagickAddressType;
161#if defined(_MSC_VER) && (_MSC_VER == 1200)
162typedef MagickOffsetType QuantumAny;
164typedef MagickSizeType QuantumAny;
167#if defined(macintosh)
168#define ExceptionInfo MagickExceptionInfo
175 GrayChannel = 0x0001,
176 CyanChannel = 0x0001,
177 GreenChannel = 0x0002,
178 MagentaChannel = 0x0002,
179 BlueChannel = 0x0004,
180 YellowChannel = 0x0004,
181 AlphaChannel = 0x0008,
182 OpacityChannel = 0x0008,
183 MatteChannel = 0x0008,
184 BlackChannel = 0x0020,
185 IndexChannel = 0x0020,
186 CompositeChannels = 0x002F,
187 AllChannels = 0x7ffffff,
191 TrueAlphaChannel = 0x0040,
192 RGBChannels = 0x0080,
193 GrayChannels = 0x0080,
194 SyncChannels = 0x0100,
195 DefaultChannels = ((AllChannels | SyncChannels) &~ OpacityChannel)
222#if defined(MAGICKCORE_HAVE_ISNAN) && !defined(__cplusplus) && !defined(c_plusplus)
223# define IsNaN(a) isnan(a)
224#elif defined(_MSC_VER) && (_MSC_VER >= 1310)
226# define IsNaN(a) _isnan(a)
228# define IsNaN(a) ((a) != (a))
230#if !defined(INFINITY)
231# define INFINITY ((double) -logf(0f))
238typedef struct _Image Image;
242#if defined(__cplusplus) || defined(c_plusplus)