Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Beta/Math/Number/NbVerify.hpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////
00002 //  How to use this file:                                             //
00003 //  =====================                                             //
00004 //  #define NUMBER  Double  /* The name of the class */               //
00005 //  #define TYPE    double  /* The storage data type */               //
00006 //  #define ZERO    0.0     /* The value zero in that data type */    //
00007 //                                                                    //
00008 //  class Double {                                                    //
00009 //      // ...                                                        //
00010 //      #include <j2k/Fred/Math/Number/NbVerify.hpp>                  //
00011 //      #include <j2k/Fred/Math/Number/NbOperator1.hpp>               //
00012 //                                                                    //
00013 //      /* Operator right handside */                                 //
00014 //      /* Might consider automatic type upgrading for simplicity...  //
00015 //      #define  TYPE2   double                                       //
00016 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00017 //                                                                    //
00018 //      #define  TYPE2   float                                        //
00019 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00020 //                                                                    //
00021 //      #define  TYPE2   signed long                                  //
00022 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00023 //      #define  TYPE2   unsigned long                                //
00024 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00025 //                                                                    //
00026 //      #define  TYPE2   signed short                                 //
00027 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00028 //      #define  TYPE2   unsigned short                               //
00029 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00030 //                                                                    //
00031 //      #define  TYPE2   signed char                                  //
00032 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00033 //      #define  TYPE2   unsigned char                                //
00034 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00035 //                                                                    //
00036 //      #define  TYPE2   signed int                                   //
00037 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00038 //      #define  TYPE2   unsigned int                                 //
00039 //      #include <j2k/Fred/Math/Number/NbOperator2.hpp>               //
00040 //  };                                                                //
00041 //  #undef  TYPE                                                      //
00042 //  #undef  ZERO                                                      //
00043 //  #undef  NUMBER                                                    //
00044 ////////////////////////////////////////////////////////////////////////
00045 
00046 // Missing += *= -=  /= <<= >>= &&= &= |= etc.
00047 // Too long to do it by hand, so let's do it with an #include Macro ! =)
00048 
00049 #ifndef TYPE
00050  #error "TYPE is not defined !"
00051 #endif
00052 
00053 #ifndef ZERO
00054  #error "ZERO is not defined !"
00055 #endif
00056 
00057   void verify( MathState s, TYPE temp )
00058   {
00059     if ( s != Valid ) return;
00060 
00061     if      ( temp > ZERO ) {  state = Pos;  }   
00062     else if ( temp < ZERO ) {  state = Neg;  }   
00063     else                    {  state = Zero; }
00064   } 
00065 
00066   static MathState verify( TYPE n )
00067   {
00068     if ( n > ZERO ) return Pos;  
00069     if ( n < ZERO ) return Neg;  
00070     return  Zero;
00071   } 
00072 
00073   static MathState getState( const char* s )
00074   {
00075     if ( s == NULL ) return Zero; 
00076     if ( strlen(s) < 2 ) return Valid;  
00077 
00078     char* sUp = strupr( strdup( s ) );  
00079     char* sPosInf  = "POSITIVE INFINITE POSINFINITE +INFINITE"; 
00080     char* sNegInf  = "NEGATIVE INFINITE NEGINFINITE -INFINITE"; 
00081     char* sNaN = "NAN NaN"; 
00082     char* sFPError = "FPERROR FLOATING-POINT ERROR FLOAT ERROR";
00083 
00084     char* f1 = strstr( sPosInf,  sUp ); 
00085     char* f2 = strstr( sNegInf,  sUp ); 
00086     char* f3 = strstr( sNaN, sUp ); 
00087     char* f4 = strstr( sFPError, sUp ); 
00088 
00089     long n1 = (long)( f1 - sUp ); 
00090     long n2 = (long)( f2 - sUp ); 
00091     long n3 = (long)( f3 - sUp ); 
00092     long n4 = (long)( f4 - sUp ); 
00093 
00094 #ifdef __J2K__DEBUG 
00095        printf("Up=[%s](%d)\n", sUp, strlen(sUp) );  
00096        printf("f1=[%s](%d)\n", f1,  n1 ); 
00097        printf("f2=[%s](%d)\n", f2,  n2 ); 
00098        printf("f3=[%s](%d)\n", f3,  n3 ); 
00099        printf("f4=[%s](%d)\n", f4,  n4 ); 
00100 #endif
00101 
00102        if ( n1 > 0 ) return PosInf;  
00103        if ( n2 > 0 ) return NegInf;  
00104        if ( n3 > 0 ) return NaN; 
00105        if ( n4 > 0 ) return FPError; 
00106 
00107        return Valid;
00108   } 

Generated on Sun Oct 14 18:46:14 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001