Files
Sun1602/Tools/SunUpdateManager/UpdateCommon/KeyGenerator.cpp
T
2022-10-26 12:25:11 +08:00

90 lines
1.9 KiB
C++

#include "StdAfx.h"
#include ".\keygenerator.h"
KeyGenerator::KeyGenerator(void)
{
m_dwStartKey = 0;
m_dwEndKey = 0;
}
KeyGenerator::~KeyGenerator(void)
{
}
//dwStartKey must over than 0
VOID KeyGenerator::Init( DWORD dwStartKey, DWORD dwEndKey )
{
// 해당 키 값에 0이면 사용안함, 1이면 사용중.
for( DWORD i = dwStartKey; i < dwEndKey; i++ )
m_mapKeyPool.insert( std::make_pair( i, FALSE ) );
m_dwStartKey = dwStartKey;
m_dwEndKey = dwEndKey;
}
//유일한 키를 할당 받는다.
BOOL KeyGenerator::AllocKey( DWORD& dwKey )
{
if( m_mapKeyPool.empty() )
return FALSE;
MAPKEY_ITER iter = m_mapKeyPool.begin();
dwKey = (*iter).first;
m_mapKeyPool.erase( iter );
return TRUE;
}
//해당키를 할당 한다. 풀에서 꺼낸다.
BOOL KeyGenerator::RestoreKey( DWORD dwKey )
{
if( dwKey < m_dwStartKey || dwKey > m_dwEndKey )
return FALSE;
// 현재 이 키값이 있는지 없는지 확인해 봐야 한다.
MAPKEY_ITER iter = m_mapKeyPool.find( dwKey );
//키가 풀에 있는지 검사. 풀에 있으면,
if( iter != m_mapKeyPool.end() )
m_mapKeyPool.erase( iter );
else
return FALSE;
return TRUE;
}
//해당키를 반납하다.
BOOL KeyGenerator::FreeKey( DWORD dwKey )
{
if( dwKey < m_dwStartKey || dwKey > m_dwEndKey )
return FALSE;
// 현재 이 키값이 있는지 없는지 확인해 봐야 한다.
MAPKEY_ITER iter = m_mapKeyPool.find( dwKey );
//키가 풀에 있는지 검사.
if( iter == m_mapKeyPool.end() ) // 풀에 없으면
m_mapKeyPool.insert( std::make_pair( dwKey, 0) );
else // 풀에 있으면... 이미 반납되어 있으므로..
return FALSE;
return TRUE;
}
//풀에 주어진 키가 있는지 찾는다.
BOOL KeyGenerator::FindKey( DWORD dwKey )
{
if( dwKey < m_dwStartKey || dwKey > m_dwEndKey )
return FALSE;
// 현재 이 키값이 있는지 없는지 확인해 봐야 한다.
MAPKEY_ITER iter = m_mapKeyPool.find( dwKey );
//키가 풀에 있는지 검사.
if( iter != m_mapKeyPool.end() ) // 풀에 있으면,
return TRUE;
else // 풀에 없으면..
return FALSE;
}