home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vgserv45.zip / BASE / HPTWGS2 / include / fcwqnum.h < prev    next >
C/C++ Source or Header  |  2001-03-21  |  7KB  |  187 lines

  1. /*****************************************************************************/
  2. /*                                                                           */
  3. /*                           OCO SOURCE MATERIALS                            */
  4. /*                             IBM CONFIDENTIAL                              */
  5. /*                                    OR                                     */
  6. /*                        IBM CONFIDENTIAL RESTRICTED                        */
  7. /*            WHEN COMBINED WITH THE AGGREGATED OCO SOURCE MODULES           */
  8. /*                           FOR THIS PROGRAM PRODUCT                        */
  9. /*                                                                           */
  10. /*      VisualAge Generator Server for OS/2, AIX, HP-UX, and Windows NT      */
  11. /*                          Version 3.0  5697-C28                            */
  12. /*                    (C) COPYRIGHT IBM CORP. 1994,1997                      */
  13. /*                                                                           */
  14. /*****************************************************************************/
  15. #ifndef FCWQNUM_H
  16. #define FCWQNUM_H
  17.  
  18. #include <iostream.h>
  19.  
  20. /*-------------------------------------------------------------------------*/
  21. /* Forward references                                                      */
  22. /*-------------------------------------------------------------------------*/
  23. class TraceFile;
  24.  
  25. /*-------------------------------------------------------------------------*/
  26. /* Global overflow functions                                               */
  27. /*-------------------------------------------------------------------------*/
  28. void MaxOverflow();
  29. void UserOverflow();
  30. Bool StopOnUserOverflow();
  31.  
  32.  
  33. /*-------------------------------------------------------------------------*/
  34. /* Define some format types                                                */
  35. /*-------------------------------------------------------------------------*/
  36. enum decStrFmtOpt
  37. {
  38.   WSign = 1,
  39.   WNegSign = 2,
  40.   WLZeros = 4,
  41.   WLZNegSign = 6
  42. };
  43.  
  44. /*-------------------------------------------------------------------------*/
  45. /* 16 byte value (with decimal                                             */
  46. /*-------------------------------------------------------------------------*/
  47. class quadnum : public quadlong
  48. {
  49.   public:
  50.  
  51.     quadnum( const int = 0 );
  52.     quadnum( const int,
  53.              const int );
  54.     quadnum( const dbllong & );
  55.     quadnum( const dbllong &,
  56.              const int );
  57.     quadnum( const double );
  58.     quadnum( const long );
  59.     quadnum( const quadlong & );
  60.     quadnum( const char* );
  61.     quadnum( const FCWString & );
  62.     quadnum( const quadnum & );
  63.     virtual ~quadnum();
  64.  
  65.     FCWString asString() const;
  66.  
  67.     quadnum & operator = ( const quadnum & );
  68.     quadnum & operator = ( const int );
  69.     quadnum & operator = ( const dbllong & );
  70.     quadnum & operator = ( const quadlong & );
  71.     quadnum & operator = ( const double );
  72.     quadnum & operator = ( const char* );
  73.     quadnum & operator = ( const FCWString & );
  74.  
  75.     const quadnum & operator + () const;
  76.     quadnum operator - () const;
  77.  
  78.     quadnum & operator += ( const quadnum & );
  79.     quadnum & operator -= ( const quadnum & );
  80.     quadnum & operator *= ( const quadnum & );
  81.     quadnum & operator /= ( const quadnum & );
  82.     quadnum & operator %= ( const quadnum & );
  83.  
  84.     /*---------------------------------------------------------------------*/
  85.     /*  quadnum binary operator                                            */
  86.     /*---------------------------------------------------------------------*/
  87.     friend quadnum operator + ( const quadnum &,
  88.                                 const quadnum & );
  89.     friend quadnum operator - ( const quadnum &,
  90.                                 const quadnum & );
  91.     friend quadnum operator * ( const quadnum &,
  92.                                 const quadnum & );
  93.     friend quadnum operator / ( const quadnum &,
  94.                                 const quadnum & );
  95.     friend quadnum operator % ( const quadnum &,
  96.                                 const quadnum & );
  97.  
  98.     /*---------------------------------------------------------------------*/
  99.     /*  quadnum relational operator                                        */
  100.     /*---------------------------------------------------------------------*/
  101.     friend int operator == ( const quadnum &,
  102.                              const quadnum & );
  103.     friend int operator != ( const quadnum &,
  104.                              const quadnum & );
  105.     friend int operator < ( const quadnum &,
  106.                             const quadnum & );
  107.     friend int operator <= ( const quadnum &,
  108.                              const quadnum & );
  109.     friend int operator > ( const quadnum &,
  110.                             const quadnum & );
  111.     friend int operator >= ( const quadnum &,
  112.                              const quadnum & );
  113.  
  114.     /*---------------------------------------------------------------------*/
  115.     /*  quadnum functions to extract value                                 */
  116.     /*---------------------------------------------------------------------*/
  117.     short shortValue( const int ) const;
  118.     short shortValueRounded( const int ) const;
  119.  
  120.     long longValue( const int ) const;
  121.     long longValueRounded( const int ) const;
  122.  
  123.     dbllong dbllongValue( const int ) const;
  124.     dbllong dbllongValueRounded( const int ) const;
  125.  
  126.     FCWString decStrOutput( const int,
  127.                             const int,
  128.                             const decStrFmtOpt = WSign ) const;
  129.  
  130.     void decfmt( char*,
  131.                  const int,
  132.                  const int,
  133.                  const int ) const;
  134.     void decfmtRounded( char*,
  135.                         const int,
  136.                         const int,
  137.                         const int ) const;
  138.  
  139.     friend ostream & operator << ( ostream &,
  140.                                    const quadnum & );
  141.     friend TraceFile & operator << ( TraceFile &,
  142.                                      const quadnum & );
  143.  
  144.     /*---------------------------------------------------------------------*/
  145.     /*  other functions                                                    */
  146.     /*---------------------------------------------------------------------*/
  147.     void setShift( const int );
  148.     int getShift() const;
  149.  
  150.     quadnum & negate();
  151.     quadnum & normalize( const int );
  152.     quadnum & round( const int );
  153.     quadnum & absolute();
  154.  
  155.     static void initConstants();
  156.  
  157.   private:
  158.     quadnum & truncate();
  159.     OverflowType checkMax();
  160.  
  161.     int    _shift;
  162.     void*  pData;
  163. };
  164.  
  165. inline
  166. int operator != ( const quadnum & aQuadnum1,
  167.                   const quadnum & aQuadnum2 )
  168. {
  169.    return (!( aQuadnum1 == aQuadnum2 ));
  170. }
  171.  
  172. inline
  173. int operator <= ( const quadnum & aQuadnum1,
  174.                   const quadnum & aQuadnum2 )
  175. {
  176.    return (!( aQuadnum1 > aQuadnum2 ));
  177. }
  178.  
  179. inline
  180. int operator >= ( const quadnum & aQuadnum1,
  181.                   const quadnum & aQuadnum2 )
  182. {
  183.    return (!( aQuadnum1 < aQuadnum2 ));
  184. }
  185.  
  186. #endif
  187.