Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Common/vtkLargeInteger.h

Go to the documentation of this file.

    00001 /*=========================================================================
    00002
    00003   Program:   Visualization Toolkit
    00004   Module:    $RCSfile: vtkLargeInteger.h,v $
    00005   Language:  C++
    00006
    00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
    00008   All rights reserved.
    00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    00010
    00011      This software is distributed WITHOUT ANY WARRANTY; without even
    00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    00013      PURPOSE.  See the above copyright notice for more information.
    00014
    00015 =========================================================================*/
    00033 #ifndef __vtkLargeInteger_h
    00034 #define __vtkLargeInteger_h
    00035
    00036 #include "vtkObject.h"
    00037
    00038 class VTK_COMMON_EXPORT vtkLargeInteger
    00039 {
    00040 public:
    00041   vtkLargeInteger(void);
    00042   vtkLargeInteger(long n);
    00043   vtkLargeInteger(unsigned long n);
    00044   vtkLargeInteger(int n);
    00045   vtkLargeInteger(unsigned int n);
    00046   vtkLargeInteger(const vtkLargeInteger& n);
    00047   ~vtkLargeInteger(void);
    00048
    00049   char CastToChar(void) const;
    00050   short CastToShort(void) const;
    00051   int CastToInt(void) const;
    00052   long CastToLong(void) const;
    00053   unsigned long CastToUnsignedLong(void) const;
    00054
    00055   int IsEven(void) const;
    00056   int IsOdd(void) const;
    00057   int GetLength(void) const; // in bits
    00058   int GetBit(unsigned int p) const; // p'th bit (from zero)
    00059   int IsZero() const; // is zero
    00060   int GetSign(void) const; // is negative
    00061
    00062   void Truncate(unsigned int n); // reduce to lower n bits
    00063   void Complement(void); // * -1
    00064
    00065   int operator==(const vtkLargeInteger& n) const;
    00066   int operator!=(const vtkLargeInteger& n) const;
    00067   int operator<(const vtkLargeInteger& n) const;
    00068   int operator<=(const vtkLargeInteger& n) const;
    00069   int operator>(const vtkLargeInteger& n) const;
    00070   int operator>=(const vtkLargeInteger& n) const;
    00071
    00072   vtkLargeInteger& operator=(const vtkLargeInteger& n);
    00073   vtkLargeInteger& operator+=(const vtkLargeInteger& n);
    00074   vtkLargeInteger& operator-=(const vtkLargeInteger& n);
    00075   vtkLargeInteger& operator<<=(int n);
    00076   vtkLargeInteger& operator>>=(int n);
    00077   vtkLargeInteger& operator++(void);
    00078   vtkLargeInteger& operator--(void);
    00079   vtkLargeInteger  operator++(int);
    00080   vtkLargeInteger  operator--(int);
    00081   vtkLargeInteger& operator*=(const vtkLargeInteger& n);
    00082   vtkLargeInteger& operator/=(const vtkLargeInteger& n);
    00083   vtkLargeInteger& operator%=(const vtkLargeInteger& n);
    00084   // no change of sign for following operators
    00085   vtkLargeInteger& operator&=(const vtkLargeInteger& n);
    00086   vtkLargeInteger& operator|=(const vtkLargeInteger& n);
    00087   vtkLargeInteger& operator^=(const vtkLargeInteger& n);
    00088
    00089   vtkLargeInteger operator+(const vtkLargeInteger& n) const;
    00090   vtkLargeInteger operator-(const vtkLargeInteger& n) const;
    00091   vtkLargeInteger operator*(const vtkLargeInteger& n) const;
    00092   vtkLargeInteger operator/(const vtkLargeInteger& n) const;
    00093   vtkLargeInteger operator%(const vtkLargeInteger& n) const;
    00094   // no change of sign for following operators
    00095   vtkLargeInteger operator&(const vtkLargeInteger& n) const;
    00096   vtkLargeInteger operator|(const vtkLargeInteger& n) const;
    00097   vtkLargeInteger operator^(const vtkLargeInteger& n) const;
    00098   vtkLargeInteger operator<<(int n) const;
    00099   vtkLargeInteger operator>>(int n) const;
    00100
    00101   friend ostream& operator<<(ostream& s, const vtkLargeInteger& n);
    00102   friend istream& operator>>(istream& s, vtkLargeInteger& n);
    00103
    00104 private:
    00105   char* Number;
    00106   int Negative;
    00107   unsigned int Sig;
    00108   unsigned int Max;
    00109
    00110   // unsigned operators
    00111   int IsSmaller(const vtkLargeInteger& n) const; // unsigned
    00112   int IsGreater(const vtkLargeInteger& n) const; // unsigned
    00113   void Expand(unsigned int n); // ensure n'th bit exits
    00114   void Contract(); // remove leading 0s
    00115   void Plus(const vtkLargeInteger& n); // unsigned
    00116   void Minus(const vtkLargeInteger& n); // unsigned
    00117 };
    00118
    00119 #endif
    00120
    00121