95 lines
2.7 KiB
C++
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
|