143 lines
3.4 KiB
C++
143 lines
3.4 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1995 - 1997 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#ifndef _INTLNUM_H_
|
|
#define _INTLNUM_H_
|
|
|
|
class CIntlNumber : public CObjectPlus
|
|
{
|
|
public:
|
|
CIntlNumber()
|
|
{
|
|
m_lValue = 0L;
|
|
m_fInitOk = TRUE;
|
|
}
|
|
CIntlNumber(LONG lValue)
|
|
{
|
|
m_lValue = lValue;
|
|
m_fInitOk = TRUE;
|
|
}
|
|
CIntlNumber(const CString & str);
|
|
|
|
CIntlNumber(CIntlNumber const &x)
|
|
{
|
|
m_lValue = x.m_lValue;
|
|
m_fInitOk = x.m_fInitOk;
|
|
}
|
|
|
|
CIntlNumber& operator =(CIntlNumber const &x)
|
|
{
|
|
m_lValue = x.m_lValue;
|
|
m_fInitOk = x.m_fInitOk;
|
|
return(*this);
|
|
}
|
|
|
|
public:
|
|
// Assignment Operators
|
|
CIntlNumber& operator =(LONG l);
|
|
CIntlNumber& operator =(const CString &str);
|
|
|
|
// Shorthand operators.
|
|
CIntlNumber& operator +=(const CIntlNumber& num);
|
|
CIntlNumber& operator +=(const LONG l);
|
|
CIntlNumber& operator -=(const CIntlNumber& num);
|
|
CIntlNumber& operator -=(const LONG l);
|
|
CIntlNumber& operator /=(const CIntlNumber& num);
|
|
CIntlNumber& operator /=(const LONG l);
|
|
CIntlNumber& operator *=(const CIntlNumber& num);
|
|
CIntlNumber& operator *=(const LONG l);
|
|
|
|
// Conversion operators
|
|
operator const LONG() const
|
|
{
|
|
return(m_lValue);
|
|
}
|
|
operator const CString() const;
|
|
|
|
public:
|
|
virtual BOOL IsValid() const
|
|
{
|
|
return(m_fInitOk);
|
|
}
|
|
|
|
public:
|
|
static void Reset();
|
|
static void SetBadNumber(CString strBadNumber = "--")
|
|
{
|
|
m_strBadNumber = strBadNumber;
|
|
}
|
|
static CString ConvertNumberToString(const LONG l);
|
|
static LONG ConvertStringToNumber(const CString & str, BOOL * pfOk);
|
|
static CString& GetBadNumber()
|
|
{
|
|
return(m_strBadNumber);
|
|
}
|
|
|
|
private:
|
|
static CString GetThousandSeperator();
|
|
|
|
private:
|
|
static CString m_strThousandSeperator;
|
|
static CString m_strBadNumber;
|
|
|
|
private:
|
|
LONG m_lValue;
|
|
BOOL m_fInitOk;
|
|
|
|
public:
|
|
#ifdef _DEBUG
|
|
friend CDumpContext& AFXAPI operator<<(CDumpContext& dc, const CIntlNumber& num);
|
|
#endif // _DEBUG
|
|
|
|
friend CArchive& AFXAPI operator<<(CArchive& ar, const CIntlNumber& num);
|
|
friend CArchive& AFXAPI operator>>(CArchive& ar, CIntlNumber& num);
|
|
};
|
|
|
|
class CIntlLargeNumber : public CObjectPlus
|
|
{
|
|
public:
|
|
CIntlLargeNumber()
|
|
{
|
|
m_lLowValue = 0L;
|
|
m_lHighValue = 0L;
|
|
m_fInitOk = TRUE;
|
|
}
|
|
CIntlLargeNumber(LONG lHighWord, LONG lLowWord)
|
|
{
|
|
m_lLowValue = lLowWord;
|
|
m_lHighValue = lHighWord;
|
|
m_fInitOk = TRUE;
|
|
}
|
|
CIntlLargeNumber(const CString & str);
|
|
|
|
public:
|
|
// Assignment Operators
|
|
CIntlLargeNumber& operator =(const CString &str);
|
|
operator const CString() { return ConvertNumberToString(); }
|
|
operator CString() { return ConvertNumberToString(); }
|
|
|
|
public:
|
|
virtual LONG GetLowWord() const { return m_lLowValue; }
|
|
virtual LONG GetHighWord() const { return m_lHighValue; }
|
|
virtual BOOL IsValid() const { return(m_fInitOk); }
|
|
|
|
private:
|
|
static CString m_strBadNumber;
|
|
CString ConvertNumberToString();
|
|
void ConvertStringToNumber(const CString & str, BOOL * pfOk);
|
|
|
|
private:
|
|
LONG m_lLowValue;
|
|
LONG m_lHighValue;
|
|
BOOL m_fInitOk;
|
|
};
|
|
|
|
#endif _INTLNUM_H
|