/*************************************************************************** Config File Parser Class ----------------------------------------- begin : 2010/02/27 copyright : (C) 2005 SolutionBox Inc. author : Service 1 Team email : svc1@solbox.com version : 1.0 CopyRight(C) 2005 SolutionBox Inc. All Rights reserved. Redistribution and use in source and binary forms, with or with out modification, are not permitted in outside of SolutionBox Inc. ***************************************************************************/ #ifndef __LIBRARY_CONFIG_H__ #define __LIBRARY_CONFIG_H__ #include #include #include using namespace std; #define CONFIG_DEFAULT_KEY_DELIMITER "=" #define CONFIG_DEFAULT_VALUE_DELIMITER "," /// @brief Config class /// 1. config ÆÄÀÏÀÇ ³»¿ëÀ» ÆÄ½Ìó¸®ÇÏ¿© °¢ Section, Key ¿¡ ÇØ´çÇÏ´Â °ªÀ» ¹Ýȯó¸® /// 2. config ÆÄÀÏÀº [section] ´ÜÀ§·Î ±¸ºÐµÈ´Ù. /// 3. config ÆÄÀÏÀº key=value ·Î ±¸ºÐ°¡´ÉÇϸç ÀÌ´Â Delimiter ¼³Á¤À» ÅëÇØ º¯°æ°¡´ÉÇÏ´Ù. /// 4. value °ªÀÌ ´ÙÁßÀ¸·Î Á¸ÀçÇÏ´Â °æ¿ì "," °ªÀ» ÅëÇØ ±¸ºÐ°¡´É, Delimiter º¯°æ½Ã ´Ù¸¥ °ªµµ »ç¿ë°¡´ÉÇÔ. /// 5. config ÆÄÀϻ󿡼­ "#" ·Î ½ÃÀÛÇÏ´Â ¹®ÀÚ¿­Àº ¶óÀÎ ³¡±îÁö ÁÖ¼®À¸·Î 󸮵ȴÙ. /// 6. ƯÁ¤ Key °ª¿¡ ´ëÇÑ ´ÙÁß value °ª Á¶È¸´Â vector À» ÅëÇØ ¼öÇàÇÑ´Ù. /// 7. ¸¸¾à ´ÙÁß value °ªÀÌ Á¸Àç½Ã string À¸·Î ¹Ýȯ¹ÞÀ» °æ¿ì ÇØ´ç Row °¡ Åë°·Î ¹ÝȯµÈ´Ù. /// 8. º» °´Ã¼´Â Open , Clear ÇÔ¼ö°¡ È£ÃâµÇ±âÀü±îÁö ÀÌÀü Config Á¤º¸°¡ ÀúÀåµÈ´Ù. class Config { private: /// @brief config information saved variable // string : section data // vector : key=value data map< string, vector< string> > m_configData; /// @brief Key, Value ±¸ºÐÀÚ ÀúÀå º¯¼ö string m_keyDelimiter; string m_valueDelimiter; public: /// @brief constructor Config(); /// @brief destructor ~Config(); /// @brief ÁöÁ¤µÈ Config ÆÄÀÏÀÇ ¸ðµç Á¤º¸¸¦ ÀÐ¾î ³»ºÎ º¯¼ö¿¡ ÀúÀåó¸® /// @param path [in] Config file ÀÇ Àüü °æ·ÎÁ¤º¸( C ¹è¿­ Áö¿øÀ» À§ÇØ & »ç¿ë¾ÈÇÔ) /// @return On success return true, otherwise return false bool Open( const string path ); /// @brief Config ¸â¹ö º¯¼ö¿¡ ÀúÀåµÈ µ¥ÀÌÅÍ »èÁ¦Ã³¸®. /// @return void void Clear(); /// @brief ÇØ´ç Section, Key ¿¡ ÇØ´çÇÏ´Â value °ªÀ» ã¾Æ ¹Ýȯ /// @param section [in] ã°íÀÚ ÇÏ´Â Section °ª /// @param key [in] ã°íÀÚ ÇÏ´Â key °ª /// @param value [out] ÇØ´ç Section, Key ¿¡ ÇØ´çÇÏ´Â value °ªÀ» ÀúÀåÇϱâ À§ÇÑ º¯¼ö /// @return On success return true, otherwise return false bool GetConfig( const string section, const string key, string& value ); /// @brief ÇØ´ç Section, Key ¿¡ ÇØ´çÇÏ´Â value Array °ªÀ» ã¾Æ ¹Ýȯ /// @param section [in] ã°íÀÚ ÇÏ´Â Section °ª /// @param key [in] ã°íÀÚ ÇÏ´Â key °ª /// @param value [out] ÇØ´ç Section, Key ¿¡ ÇØ´çÇÏ´Â value °ªÀ» ÀúÀåÇϱâ À§ÇÑ ¹è¿­ /// @return On success return true, otherwise return false bool GetConfig( const string section, const string key, vector< string >& value ); /// @brief Key, Value Delimiter Get ÇÔ¼ö /// @param key [out] key delimiter °ª /// @param value [out] value delimiter °ª void GetDelimiter( string& key, string& value ) { key = m_keyDelimiter; value = m_valueDelimiter; } // BUG 2010-12-06 huibong // string& value = CONFIG_DEFAULT_VALUE_DELIMITER °ªÀº ¹®¹ý»ó ¿À·ù ±¸¹®ÀÓ. // gcc 3.4.6 ¹öÀü¿¡¼­´Â Compile µÇ³ª gcc 4.4.5 ¿¡¼­´Â error ·Î ó¸®µÇ¾î ¼öÁ¤Ã³¸®ÇÔ. /// @brief Key, Value Delimiter Set ÇÔ¼ö /// @param key [out] key delimiter °ª /// @param value [out] value delimiter °ª, ÁöÁ¤ÇÏÁö ¾ÊÀ» °æ¿ì Default °ªÀÌ »ç¿ëµÊ. void SetDelimiter( string& key, string value = CONFIG_DEFAULT_VALUE_DELIMITER ) { m_keyDelimiter = key; m_valueDelimiter = value; } protected: /// @brief Config ¸â¹ö º¯¼ö¿¡ ÀúÀåµÈ µ¥ÀÌÅÍ Áß ÇØ´ç Section ¿¡ ÇØ´çÇÏ´Â µ¥ÀÌÅÍ ¹Ýȯ. /// @param section [in] section ¸í /// @param configData [out] ÇØ´ç Section ¿¡¼­ ÀÐÀº Cofig Á¤º¸¸¦ ÀúÀåÇÒ string ¹è¿­ /// @return On success return true, otherwise return false bool Find( const string& section, vector& configData ); }; #endif /* __LIBRARY_CONFIG_H__ */