167 lines
3.2 KiB
C++
167 lines
3.2 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
using namespace std;
|
|
|
|
typedef unsigned char byte;
|
|
|
|
//#define MAX_VERSION_COUNT 3
|
|
//#define MAX_VERSION_CHAR_SIZE 128
|
|
|
|
class CVersionInfo
|
|
{
|
|
public:
|
|
CVersionInfo(void);
|
|
CVersionInfo( const CVersionInfo& obj )
|
|
{
|
|
for( int i = 0 ; i < MAX_VERSION_COUNT; i++ )
|
|
m_byVer[i] = obj.m_byVer[i];
|
|
}
|
|
|
|
~CVersionInfo(void);
|
|
|
|
private:
|
|
byte m_byVer[MAX_VERSION_COUNT];
|
|
|
|
public:
|
|
byte GetVersion( int nNum );
|
|
bool SetVersion( int nNum, byte byVer );
|
|
unsigned int GetTotalVersion();
|
|
void Init();
|
|
bool SetVersionFromString( char* pszVersion ); //01.02.03 과 같은 타입의 스트링버전으로 버전세팅
|
|
bool GetStringVersion( char* OUT pszVersion, int nSize );
|
|
|
|
public:
|
|
CVersionInfo& operator=( const CVersionInfo& obj )
|
|
{
|
|
for( int i = 0 ; i < MAX_VERSION_COUNT; i++ )
|
|
m_byVer[i] = obj.m_byVer[i];
|
|
|
|
return *this;
|
|
}
|
|
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
#ifdef __VERSIONEX_CLASS
|
|
#include <tchar.h>
|
|
namespace VersionEx
|
|
{
|
|
class VersionInfoEx
|
|
{
|
|
enum { max_ver_value = 0x00ffffff };
|
|
|
|
public:
|
|
explicit VersionInfoEx( DWORD ver = 0 )
|
|
: m_dwVer( ver), m_bBad( false)
|
|
{
|
|
if( ver > max_ver_value )
|
|
{
|
|
m_bBad = true;
|
|
m_dwVer = 0;
|
|
}
|
|
}
|
|
|
|
VersionInfoEx( const VersionInfoEx& rhs )
|
|
: m_dwVer( rhs.m_dwVer), m_bBad( rhs.m_bBad)
|
|
{ }
|
|
|
|
~VersionInfoEx() { }
|
|
|
|
//.//
|
|
|
|
inline DWORD GetVersion() const { return m_dwVer; }
|
|
|
|
bool GetStringVersion( TCHAR* OUT pszVersion, int nSize ) const
|
|
{
|
|
if( nSize < MAX_PATCH_VER_SIZE )
|
|
return false;
|
|
|
|
memset( m_szVer, 0, nSize);
|
|
_stprintf( pszVersion, _T("%d.%d.%d"), first, middle, last);
|
|
return true;
|
|
}
|
|
|
|
const TCHAR* GetStringVersion() const
|
|
{
|
|
memset( m_szVer, 0, MAX_PATCH_VER_SIZE);
|
|
_stprintf( m_szVer, _T("%d.%d.%d"), first, middle, last);
|
|
|
|
return m_szVer;
|
|
}
|
|
|
|
bool SetVersion( const TCHAR* szVer )
|
|
{
|
|
std::string strVersion( szVer);
|
|
int nCnt = 1;
|
|
std::size_t nPos = 0;
|
|
|
|
m_dwVer = 0;
|
|
BYTE *Ver = reinterpret_cast< BYTE* >( &m_dwVer);
|
|
|
|
while( ( nPos = strVersion.find( '.')) != string::npos )
|
|
{
|
|
string strVer = strVersion.substr( 0, nPos);
|
|
Ver[nCnt] = atoi( strVer.c_str());
|
|
strVersion.erase( 0, nPos + 1);
|
|
nCnt++;
|
|
}
|
|
Ver[nCnt] = atoi( strVersion.c_str());
|
|
|
|
return true;
|
|
}
|
|
|
|
inline bool SetVersion( DWORD ver )
|
|
{ // 정상 값이 아닐경우 0으로 설정
|
|
if( ver > max_ver_value )
|
|
return false;
|
|
else
|
|
{
|
|
m_dwVer = ver;
|
|
return !( m_bBad = false);
|
|
}
|
|
}
|
|
|
|
inline bool IsBad() const { return m_bBad; }
|
|
|
|
operator DWORD() const
|
|
{
|
|
return m_dwVer;
|
|
}
|
|
|
|
bool operator == ( const VersionInfoEx& rhs ) const
|
|
{
|
|
return ( rhs.m_dwVer == m_dwVer);
|
|
}
|
|
|
|
bool operator < ( const VersionInfoEx& rhs ) const
|
|
{
|
|
return ( m_dwVer < rhs.m_dwVer);
|
|
}
|
|
|
|
VersionInfoEx& operator = ( const VersionInfoEx& rhs )
|
|
{
|
|
memcpy( this, &rhs, sizeof( *this));
|
|
return ( *this);
|
|
}
|
|
|
|
private:
|
|
union
|
|
{
|
|
struct
|
|
{ // ex. 1.0.1
|
|
BYTE dummy; // 사용되지 않음
|
|
BYTE first;
|
|
BYTE middle;
|
|
BYTE last;
|
|
};
|
|
|
|
DWORD m_dwVer;
|
|
};
|
|
|
|
bool m_bBad;
|
|
mutable TCHAR m_szVer[MAX_PATCH_VER_SIZE];
|
|
};
|
|
}
|
|
#endif //__VERSIONEX_CLASS
|
|
//////////////////////////////////////////////////////////////////////////
|