/*************************************************************************** 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__ */