]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/magick-type.h
(no commit message)
[imagemagick] / MagickCore / magick-type.h
index bdf62e5f7cbac45ae0c4cf17bbb68dec216ca77a..6ea55bc3f3d6817fe26c92e0e3c142bce9e5895b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  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
@@ -98,8 +98,8 @@ typedef double_t Quantum;
 #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)
 
 /*
@@ -165,14 +165,14 @@ typedef enum
    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)
@@ -184,6 +184,21 @@ typedef enum
 #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;