#include "stdafx.h" #include "cachebuffer.h" cCacheBuffer::cCacheBuffer() : mpKeyPool(0), mpKeyTable(0), mpSearchKey(0) { mKeyMemSize = 0; mReservedKeyNum = 0; mMaxContainerNum = 0; mUsedContainerNum = 0; } cCacheBuffer::~cCacheBuffer() { Cleanup(); } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : Initialize( unsigned long maxContainerNum, unsigned long maxStringSize ) * ¸ñ Àû : ij½¬ °ü¸® ¸Þ¸ð¸®¸¦ ÇÒ´ç * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ bool cCacheBuffer::Initialize( unsigned long maxContainerNum, unsigned long maxStringSize ) { mMaxContainerNum = maxContainerNum; mKeyMemSize = sizeof(sCacheKey) + (maxStringSize-1)*sizeof(TCHAR); /// Key ¸Þ¸ð¸® »ý¼º mpKeyPool = new char[mKeyMemSize*mMaxContainerNum]; ::memset( mpKeyPool, 0, mKeyMemSize*mMaxContainerNum ); /// Á¦°øµÇ¾îÁú Key Å×À̺í mpKeyTable = new sCacheKey*[mMaxContainerNum]; ::memset( mpKeyTable, 0, sizeof(sCacheKey*)*mMaxContainerNum ); /// KeyÀÇ ¸Þ¸ð¸® ÁÖ¼Ò ÇÒ´ç ¹× ¹ÌÁ¦°ø °¹¼ö ¼ÂÆÃ for( unsigned long i=0; i( maxStringSize ); mpSearchKey = (sCacheKey*) new char[mKeyMemSize]; return true; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : Cleanup() * ¸ñ Àû : ÇÒ´çµÈ ¸Þ¸ð¸® ÇØÁ¦ * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cCacheBuffer::Cleanup() { SAFE_DELETE_ARRAY(mpSearchKey); if( mpHash ) { mpHash->RemoveAll(); NiDelete mpHash; } SAFE_DELETE_ARRAY(mpKeyTable); SAFE_DELETE_ARRAY(mpKeyPool); ::memset( this, 0, sizeof(cCacheBuffer) ); } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : InsertValue( char* string, unsigned long strSize, HFONT hFont, unsigned long color, void* pValue ) * ¸ñ Àû : ÄÁÅ×ÀÌ³Ê Ãß°¡ * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void* cCacheBuffer::InsertValue( LPTSTR string, unsigned long strSize, HFONT hFont, unsigned long color, void* pValue ) { /// ÀúÀå ÄÁÅ×ÀÌ³Ê Å°°ª »ý¼º.. sCacheKey* pKey = AllocKeyMem(); if( !pKey ) return NULL; pKey->hFont = hFont; pKey->strSize = strSize; pKey->color = color; ::_tcsncpy_s( pKey->szString, strSize+1, string, strSize ); pKey->szString[strSize] = 0; mpHash->SetAt( pKey, pValue ); mUsedContainerNum++; return pKey; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : DeleteValue( void* pHashHandle ) * ¸ñ Àû : ÄÁÅ×ÀÌ³Ê Á¦°Å * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cCacheBuffer::DeleteValue( void* pHashHandle ) { sCacheKey* pKey = (sCacheKey*)pHashHandle; if( mpHash->RemoveAt( pKey ) == false ) { assert(0); } FreeKeyMem( pKey ); } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : SearchValue( char* string, unsigned long strSize, HFONT hFont, unsigned long color ) * ¸ñ Àû : »ç¿ë ¸Þ¸ð¸® °Ë»ö * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void* cCacheBuffer::SearchValue( LPTSTR string, unsigned long strSize, HFONT hFont, unsigned long color ) { mpSearchKey->color = color; mpSearchKey->hFont = hFont; mpSearchKey->strSize = strSize; ::_tcsncpy_s( mpSearchKey->szString, strSize+1, string, strSize ); mpSearchKey->szString[strSize] = 0; void* rValue = NULL; if( mpHash->GetAt( mpSearchKey, rValue ) == false ) return 0; return rValue; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : AllocKeyMem() * ¸ñ Àû : ¸Þ¸ð¸® ÇÒ´ç ³»ºÎ ÇÔ¼ö * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ sCacheKey* cCacheBuffer::AllocKeyMem() { /// sCacheKey* pKey; // pKey = mpKeyTable[0]; /// // mpKeyTable[0] = mpKeyTable[mReservedKeyNum-1]; // mReservedKeyNum--; pKey = mpKeyTable[mReservedKeyNum-1]; mReservedKeyNum--; return pKey; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : FreeKeyMem( sCacheKey* pKey ) * ¸ñ Àû : ¸Þ¸ð¸® ÇØÁ¦ ³»ºÎ ÇÔ¼ö * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cCacheBuffer::FreeKeyMem( sCacheKey* pKey ) { mpKeyTable[mReservedKeyNum] = pKey; mReservedKeyNum++; }