]> 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  ((MagickRealType) 1.0e-7)
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  ((Quantum) 255)
56 #define QuantumFormat  "%u"
57 #endif
58 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
59 #define MagickEpsilon  ((MagickRealType) 1.0e-16)
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  ((Quantum) 65535)
75 #define QuantumFormat  "%u"
76 #endif
77 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
78 #define MagickEpsilon  ((MagickRealType) 1.0e-16)
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  ((Quantum) 4294967295)
90 #define QuantumFormat  "%u"
91 #endif
92 #elif (MAGICKCORE_QUANTUM_DEPTH == 64) && defined(MAGICKCORE_HAVE_LONG_DOUBLE_WIDER)
93 #define MagickEpsilon  ((MagickRealType) 1.0e-16)
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  ((MagickRealType) 1.0/MagickEpsilon)
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    and uses fast C typing with C boolean operations
165
166      Is  -- returns a MagickBooleanType (for storage)
167      If  -- returns C integer boolean (for if's and while's)
168
169    IfMagickTrue()     converts MagickBooleanType to C integer Boolean
170    IfMagickFalse()    Not the MagickBooleanType to C integer Boolean
171
172    IsMagickTrue()     converts a C integer boolean to a MagickBooleanType
173    IsMagickFalse()    converts and is also a MagickBooleanType 'not' operation
174
175    IsMagickNULL()
176    IsMagickNotNULL()  converts C pointers tests MagickBooleanType
177 */
178 #if 1
179 /* Fast C typing method assumes MagickBooleanType uses match 0,1 values */
180 #  define IfMagickTrue(v)  ((int)(v))
181 #  define IfMagickFalse(v) (!(int)(v))
182 #  define IsMagickTrue(v)  ((MagickBooleanType)((int)(v)!=0))
183 #  define IsMagickFalse(v) ((MagickBooleanType)(!(int)(v)))
184 #  define IsMagickNot(v)   ((MagickBooleanType)(!(int)(v)))
185 #else
186 /* Do not depend MagickBooleanValues */
187 #  define IfMagickTrue(v)  ((v) != MagickFalse)
188 #  define IfMagickFalse(v) ((v) == MagickFalse)
189 #  define IsMagickTrue(v)  ((v)?MagickTrue:MagickFalse)
190 #  define IsMagickFalse(v) ((v)?MagickFalse:MagickTrue)
191 #  define IsMagickNot(v)   (IfMagickTrue(v)?MagickFalse:MagickTrue)
192 #endif
193 #define IfStringTrue(v)       IfMagickTrue(IsStringTrue(v))
194 #define IfStringNotFalse(v)   IfMagickTrue(IsStringNotFalse(v))
195 #define IsMagickNULL(v)       (((void *)(v) == NULL)?MagickTrue:MagickFalse)
196 #define IsMagickNotNULL(v)    (((void *)(v) != NULL)?MagickTrue:MagickFalse)
197
198 typedef struct _BlobInfo BlobInfo;
199
200 typedef struct _ExceptionInfo ExceptionInfo;
201
202 typedef struct _Image Image;
203
204 typedef struct _ImageInfo ImageInfo;
205
206 #if defined(__cplusplus) || defined(c_plusplus)
207 }
208 #endif
209
210 #endif