#ifndef _PARSE_LOG_H_ #define _PARSE_LOG_H_ #include // Àü¹æ ÂüÁ¶ namespace GAMELOG { struct sLogBase; } class CParseLog { public: typedef std::vector LogPtrArray; CParseLog(); ~CParseLog(); // ÆÄÀÏÀ» ¿­°í ·ÎµåÇÑ ´ÙÀ½, ³»¿ëÀ» ºÐ¼®Çؼ­ ³Ö´Â´Ù. ½ÇÆÐ½Ã ¿¡·¯ ·Î±×¸¦ Ãâ·ÂÇÑ´Ù. bool LoadFile(const char* szFileName); void Destroy(); const LogPtrArray& GetLogPtrArray() const { return m_LogPtrArray; } // Process. ÇÔ¼öÀÚ¸¦ °ªÀ¸·Î ¹Þ´Â °Í¿¡ ÁÖÀÇÇÑ´Ù. template void Process(FnProcess fnProcess) { std::for_each(m_LogPtrArray.begin(), m_LogPtrArray.end(), fnProcess); } // °Ë»ö(TotalSet¿¡¼­ Result¸®ÅÏ) template void Find(LogPtrArray& Result, FnFind fnFind) { Result.clear(); Result.reserve(m_LogPtrArray.size()); for(LogPtrArray::iterator itr = m_LogPtrArray.begin(); itr != m_LogPtrArray.end(); ++itr) { if(fnFind(*itr)) { Result.push_back(*itr); } } } // °Ë»ö(Source¿¡¼­ »Ì¾Æ³»¼­ Result¿¡ ¸®ÅÏ) template static void Find(const LogPtrArray& Source, LogPtrArray& Result, FnFind fnFind) { Result.clear(); Result.reserve(Source.size()); for(LogPtrArray::const_iterator itr = Source.begin(); itr != Source.end(); ++itr) { if(fnFind(*itr)) { Result.push_back(*itr); } } } private: bool Parse(); char* m_lpRawLog; unsigned long m_dwRawLogSize; LogPtrArray m_LogPtrArray; }; #endif