• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2   Copyright 1999-2016 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.
6   obtain a copy of the License at
7 
8     http://www.imagemagick.org/script/license.php
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(__cplusplus) || defined(c_plusplus)
24 extern "C" {
25 #endif
26 
27 #if !defined(MAGICKCORE_QUANTUM_DEPTH)
28 #define MAGICKCORE_QUANTUM_DEPTH  16
29 #endif
30 
31 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__) && !defined(__MINGW64__)
32 #  define MagickLLConstant(c)  (MagickOffsetType) (c ## i64)
33 #  define MagickULLConstant(c)  (MagickSizeType) (c ## ui64)
34 #else
35 #  define MagickLLConstant(c)  (MagickOffsetType) (c ## LL)
36 #  define MagickULLConstant(c)  (MagickSizeType) (c ## ULL)
37 #endif
38 
39 #if !defined(MAGICKCORE_HAVE_DOUBLE_T)
40 typedef double double_t;
41 #endif
42 #if !defined(MAGICKCORE_HAVE_FLOAT_T)
43 typedef float float_t;
44 #endif
45 
46 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
47 #define MaxColormapSize  256UL
48 #define MaxMap  255UL
49 typedef float_t MagickRealType;
50 
51 #if defined(MAGICKCORE_HDRI_SUPPORT)
52 typedef float Quantum;
53 #define QuantumRange  255.0
54 #define QuantumFormat  "%g"
55 #else
56 typedef unsigned char Quantum;
57 #define QuantumRange  ((Quantum) 255)
58 #define QuantumFormat  "%u"
59 #endif
60 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
61 #define MaxColormapSize  65536UL
62 #define MaxMap  65535UL
63 typedef float_t MagickRealType;
64 
65 #if defined(MAGICKCORE_HDRI_SUPPORT)
66 typedef float Quantum;
67 #define QuantumRange  65535.0f
68 #define QuantumFormat  "%g"
69 #else
70 typedef unsigned short Quantum;
71 #define QuantumRange  ((Quantum) 65535)
72 #define QuantumFormat  "%u"
73 #endif
74 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
75 #define MaxColormapSize  65536UL
76 #define MaxMap  65535UL
77 typedef float_t MagickRealType;
78 
79 #if defined(MAGICKCORE_HDRI_SUPPORT)
80 typedef double Quantum;
81 #define QuantumRange  4294967295.0
82 #define QuantumFormat  "%g"
83 #else
84 typedef unsigned int Quantum;
85 #define QuantumRange  ((Quantum) 4294967295)
86 #define QuantumFormat  "%u"
87 #endif
88 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
89 #define MAGICKCORE_HDRI_SUPPORT
90 #define MaxColormapSize  65536UL
91 #define MaxMap  65535UL
92 
93 typedef long double MagickRealType;
94 typedef long double Quantum;
95 #define QuantumRange  18446744073709551615.0
96 #define QuantumFormat  "%g"
97 #else
98 #error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64"
99 #endif
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)
104 
105 /*
106   Typedef declarations.
107 */
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"
115 #else
116 typedef ssize_t MagickOffsetType;
117 typedef size_t MagickSizeType;
118 #define MagickOffsetFormat  "ld"
119 #define MagickSizeFormat  "lu"
120 #endif
121 #else
122 typedef __int64 MagickOffsetType;
123 typedef unsigned __int64 MagickSizeType;
124 #define MagickOffsetFormat  "I64i"
125 #define MagickSizeFormat  "I64u"
126 #endif
127 
128 #if defined(_MSC_VER) && (_MSC_VER == 1200)
129 typedef MagickOffsetType QuantumAny;
130 #else
131 typedef MagickSizeType QuantumAny;
132 #endif
133 
134 #if defined(macintosh)
135 #define ExceptionInfo  MagickExceptionInfo
136 #endif
137 
138 typedef enum
139 {
140   UndefinedClass,
141   DirectClass,
142   PseudoClass
143 } ClassType;
144 
145 typedef enum
146 {
147   MagickFalse = 0,
148   MagickTrue = 1
149 } MagickBooleanType;
150 
151 /*
152   The IsNaN test is for special floating point numbers of value Nan (not a
153   number). NaN's are defined as part of the IEEE standard for floating point
154   number representation, and need to be watched out for. Morphology Kernels
155   often use these special numbers as neighbourhood masks.
156 
157   The special property that two NaN's are never equal, even if they are from
158   the same variable allows you to test if a value is special NaN value.
159 
160   The macros are thus is only true if the value given is NaN.
161 */
162 #if defined(MAGICKCORE_HAVE_ISNAN)
163 #  define IsNaN(a) isnan(a)
164 #elif defined(_MSC_VER) && (_MSC_VER >= 1310)
165 #  include <float.h>
166 #  define IsNaN(a) _isnan(a)
167 #else
168 #  define IsNaN(a) (a != a)
169 #endif
170 
171 typedef struct _BlobInfo BlobInfo;
172 
173 typedef struct _ExceptionInfo ExceptionInfo;
174 
175 typedef struct _Image Image;
176 
177 typedef struct _ImageInfo ImageInfo;
178 
179 #if defined(__cplusplus) || defined(c_plusplus)
180 }
181 #endif
182 
183 #endif
184