#ifndef __PROGRAMCOMMON_TABLE_DATA_H #define __PROGRAMCOMMON_TABLE_DATA_H #pragma once //================================================================================================== // (History) // ½ºÅ©¸³Æ®¸¦ Àо Àüü¸¦ Å×ÀÌºí ±¸Á¶ ÇüÅ·ΠÀúÀå½ÃŰ´Â Ŭ·¡½º // Create : 2006. 11. 23ÀÏ ±Ý¿äÀÏ. // Make By Á¶Àç½Ä // ±ÔÄ¢ : // - ÇØ´ç ½ºÅ©¸³Æ®¿¡¼­ Á¦ÀÏ Ã¹ÁÙÀº(ÁÖ¼®Á¦¿Ü) ¹Ýµå½Ã Çʵå¸íÀ̾î¾ß ÇÑ´Ù. // - ¸ðµç µ¥ÀÌÅÍ´Â ½ºÆ®¸µÀ¸·Î ÀúÀåµÈ´Ù. ==> º¯È¯ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. // - ùÁÙÀÇ ÇÊµå µ¥ÀÌÅ͸¦ Àо ¸®½ºÆ®¿¡ ÀúÀåÈÄ, ½ÇÁ¦ µ¥ÀÌÆ®¸¦ ¸®½ºÆ® °³¼ö¸¸Å­ ¹Ýº¹Çؼ­ ÀÐ¾î µå·Á // ½ÇÁ¦ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù. // - Çʵå¸íÀº LinearHash ·Î ÀúÀåµÇ°í, ³ª¸ÓÁö ½ÇÁ¦ µ¥ÀÌÅÍ´Â ¹è¿­·Î ÀúÀåµÈ´Ù. // - SCRIPT_COLUMN_DATA¿Í BUG_SCRIPT_COLUMN_DATA¸¦ µ¿ÀûÀ¸·Î ÇÏÁö ¾Ê°í, ÀÌ·¸°Ô ¹«½ÄÇÏ°Ô ÇѰÍÀº ¼Óµµ ¶§¹®¿¡ // ¹è¿­·Î À¯Áö Çϱâ À§Çؼ­´Ù. µ¿ÀûÀ¸·Î »çÀÌÁ new¸¦ ½á¼­ ÇÏ¸é µð¹ö±ë½Ã ¼Óµµ°¡ ´À·ÁÁø´Ù. // // - 09.07.12, waverix, code rearrangement // , delete working macro '__NA_000000_20071123_NEW_SCRIPT_PARSING_SYSTEM' // - 09.07.18, waverix, update // //#include //#include //#include //#include //================================================================================================== //================================================================================================== #include #include #include class TableData { #define MAX_FIELD_NAME_SIZE 40 // wchar_t¸¦ »ç¿ëÇÒ °Í °°Áö ¾Ê´Ù. ±× ±Ù°Å·Î Áö±Ý ½ÃÁ¡¿¡´Â È¿¿ë¼ºÀÇ ¹®Á¦°¡ °¡Àå Å©´Ù. static const DWORD MaxScriptDataSize = 12 * 1024 * 1024 * sizeof(char); static const DWORD MaxTokenStreamSize = (DWORD)(MaxScriptDataSize * 4); typedef BYTE DelimiterBuffer[32]; struct ColInfo { DWORD count; char* pRef[1024]; }; struct RowInfo { DWORD count; ColInfo** pRef; }; struct LinePair { char* pLinePtr; ColInfo* pColumns; }; struct LineListNode : public util::__LList { LinePair linePair; }; typedef util::SolarHashTable TABLE_NAME_HASH; public: TableData(); ~TableData() { _UnLoad(); } // void Init(BOOL bBigData = FALSE); void Release() { _UnLoad(); } int GetColSize() const { return (int)m_ColumnCount; } int GetRowSize() const { return (int)m_LineRef.count; } inline const char* FindData(const char* pszColName, const UINT nRow) const; // corresponding TableData Interfaces bool InsertData(UINT nColNum, UINT nRowNum, const char* pszData); INT FindColNumByFieldName(const char* pszFieldName); bool CreateColumn(const char* pszColName, INT nCol); BOOL IsBigData(){ return 0; } // Çö ½ÃÁ¡ ÆÄ½Ì ¸ÅÄ¿´ÏÁòÀº Àüü µ¥ÀÌÅÍ¿¡ ´ëÇÑ À妽º Å×À̺íÀ» ¼³Á¤Çؼ­ Á¢±ÙÇÏ´Â ¹æ½ÄÀÌ´Ù. // µ¥ÀÌÅÍÀÇ ºÐ¼® ½ÃÁ¡¿¡ Å×À̺íÀ» Å©±â¸¦ ÀÚ¿¬½º·´°Ô °è»êÇϴµ¥´Â ºÒÇÊ¿äÇÑ ¿¬»êÀÌ ¿ä±¸µÈ´Ù. // µû¶ó¼­ ÀÚ¿¬½º·´°Ô Çö ½ÃÁ¡ ¿ä±¸µÇ´Â ÃÖ´ëÄ¡¿¡ ¸ÂÃá ´ë±Ô¸ðÀÇ Å×À̺íÀÇ Å©±â¸¦ ¿ä±¸ÇÏ°Ô µÈ´Ù. // CreateEnvironment | DestroyEnvironment´Â ±×°É À§ÇÑ °íÁ¤ ¹öÆÛ¸¦ ¼³Á¤ÇÑ´Ù. static BOOLEAN CreateEnvironment(); // ScriptParserManager Load ½ÃÀÛ ½ÃÁ¡ static BOOLEAN DestroyEnvironment();// ScriptParserManager Load Á¾·á ½ÃÁ¡ BOOLEAN Load(eSCRIPT_CODE script_code, const TCHAR* pszFileName, BOOLEAN use_packfile, const char* packFileName,BOOLEAN is_enc); BOOLEAN LoadBuffer(eSCRIPT_CODE script_code, const BYTE* pBuffer, const DWORD buffer_size); VOID Close() { _UnLoad(); }; void RegisterColumnDelimiters(const char* delimiters); // { space, tab } private: BOOLEAN _OpenFileAndReadBuffer(const char* fileName, BOOLEAN use_packfile, const char* packFileName,BOOLEAN is_enc); BOOLEAN _UnLoad(); BOOLEAN _BuildDictionary(eSCRIPT_CODE scriptCode); //static BOOLEAN _MakeHashInit(); __forceinline char* _RawTokenizer(char* pToken, DelimiterBuffer* delimeters); // _BuildDictionary SequenceStep // LIST CONTROL // changes, f100813.3L, replace an interface to acquire an unique id //DWORD MakeHash(const char* input_str) const; char* m_pBuffer; DWORD m_ColumnCount; DWORD m_LineCount; util::__LList m_Rows; RowInfo m_LineRef; TABLE_NAME_HASH* m_pColumnHash; static BYTE* token_stream_static_; static DWORD* crc_table_static_; static char* file_data_buffer_static_; static DelimiterBuffer* delimiters_static_[2]; static TABLE_NAME_HASH* column_hash_static_; }; inline const char* TableData::FindData(const char* pszColName, const UINT nRow) const { if((nRow < (UINT)m_LineRef.count) == FALSE) return NULL; // changes, f100813.3L, replace an interface to acquire an unique id DWORD hashVal = util::StreamHashKey::GetStringHashKey(pszColName); int col = m_pColumnHash->GetData(hashVal); if(col) return m_LineRef.pRef[nRow]->pRef[col-1]; return NULL; } //================================================================================================== //================================================================================================== #endif //__PROGRAMCOMMON_TABLE_DATA_H