178 lines
5.7 KiB
C++
178 lines
5.7 KiB
C++
// ==========================================================================
|
|
// Class Specification : COXInteger
|
|
// ==========================================================================
|
|
|
|
// Header file : OXInteger.h
|
|
|
|
// Version: 9.3
|
|
|
|
// This software along with its related components, documentation and files ("The Libraries")
|
|
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
|
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
|
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
|
// to obtain this file, or directly from our office. For a copy of the license governing
|
|
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
|
|
|
// //////////////////////////////////////////////////////////////////////////
|
|
|
|
// Properties:
|
|
// NO Abstract class (does not have any objects)
|
|
// NO Derived from
|
|
|
|
// NO Is a Cwnd.
|
|
// NO Two stage creation (constructor & Create())
|
|
// NO Has a message map
|
|
// NO Needs a resource (template)
|
|
|
|
// NO Persistent objects (saveable on disk)
|
|
// NO Uses exceptions
|
|
|
|
// //////////////////////////////////////////////////////////////////////////
|
|
|
|
// Desciption :
|
|
// This class encapsulates a (64-bit) integer. It supplies functionality
|
|
// to convert from one radix to another (e.g. bianry to hex).
|
|
// The internal representation is always decimal.
|
|
// Apart from this is can also insert thousand seperators.
|
|
|
|
// Remark:
|
|
// This class has a constructor accepting a number (LONGLONG) and a conversion
|
|
// operator producing the number.
|
|
|
|
// Prerequisites (necessary conditions):
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __OXINTEGER_H__
|
|
#define __OXINTEGER_H__
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include "OXDllExt.h"
|
|
|
|
|
|
class OX_CLASS_DECL COXInteger
|
|
{
|
|
// Data members -------------------------------------------------------------
|
|
protected:
|
|
// ... Note : This protected data must be the first member
|
|
LONGLONG m_nDecimal;
|
|
|
|
public:
|
|
static const LONGLONG m_nMinNumber;
|
|
// --- The minimum (negative) value of this number object
|
|
static const LONGLONG m_nMaxNumber;
|
|
// --- The maximum (positive) value of this number object
|
|
|
|
static const int m_nMinRadix;
|
|
// --- The minimum valid radix of this number object
|
|
static const int m_nMaxRadix;
|
|
// --- The maximum valid radix of this number object
|
|
|
|
static const int m_nMaxStringNumberLength;
|
|
// --- The maximum length of a string representation of this object
|
|
// (including terminating zero)
|
|
|
|
static TCHAR m_cDefaultSeparator;
|
|
// --- The default (thousand) separator
|
|
|
|
protected:
|
|
static LPCTSTR m_pszDigits;
|
|
static LPCTSTR m_pszMinusDigits;
|
|
|
|
private:
|
|
|
|
// Member functions ---------------------------------------------------------
|
|
public:
|
|
COXInteger(LONGLONG nNumber = 0);
|
|
// --- In : nNumber : The (decimal) number value
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Constructs the object
|
|
|
|
COXInteger(LPCTSTR pszNumber, int nRadix = 10);
|
|
// --- In : pszNumber : The text representation of the number value
|
|
// nRadix : the radix of the representation
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Constructs the object
|
|
|
|
CString GetStringNumber(int nRadix = 10, BOOL bSeparated = FALSE,
|
|
TCHAR cSeparator = _T('\0'), int nGroupLength = 3) const;
|
|
// --- In : nRadix : The radix of the requested representation
|
|
// bSeparated : Whether a (thousand) separator should be used
|
|
// cSeparator : The character used to separate, when _T('\0') is specified
|
|
// the default thousand separator will be used
|
|
// nGroupLength : The length of a groupthat can be separated.
|
|
// --- Out :
|
|
// --- Returns : The text representation of this number (or empty otherwise)
|
|
// --- Effect :
|
|
|
|
void SetStringNumber(LPCTSTR pszNumber, int nRadix = 10);
|
|
// --- In : pszNumber : The text representation of the number value
|
|
// nRadix : the radix of the representation
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Sets a new number value
|
|
// Invalid charaters will be skipped
|
|
|
|
LONGLONG GetNumber() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : The (decimal) number value of this object
|
|
// --- Effect :
|
|
|
|
void SetNumber(LONGLONG nNumber);
|
|
// --- In : nNumber : The new (decimal) number value for this object
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect :
|
|
|
|
operator LONGLONG() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : The (decimal) number value of this object
|
|
// --- Effect : Conversion operator
|
|
|
|
void Empty();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Assigns 0 to this object
|
|
|
|
BOOL IsEmpty() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : Whether the current number value of this object is 0 or not
|
|
// --- Effect :
|
|
|
|
virtual ~COXInteger();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Destructor of the object
|
|
|
|
static CString ThousandSeparated(LPCTSTR pszOriginalNumberText,
|
|
TCHAR cSeparator = _T('\0'), int nGroupLength = 3);
|
|
// --- In : pszOriginalNumberText : The number text into which separator characters should be inserted
|
|
// cSeparator : The separator character (or _T('\0') for default thousand separator)
|
|
// nGroupLength : The length (in characters) of a group (e.g. 3 for thousand)
|
|
// --- Out :
|
|
// --- Returns : The separated number representation
|
|
// --- Effect : This function inserts a separator for each group of the specified
|
|
// length. Groups are forms from the end to the beginning of the string
|
|
|
|
protected:
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
// Include inline functions
|
|
#include "OXInteger.inl"
|
|
|
|
#endif // __OXINTEGER_H__
|
|
// ==========================================================================
|