90 lines
1.9 KiB
C++
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;
|
|
}
|
|
|