MagickCore 7.1.2
Convert, Edit, Or Compose Bitmap Images
Loading...
Searching...
No Matches
magick-type.h
1/*
2 Copyright @ 1999 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
4
5 You may not use this file except in compliance with the License. You may
6 obtain a copy of the License at
7
8 https://imagemagick.org/license/
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 types.
17*/
18#ifndef MAGICKCORE_MAGICK_TYPE_H
19#define MAGICKCORE_MAGICK_TYPE_H
20
21#include "MagickCore/magick-config.h"
22
23#if defined(MAGICKCORE_HAVE_UINTPTR_T)
24# include <stdint.h>
25#endif
26
27#if defined(__cplusplus) || defined(c_plusplus)
28extern "C" {
29#endif
30
31#if !defined(MAGICKCORE_QUANTUM_DEPTH)
32#define MAGICKCORE_QUANTUM_DEPTH 16
33#endif
34
35#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__)
36# define MagickLLConstant(c) ((MagickOffsetType) (c ## i64))
37# define MagickULLConstant(c) ((MagickSizeType) (c ## ui64))
38#else
39# define MagickLLConstant(c) ((MagickOffsetType) (c ## LL))
40# define MagickULLConstant(c) ((MagickSizeType) (c ## ULL))
41#endif
42
43#if MAGICKCORE_SIZEOF_FLOAT_T == 0
44typedef float MagickFloatType;
45#elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_FLOAT)
46typedef float MagickFloatType;
47#elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_DOUBLE)
48typedef double MagickFloatType;
49#elif (MAGICKCORE_SIZEOF_FLOAT_T == MAGICKCORE_SIZEOF_LONG_DOUBLE)
50typedef double MagickFloatType;
51#else
52#error Your MagickFloatType type is neither a float, nor a double, nor a long double
53#endif
54#if MAGICKCORE_SIZEOF_DOUBLE_T == 0
55typedef double MagickDoubleType;
56#elif (MAGICKCORE_SIZEOF_DOUBLE_T == MAGICKCORE_SIZEOF_DOUBLE)
57typedef double MagickDoubleType;
58#elif (MAGICKCORE_SIZEOF_DOUBLE_T == MAGICKCORE_SIZEOF_LONG_DOUBLE)
59typedef double MagickDoubleType;
60#else
61#error Your MagickDoubleType type is neither a float, nor a double, nor a long double
62#endif
63
64#if (MAGICKCORE_QUANTUM_DEPTH == 8)
65#define MaxColormapSize 256UL
66#define MaxMap 255UL
67
68#if defined(MAGICKCORE_HDRI_SUPPORT)
69typedef MagickFloatType Quantum;
70#define QuantumRange ((Quantum) 255.0)
71#define QuantumFormat "%g"
72#else
73typedef unsigned char Quantum;
74#define QuantumRange ((Quantum) 255)
75#define QuantumFormat "%u"
76#endif
77#elif (MAGICKCORE_QUANTUM_DEPTH == 16)
78#define MaxColormapSize 65536UL
79#define MaxMap 65535UL
80
81#if defined(MAGICKCORE_HDRI_SUPPORT)
82typedef MagickFloatType Quantum;
83#define QuantumRange ((Quantum) 65535.0)
84#define QuantumFormat "%g"
85#else
86typedef unsigned short Quantum;
87#define QuantumRange ((Quantum) 65535)
88#define QuantumFormat "%u"
89#endif
90#elif (MAGICKCORE_QUANTUM_DEPTH == 32)
91#define MaxColormapSize 65536UL
92#define MaxMap 65535UL
93
94#if defined(MAGICKCORE_HDRI_SUPPORT)
95typedef MagickDoubleType Quantum;
96#define QuantumRange ((Quantum) 4294967295.0)
97#define QuantumFormat "%g"
98#else
99typedef unsigned int Quantum;
100#define QuantumRange ((Quantum) 4294967295)
101#define QuantumFormat "%u"
102#endif
103#elif (MAGICKCORE_QUANTUM_DEPTH == 64)
104#define MAGICKCORE_HDRI_SUPPORT 1
105#define MaxColormapSize 65536UL
106#define MaxMap 65535UL
107
108typedef MagickDoubleType Quantum;
109#define QuantumRange ((Quantum) 18446744073709551615.0)
110#define QuantumFormat "%g"
111#else
112#error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64"
113#endif
114#define MagickEpsilon 1.0e-12
115#define MagickMaximumValue DBL_MAX
116#define MagickMinimumValue DBL_MIN
117#define MagickStringify(macro_or_string) MagickStringifyArg(macro_or_string)
118#define MagickStringifyArg(contents) #contents
119#define QuantumScale ((double) 1.0/(double) QuantumRange)
120
121/*
122 Typedef declarations.
123*/
124typedef MagickDoubleType MagickRealType;
125typedef unsigned int MagickStatusType;
126#if !defined(MAGICKCORE_WINDOWS_SUPPORT)
127#if (MAGICKCORE_SIZEOF_UNSIGNED_LONG_LONG == 8)
128typedef long long MagickOffsetType;
129typedef unsigned long long MagickSizeType;
130#define MagickOffsetFormat "lld"
131#define MagickSizeFormat "llu"
132#define MagickOffsetMax LLONG_MAX
133#else
134typedef ssize_t MagickOffsetType;
135typedef size_t MagickSizeType;
136#define MagickOffsetFormat "ld"
137#define MagickSizeFormat "lu"
138#define MagickOffsetMax SSIZE_MAX
139#endif
140#else
141typedef __int64 MagickOffsetType;
142typedef unsigned __int64 MagickSizeType;
143#define MagickOffsetFormat "I64i"
144#define MagickSizeFormat "I64u"
145#define MagickOffsetMax _I64_MAX
146#endif
147
148#if defined(MAGICKCORE_HAVE_UINTPTR_T) || defined(uintptr_t)
149typedef uintptr_t MagickAddressType;
150#else
151/* Hope for the best, I guess. */
152typedef size_t MagickAddressType;
153#endif
154
155typedef MagickSizeType QuantumAny;
156
157typedef enum
158{
159 UndefinedClass,
160 DirectClass,
161 PseudoClass
162} ClassType;
163
164typedef enum
165{
166 MagickFalse = 0,
167 MagickTrue = 1
168} MagickBooleanType;
169
170/*
171 The IsNaN test is for special floating point numbers of value Nan (not a
172 number). NaN's are defined as part of the IEEE standard for floating point
173 number representation, and need to be watched out for. Morphology Kernels
174 often use these special numbers as neighbourhood masks.
175
176 The special property that two NaN's are never equal, even if they are from
177 the same variable allows you to test if a value is special NaN value.
178
179 The macros are thus is only true if the value given is NaN.
180*/
181#if defined(MAGICKCORE_HAVE_ISNAN) && !defined(__cplusplus) && !defined(c_plusplus)
182# define IsNaN(a) isnan(a)
183#elif defined(_MSC_VER)
184# include <float.h>
185# define IsNaN(a) _isnan(a)
186#else
187# define IsNaN(a) ((a) != (a))
188#endif
189#if !defined(INFINITY)
190# define INFINITY ((double) -logf(0f))
191#endif
192
193typedef struct _BlobInfo BlobInfo;
194
195typedef struct _ExceptionInfo ExceptionInfo;
196
197typedef struct _Image Image;
198
199typedef struct _ImageInfo ImageInfo;
200
201#if defined(__cplusplus) || defined(c_plusplus)
202}
203#endif
204
205#endif