InitConfigFileParser.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef InitConfigFileParser_H
  14. #define InitConfigFileParser_H
  15. #include <ndb_global.h>
  16. #include <Properties.hpp>
  17. #include <ConfigValues.hpp>
  18. class Config;
  19. class ConfigInfo;
  20. /**
  21.  * @class InitConfigFileParser
  22.  * @brief Reads initial config file and returns Config object
  23.  * 
  24.  * This class contains one public method InitConfigFileParser::parseConfig, 
  25.  * which reads an initial configuration file and returns a Config 
  26.  * object if the config file has correct syntax and semantic. 
  27.  */
  28. class InitConfigFileParser {
  29.   FILE * m_errstream;
  30. public:
  31.   /**
  32.    *   Constructor
  33.    */
  34.   InitConfigFileParser(FILE * errstream = stdout);
  35.   ~InitConfigFileParser();
  36.   /**
  37.    *   Reads the initial configuration file, checks syntax and semantic
  38.    *   and stores internally the values of all parameters.
  39.    *
  40.    *   @returns Config or NULL on failure
  41.    *   @note must be freed by caller
  42.    */
  43.   Config * parseConfig(FILE * file);
  44.   Config * parseConfig(const char * filename);
  45.   /**
  46.    * Parser context struct
  47.    */
  48.   enum ContextSectionType { Undefined, Section, DefaultSection };
  49.   /**
  50.    *   Context = Which section in init config file we are currently parsing
  51.    */
  52.   struct Context {
  53.     Context(const ConfigInfo *, FILE * out);
  54.     ~Context();
  55.     ContextSectionType  type; ///< Section type (e.g. default section,section)
  56.     char          fname[256]; ///< Section name occuring in init config file
  57.     char          pname[256]; ///< Section name stored in properties object
  58.     Uint32          m_lineno; ///< Current line no in config file
  59.     Uint32   m_sectionLineno; ///< Where did current section start
  60.     const ConfigInfo * m_info;           // The config info
  61.     Properties * m_config;               // The config object
  62.     Properties * m_defaults;             // The user defaults
  63.     
  64.     Properties       * m_currentSection; // The current section I'm in
  65.     const Properties * m_userDefaults;   // The defaults of this section
  66.     const Properties * m_systemDefaults; // The syst. defaults for this section
  67.     const Properties * m_currentInfo;    // The "info" for this section
  68.     
  69.     Properties         m_userProperties; // User properties (temporary values)
  70.     ConfigValuesFactory m_configValues;  //
  71.   public:
  72.     FILE * m_errstream;
  73.     void reportError(const char * msg, ...);
  74.     void reportWarning(const char * msg, ...);
  75.   };
  76.   static bool convertStringToUint64(const char* s, Uint64& val, Uint32 log10base = 0);
  77.   static bool convertStringToBool(const char* s, bool& val);
  78. private:
  79.   /**
  80.    *   Check if line only contains space/comments
  81.    *   @param   line: The line to check
  82.    *   @return  true if spaces/comments only, false otherwise
  83.    */
  84.   bool isEmptyLine(const char* line) const;
  85.   /**
  86.    *   Checks if line contains a section header
  87.    *   @param   line:  String to search
  88.    *   @return  section header if matching some section header, NULL otherwise
  89.    */
  90.   char* parseSectionHeader(const char* line) const;
  91.   /**
  92.    *   Checks if line contains a default header
  93.    *   @param   line:  String to search
  94.    *   @return  section header if matching some section header, NULL otherwise
  95.    */
  96.   char* parseDefaultSectionHeader(const char* line) const;
  97.   
  98.   bool parseNameValuePair(Context&, const char* line);
  99.   bool storeNameValuePair(Context&, const char* fname, const char* value);
  100.   
  101.   bool storeSection(Context&);
  102.   const Properties* getSection(const char * name, const Properties* src); 
  103.   
  104.   /**
  105.    *   Information about parameters (min, max values etc)
  106.    */
  107.   ConfigInfo* m_info;
  108. };
  109. #endif // InitConfigFileParser_H