]> granicus.if.org Git - imagemagick/blob - MagickCore/magick-type.h
(no commit message)
[imagemagick] / MagickCore / magick-type.h
1 /*
2   Copyright 1999-2012 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 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24
25 #include "MagickCore/magick-config.h"
26
27 #if !defined(MAGICKCORE_QUANTUM_DEPTH)
28 #define MAGICKCORE_QUANTUM_DEPTH  16
29 #endif
30
31 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__)
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 (MAGICKCORE_QUANTUM_DEPTH == 8)
40 #define MagickEpsilon  1.0e-6
41 #define MaxColormapSize  256UL
42 #define MaxMap  255UL
43
44 #if defined __arm__ || defined __thumb__
45 typedef float MagickRealType;
46 #else
47 typedef double MagickRealType;
48 #endif
49 #if defined(MAGICKCORE_HDRI_SUPPORT)
50 typedef float Quantum;
51 #define QuantumRange  255.0
52 #define QuantumFormat  "%g"
53 #else
54 typedef unsigned char Quantum;
55 #define QuantumRange  255
56 #define QuantumFormat  "%u"
57 #endif
58 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
59 #define MagickEpsilon  1.0e-10
60 #define MaxColormapSize  65536UL
61 #define MaxMap  65535UL
62
63 #if defined __arm__ || defined __thumb__
64 typedef float MagickRealType;
65 #else
66 typedef double MagickRealType;
67 #endif
68 #if defined(MAGICKCORE_HDRI_SUPPORT)
69 typedef float Quantum;
70 #define QuantumRange  65535.0
71 #define QuantumFormat  "%g"
72 #else
73 typedef unsigned short Quantum;
74 #define QuantumRange  65535
75 #define QuantumFormat  "%u"
76 #endif
77 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
78 #define MagickEpsilon  1.0e-10
79 #define MaxColormapSize  65536UL
80 #define MaxMap  65535UL
81
82 typedef double MagickRealType;
83 #if defined(MAGICKCORE_HDRI_SUPPORT)
84 typedef float Quantum;
85 #define QuantumRange  4294967295.0
86 #define QuantumFormat  "%g"
87 #else
88 typedef unsigned int Quantum;
89 #define QuantumRange  4294967295
90 #define QuantumFormat  "%u"
91 #endif
92 #elif (MAGICKCORE_QUANTUM_DEPTH == 64) && defined(MAGICKCORE_HAVE_LONG_DOUBLE_WIDER)
93 #define MagickEpsilon  1.0e-10
94 #define MaxColormapSize  65536UL
95 #define MaxMap  65535UL
96
97 typedef long double MagickRealType;
98 typedef double Quantum;
99 #define QuantumRange  18446744073709551615.0
100 #define QuantumFormat  "%g"
101 #else
102 #if !defined(_CH_)
103 # error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64"
104 #endif
105 #endif
106 #define MagickHuge  3.402823466E+38F
107 #define MagickPI  3.14159265358979323846264338327950288419716939937510L
108 #define QuantumScale  ((double) 1.0/(double) QuantumRange)
109
110 /*
111   Typedef declarations.
112 */
113 typedef unsigned int MagickStatusType;
114 #if !defined(MAGICKCORE_WINDOWS_SUPPORT)
115 #if (MAGICKCORE_SIZEOF_UNSIGNED_LONG_LONG == 8)
116 typedef long long MagickOffsetType;
117 typedef unsigned long long MagickSizeType;
118 #define MagickOffsetFormat  "lld"
119 #define MagickSizeFormat  "llu"
120 #else
121 typedef ssize_t MagickOffsetType;
122 typedef size_t MagickSizeType;
123 #define MagickOffsetFormat  "ld"
124 #define MagickSizeFormat  "lu"
125 #endif
126 #else
127 typedef __int64 MagickOffsetType;
128 typedef unsigned __int64 MagickSizeType;
129 #define MagickOffsetFormat  "I64i"
130 #define MagickSizeFormat  "I64u"
131 #endif
132
133 #if QuantumDepth > 16
134   typedef double SignedQuantum;
135 #else
136   typedef ssize_t SignedQuantum;
137 #endif
138
139 #if defined(_MSC_VER) && (_MSC_VER == 1200)
140 typedef MagickOffsetType QuantumAny;
141 #else
142 typedef MagickSizeType QuantumAny;
143 #endif
144
145 #if defined(macintosh)
146 #define ExceptionInfo  MagickExceptionInfo
147 #endif
148
149 typedef enum
150 {
151   UndefinedClass,
152   DirectClass,
153   PseudoClass
154 } ClassType;
155
156 typedef enum
157 {
158   MagickFalse = 0,
159   MagickTrue = 1
160 } MagickBooleanType;
161
162 /*
163    Define some short-hand macros for handling MagickBooleanType
164    Some of these assume MagickBooleanType uses values 0 and 1,
165    and uses fast C typing with C boolean operations
166
167      Is  -- returns MagickBooleanType
168      If  -- returns C integer boolean (for if's and while's)
169
170    IsTrue()  converts a C integer boolean to a MagickBooleanType
171    IsFalse() is a  MagickBooleanType 'not' operation
172
173    IfTrue()   converts MagickBooleanType to C integer Boolean
174    IfFalse()  Not the MagickBooleanType to C integer Boolean
175
176    IsNULL() and IsNotNULL() converts C pointers to MagickBooleanType
177 */
178 #if 1
179 #  define IsMagickTrue(v)  ((MagickBooleanType)((int)(v)!= 0))
180 #  define IsMagickFalse(v) ((MagickBooleanType)(!(int)(v)))
181 #  define IfMagickTrue(v)  ((int)(v))
182 #  define IfMagickFalse(v) (!(int)(v))
183 #else
184 #  define IsMagickTrue(v)  (((MagickBooleanType)(v))!=MagickFalse?MagickTrue:MagickFalse)
185 #  define IsMagickFalse(v) (((MagickBooleanType)(v))==MagickFalse?MagickTrue:MagickFalse)
186 #  define IfMagickTrue(v)  ((v) != MagickFalse)
187 #  define IfMagickFalse(v) ((v) == MagickFalse)
188 #endif
189 #define IsMagickNULL(v) (((void *)(v) == NULL)?MagickTrue:MagickFalse)
190 #define IsMagickNotNULL(v) (((void *)(v) != NULL)?MagickTrue:MagickFalse)
191
192 typedef struct _BlobInfo BlobInfo;
193
194 typedef struct _ExceptionInfo ExceptionInfo;
195
196 typedef struct _Image Image;
197
198 typedef struct _ImageInfo ImageInfo;
199
200 #if defined(__cplusplus) || defined(c_plusplus)
201 }
202 #endif
203
204 #endif