115 lines
4.4 KiB
C++
115 lines
4.4 KiB
C++
/***************************************************************************
|
|
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 <string>
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
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<string> 을 통해 수행한다.
|
|
/// 7. 만약 다중 value 값이 존재시 string 으로 반환받을 경우 해당 Row 가 통째로 반환된다.
|
|
/// 8. 본 객체는 Open , Clear 함수가 호출되기전까지 이전 Config 정보가 저장된다.
|
|
class Config
|
|
{
|
|
private:
|
|
/// @brief config information saved variable
|
|
// string : section data
|
|
// vector<string> : 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<string>& configData );
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* __LIBRARY_CONFIG_H__ */
|