windows-nt/Source/XPSP1/NT/shell/ext/cscui/filesize.h
2020-09-26 16:20:57 +08:00

95 lines
2.7 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: filesize.h
//
//--------------------------------------------------------------------------
#ifndef _INC_CSCVIEW_FILESIZE_H
#define _INC_CSCVIEW_FILESIZE_H
//
// Simple class to convert a file size value to a string formatted for display.
// The display format is the same used by the shell (i.e. "10.5 MB")
//
class FileSize
{
public:
explicit FileSize(ULONGLONG ullSize = 0);
~FileSize(void) { }
FileSize(const FileSize& rhs)
{ *this = rhs; }
FileSize& operator = (const FileSize& rhs);
int Compare(const FileSize& rhs) const
{ return *this > rhs ? 1 : (*this == rhs ? 0 : -1); }
operator ULONGLONG() const
{ return m_ullSize; }
ULONGLONG GetSize(void) const
{ return m_ullSize; }
void GetString(LPTSTR pszOut, UINT cchOut) const
{ TraceAssert(NULL != pszOut); Format(m_ullSize, pszOut, cchOut); }
private:
ULONGLONG m_ullSize; // Size as a number.
static int m_rgiOrders[]; // Array of format string res IDs.
void Format(ULONGLONG ullSize, LPTSTR pszOut, UINT cchOut) const;
void CvtSizeToText(ULONGLONG n, LPTSTR pszBuffer) const;
int StrToInt(LPCTSTR lpSrc) const;
LPTSTR AddCommas(ULONGLONG n, LPTSTR pszResult, int cchResult) const;
bool IsDigit(TCHAR ch) const
{ return (ch >= TEXT('0') && ch <= TEXT('9')); }
friend bool operator == (const FileSize& a, const FileSize& b);
friend bool operator != (const FileSize& a, const FileSize& b);
friend bool operator < (const FileSize& a, const FileSize& b);
friend bool operator <= (const FileSize& a, const FileSize& b);
friend bool operator > (const FileSize& a, const FileSize& b);
friend bool operator >= (const FileSize& a, const FileSize& b);
};
//
// The various comparison operators for FileSize objects.
//
inline bool operator == (const FileSize& a, const FileSize& b)
{
return a.m_ullSize == b.m_ullSize;
}
inline bool operator != (const FileSize& a, const FileSize& b)
{
return !(a == b);
}
inline bool operator < (const FileSize& a, const FileSize& b)
{
return a.m_ullSize < b.m_ullSize;
}
inline bool operator <= (const FileSize& a, const FileSize& b)
{
return (a < b) || (a == b);
}
inline bool operator > (const FileSize& a, const FileSize& b)
{
return !(a < b) && !(a == b);
}
inline bool operator >= (const FileSize& a, const FileSize& b)
{
return (a > b) || (a == b);
}
#endif // _INC_CSCVIEW_FILESIZE_H