cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 1 | /* |
cristy | b56bb24 | 2014-11-25 17:12:48 +0000 | [diff] [blame] | 2 | Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 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 | |
cristy | 6398ec7 | 2013-11-28 02:00:27 +0000 | [diff] [blame] | 21 | #include "MagickCore/magick-config.h" |
| 22 | |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 23 | #if defined(__cplusplus) || defined(c_plusplus) |
| 24 | extern "C" { |
| 25 | #endif |
| 26 | |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 27 | #if !defined(MAGICKCORE_QUANTUM_DEPTH) |
| 28 | #define MAGICKCORE_QUANTUM_DEPTH 16 |
| 29 | #endif |
| 30 | |
cristy | 277f3a2 | 2012-12-10 13:18:45 +0000 | [diff] [blame] | 31 | #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__) && !defined(__MINGW64__) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 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 | |
cristy | c058afd | 2012-10-31 11:26:53 +0000 | [diff] [blame] | 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 | |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 46 | #if (MAGICKCORE_QUANTUM_DEPTH == 8) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 47 | #define MaxColormapSize 256UL |
| 48 | #define MaxMap 255UL |
cristy | c058afd | 2012-10-31 11:26:53 +0000 | [diff] [blame] | 49 | typedef float_t MagickRealType; |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 50 | |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 51 | #if defined(MAGICKCORE_HDRI_SUPPORT) |
| 52 | typedef float Quantum; |
| 53 | #define QuantumRange 255.0 |
cristy | e7f5109 | 2010-01-17 00:39:37 +0000 | [diff] [blame] | 54 | #define QuantumFormat "%g" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 55 | #else |
| 56 | typedef unsigned char Quantum; |
cristy | 6e963d8 | 2012-06-19 15:23:24 +0000 | [diff] [blame] | 57 | #define QuantumRange ((Quantum) 255) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 58 | #define QuantumFormat "%u" |
| 59 | #endif |
| 60 | #elif (MAGICKCORE_QUANTUM_DEPTH == 16) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 61 | #define MaxColormapSize 65536UL |
| 62 | #define MaxMap 65535UL |
cristy | c058afd | 2012-10-31 11:26:53 +0000 | [diff] [blame] | 63 | typedef float_t MagickRealType; |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 64 | |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 65 | #if defined(MAGICKCORE_HDRI_SUPPORT) |
| 66 | typedef float Quantum; |
dirk | 7493d8f | 2014-08-10 20:25:32 +0000 | [diff] [blame] | 67 | #define QuantumRange 65535.0f |
cristy | e7f5109 | 2010-01-17 00:39:37 +0000 | [diff] [blame] | 68 | #define QuantumFormat "%g" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 69 | #else |
| 70 | typedef unsigned short Quantum; |
cristy | 6e963d8 | 2012-06-19 15:23:24 +0000 | [diff] [blame] | 71 | #define QuantumRange ((Quantum) 65535) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 72 | #define QuantumFormat "%u" |
| 73 | #endif |
| 74 | #elif (MAGICKCORE_QUANTUM_DEPTH == 32) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 75 | #define MaxColormapSize 65536UL |
| 76 | #define MaxMap 65535UL |
cristy | f314dbd | 2012-11-15 13:35:28 +0000 | [diff] [blame] | 77 | typedef float_t MagickRealType; |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 78 | |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 79 | #if defined(MAGICKCORE_HDRI_SUPPORT) |
cristy | 067638f | 2014-08-08 14:35:02 +0000 | [diff] [blame] | 80 | typedef double Quantum; |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 81 | #define QuantumRange 4294967295.0 |
cristy | e7f5109 | 2010-01-17 00:39:37 +0000 | [diff] [blame] | 82 | #define QuantumFormat "%g" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 83 | #else |
| 84 | typedef unsigned int Quantum; |
cristy | 6e963d8 | 2012-06-19 15:23:24 +0000 | [diff] [blame] | 85 | #define QuantumRange ((Quantum) 4294967295) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 86 | #define QuantumFormat "%u" |
| 87 | #endif |
cristy | f314dbd | 2012-11-15 13:35:28 +0000 | [diff] [blame] | 88 | #elif (MAGICKCORE_QUANTUM_DEPTH == 64) |
cristy | 8ecccf9 | 2012-11-20 15:24:40 +0000 | [diff] [blame] | 89 | #define MAGICKCORE_HDRI_SUPPORT |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 90 | #define MaxColormapSize 65536UL |
| 91 | #define MaxMap 65535UL |
| 92 | |
cristy | 8ecccf9 | 2012-11-20 15:24:40 +0000 | [diff] [blame] | 93 | typedef long double MagickRealType; |
cristy | 067638f | 2014-08-08 14:35:02 +0000 | [diff] [blame] | 94 | typedef long double Quantum; |
cristy | 8ecccf9 | 2012-11-20 15:24:40 +0000 | [diff] [blame] | 95 | #define QuantumRange 18446744073709551615.0 |
cristy | e7f5109 | 2010-01-17 00:39:37 +0000 | [diff] [blame] | 96 | #define QuantumFormat "%g" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 97 | #else |
cristy | fd7a702 | 2012-12-10 13:35:18 +0000 | [diff] [blame] | 98 | #error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 99 | #endif |
cristy | 6fb25cc | 2015-04-06 11:34:31 +0000 | [diff] [blame] | 100 | #define MagickEpsilon (1.0e-15) |
cristy | fe181a7 | 2014-02-02 21:17:43 +0000 | [diff] [blame] | 101 | #define MagickMaximumValue 1.79769313486231570E+308 |
| 102 | #define MagickMinimumValue 2.22507385850720140E-308 |
cristy | 4c08aed | 2011-07-01 19:47:50 +0000 | [diff] [blame] | 103 | #define QuantumScale ((double) 1.0/(double) QuantumRange) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 104 | |
| 105 | /* |
| 106 | Typedef declarations. |
| 107 | */ |
| 108 | typedef unsigned int MagickStatusType; |
cristy | 0157aea | 2010-04-24 21:12:18 +0000 | [diff] [blame] | 109 | #if !defined(MAGICKCORE_WINDOWS_SUPPORT) |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 110 | #if (MAGICKCORE_SIZEOF_UNSIGNED_LONG_LONG == 8) |
| 111 | typedef long long MagickOffsetType; |
| 112 | typedef unsigned long long MagickSizeType; |
cristy | 24fb41a | 2010-06-02 14:01:14 +0000 | [diff] [blame] | 113 | #define MagickOffsetFormat "lld" |
| 114 | #define MagickSizeFormat "llu" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 115 | #else |
cristy | bb50337 | 2010-05-27 20:51:26 +0000 | [diff] [blame] | 116 | typedef ssize_t MagickOffsetType; |
| 117 | typedef size_t MagickSizeType; |
cristy | 24fb41a | 2010-06-02 14:01:14 +0000 | [diff] [blame] | 118 | #define MagickOffsetFormat "ld" |
| 119 | #define MagickSizeFormat "lu" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 120 | #endif |
| 121 | #else |
| 122 | typedef __int64 MagickOffsetType; |
| 123 | typedef unsigned __int64 MagickSizeType; |
cristy | 24fb41a | 2010-06-02 14:01:14 +0000 | [diff] [blame] | 124 | #define MagickOffsetFormat "I64i" |
| 125 | #define MagickSizeFormat "I64u" |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 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 | { |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 140 | UndefinedClass, |
| 141 | DirectClass, |
| 142 | PseudoClass |
| 143 | } ClassType; |
| 144 | |
| 145 | typedef enum |
| 146 | { |
| 147 | MagickFalse = 0, |
| 148 | MagickTrue = 1 |
| 149 | } MagickBooleanType; |
| 150 | |
anthony | 6f20131 | 2012-03-30 04:08:15 +0000 | [diff] [blame] | 151 | /* |
| 152 | Define some short-hand macros for handling MagickBooleanType |
anthony | 6f20131 | 2012-03-30 04:08:15 +0000 | [diff] [blame] | 153 | and uses fast C typing with C boolean operations |
| 154 | |
anthony | e5b3965 | 2012-04-21 05:37:29 +0000 | [diff] [blame] | 155 | Is -- returns a MagickBooleanType (for storage) |
anthony | 6f20131 | 2012-03-30 04:08:15 +0000 | [diff] [blame] | 156 | If -- returns C integer boolean (for if's and while's) |
| 157 | |
anthony | e5b3965 | 2012-04-21 05:37:29 +0000 | [diff] [blame] | 158 | IfMagickTrue() converts MagickBooleanType to C integer Boolean |
| 159 | IfMagickFalse() Not the MagickBooleanType to C integer Boolean |
anthony | 6f20131 | 2012-03-30 04:08:15 +0000 | [diff] [blame] | 160 | */ |
| 161 | #if 1 |
anthony | a322a83 | 2013-04-27 06:28:03 +0000 | [diff] [blame] | 162 | /* Fast C typing method assumes MagickBooleanType match 0,1 values */ |
anthony | 7bcfe7f | 2012-03-30 14:01:22 +0000 | [diff] [blame] | 163 | # define IfMagickTrue(v) ((int)(v)) |
| 164 | # define IfMagickFalse(v) (!(int)(v)) |
anthony | 6f20131 | 2012-03-30 04:08:15 +0000 | [diff] [blame] | 165 | #else |
anthony | a322a83 | 2013-04-27 06:28:03 +0000 | [diff] [blame] | 166 | /* Do not depend MagickBooleanType's values */ |
anthony | 7bcfe7f | 2012-03-30 14:01:22 +0000 | [diff] [blame] | 167 | # define IfMagickTrue(v) ((v) != MagickFalse) |
| 168 | # define IfMagickFalse(v) ((v) == MagickFalse) |
anthony | 6f20131 | 2012-03-30 04:08:15 +0000 | [diff] [blame] | 169 | #endif |
anthony | 6f20131 | 2012-03-30 04:08:15 +0000 | [diff] [blame] | 170 | |
anthony | a322a83 | 2013-04-27 06:28:03 +0000 | [diff] [blame] | 171 | /* |
| 172 | The IsNaN and IfNan tests for special floating point numbers of |
| 173 | value NaN (not a number). NaN's are defined as part of the IEEE standard |
| 174 | for floating point number representation, and need to be watched out for. |
| 175 | Morphology Kernels often use these special numbers as neighbourhood masks. |
| 176 | |
| 177 | The special property that two NaN's are never equal, even if they are from |
| 178 | the same variable allows you to test if a value is special NaN value. |
| 179 | |
| 180 | The macros are thus is only true if the value given is NaN. |
| 181 | */ |
| 182 | # define IfNaN(a) ((a) != (a)) |
| 183 | # define IsNaN(a) ((a) != (a)?MagickTrue:MagickFalse) |
| 184 | |
| 185 | |
cristy | 3ed852e | 2009-09-05 21:47:34 +0000 | [diff] [blame] | 186 | typedef struct _BlobInfo BlobInfo; |
| 187 | |
| 188 | typedef struct _ExceptionInfo ExceptionInfo; |
| 189 | |
| 190 | typedef struct _Image Image; |
| 191 | |
| 192 | typedef struct _ImageInfo ImageInfo; |
| 193 | |
| 194 | #if defined(__cplusplus) || defined(c_plusplus) |
| 195 | } |
| 196 | #endif |
| 197 | |
| 198 | #endif |