/*
- Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization
+ Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization
dedicated to making software imaging solutions freely available.
You may not use this file except in compliance with the License.
#ifndef _MAGICKCORE_MAGICK_TYPE_H
#define _MAGICKCORE_MAGICK_TYPE_H
+#include "MagickCore/magick-config.h"
+
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
-#include "MagickCore/magick-config.h"
-
#if !defined(MAGICKCORE_QUANTUM_DEPTH)
#define MAGICKCORE_QUANTUM_DEPTH 16
#endif
#error "MAGICKCORE_QUANTUM_DEPTH must be one of 8, 16, 32, or 64"
#endif
#define MagickEpsilon (1.0e-15)
-#define MagickHuge 3.4e+38F
-#define MagickPI 3.14159265358979323846264338327950288419716939937510
+#define MagickMaximumValue 1.79769313486231570E+308
+#define MagickMinimumValue 2.22507385850720140E-308
#define QuantumScale ((double) 1.0/(double) QuantumRange)
/*
IsMagickNotNULL() converts C pointers tests MagickBooleanType
*/
#if 1
-/* Fast C typing method assumes MagickBooleanType uses match 0,1 values */
+/* Fast C typing method assumes MagickBooleanType match 0,1 values */
# define IfMagickTrue(v) ((int)(v))
# define IfMagickFalse(v) (!(int)(v))
# define IsMagickTrue(v) ((MagickBooleanType)((int)(v)!=0))
# define IsMagickFalse(v) ((MagickBooleanType)(!(int)(v)))
# define IsMagickNot(v) ((MagickBooleanType)(!(int)(v)))
#else
-/* Do not depend MagickBooleanValues */
+/* Do not depend MagickBooleanType's values */
# define IfMagickTrue(v) ((v) != MagickFalse)
# define IfMagickFalse(v) ((v) == MagickFalse)
# define IsMagickTrue(v) ((v)?MagickTrue:MagickFalse)
#define IsMagickNULL(v) (((void *)(v) == NULL)?MagickTrue:MagickFalse)
#define IsMagickNotNULL(v) (((void *)(v) != NULL)?MagickTrue:MagickFalse)
+/*
+ The IsNaN and IfNan tests for special floating point numbers of
+ value NaN (not a number). NaN's are defined as part of the IEEE standard
+ for floating point number representation, and need to be watched out for.
+ Morphology Kernels often use these special numbers as neighbourhood masks.
+
+ The special property that two NaN's are never equal, even if they are from
+ the same variable allows you to test if a value is special NaN value.
+
+ The macros are thus is only true if the value given is NaN.
+*/
+# define IfNaN(a) ((a) != (a))
+# define IsNaN(a) ((a) != (a)?MagickTrue:MagickFalse)
+
+
typedef struct _BlobInfo BlobInfo;
typedef struct _ExceptionInfo ExceptionInfo;