/*
* Copyright (C) 2012 Yee Young Han (http://blog.naver.com/websearch)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "StringMap.h"
#include "MemoryDebug.h"
CStringMap::CStringMap()
{
}
CStringMap::~CStringMap()
{
}
/**
* @ingroup SipPlatform
* @brief ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ¹®ÀÚ¿ Ű, °ªÀ» ÀúÀåÇÑ´Ù.
* @param pszKey ¹®ÀÚ¿ Ű
* @param pszValue ¹®ÀÚ¿ °ª
* @returns ¼º°øÇϸé true ¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é false ¸¦ ¸®ÅÏÇÑ´Ù.
*/
bool CStringMap::Insert( const char * pszKey, const char * pszValue )
{
STRING_MAP::iterator itMap;
bool bRes = false;
if( pszKey == NULL ) return false;
if( pszValue == NULL ) pszValue = "";
m_clsMutex.acquire();
itMap = m_clsMap.find( pszKey );
if( itMap == m_clsMap.end() )
{
m_clsMap.insert( STRING_MAP::value_type( pszKey, pszValue ) );
bRes = true;
}
m_clsMutex.release();
return bRes;
}
/**
* @ingroup SipPlatform
* @brief ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ¹®ÀÚ¿ ۰¡ Á¸ÀçÇÏ´ÂÁö °Ë»öÇÑ´Ù.
* @param pszKey ¹®ÀÚ¿ Ű
* @returns ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ¹®ÀÚ¿ ۰¡ Á¸ÀçÇϸé true ¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é false ¸¦ ¸®ÅÏÇÑ´Ù.
*/
bool CStringMap::Select( const char * pszKey )
{
STRING_MAP::iterator itMap;
bool bRes = false;
if( pszKey == NULL ) return false;
m_clsMutex.acquire();
itMap = m_clsMap.find( pszKey );
if( itMap != m_clsMap.end() )
{
bRes = true;
}
m_clsMutex.release();
return bRes;
}
/**
* @ingroup SipPlatform
* @brief ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ¹®ÀÚ¿ ۰¡ Á¸ÀçÇÏ´ÂÁö °Ë»öÇÑ´Ù.
* @param pszKey ¹®ÀÚ¿ Ű
* @param strValue Ű¿¡ ´ëÇÑ °ªÀ» ÀúÀåÇÒ º¯¼ö
* @returns ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ¹®ÀÚ¿ ۰¡ Á¸ÀçÇϸé true ¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é false ¸¦ ¸®ÅÏÇÑ´Ù.
*/
bool CStringMap::Select( const char * pszKey, std::string & strValue )
{
STRING_MAP::iterator itMap;
bool bRes = false;
strValue.clear();
if( pszKey == NULL ) return false;
m_clsMutex.acquire();
itMap = m_clsMap.find( pszKey );
if( itMap != m_clsMap.end() )
{
strValue = itMap->second;
bRes = true;
}
m_clsMutex.release();
return bRes;
}
/**
* @ingroup SipPlatform
* @brief ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ¹®ÀÚ¿ ۰¡ Á¸ÀçÇÏ¸é »èÁ¦ÇÑ´Ù.
* @param pszKey ¹®ÀÚ¿ Ű
* @returns ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ¹®ÀÚ¿ ۰¡ Á¸ÀçÇϸé true ¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é false ¸¦ ¸®ÅÏÇÑ´Ù.
*/
bool CStringMap::Delete( const char * pszKey )
{
STRING_MAP::iterator itMap;
bool bRes = false;
if( pszKey == NULL ) return false;
m_clsMutex.acquire();
itMap = m_clsMap.find( pszKey );
if( itMap != m_clsMap.end() )
{
m_clsMap.erase( itMap );
bRes = true;
}
m_clsMutex.release();
return bRes;
}
/**
* @ingroup SipPlatform
* @brief ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ÀúÀåµÈ ¹®ÀÚ¿ °³¼ö¸¦ ¸®ÅÏÇÑ´Ù.
* @returns ¹®ÀÚ¿ ¸Ê ÀڷᱸÁ¶¿¡ ÀúÀåµÈ ¹®ÀÚ¿ °³¼ö¸¦ ¸®ÅÏÇÑ´Ù.
*/
int CStringMap::GetCount( )
{
int iCount;
m_clsMutex.acquire();
iCount = (int)m_clsMap.size();
m_clsMutex.release();
return iCount;
}
/**
* @ingroup SipPlatform
* @brief ÀڷᱸÁ¶¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ ¸ðµÎ »èÁ¦ÇÑ´Ù.
*/
void CStringMap::DeleteAll( )
{
m_clsMutex.acquire();
m_clsMap.clear();
m_clsMutex.release();
}