ComSDK
 Указатель Классы Пространства имен Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Группы Страницы
iniparser.h
1 #ifndef unt_INICover_stlH
2 #define unt_INICover_stlH
3 //===========================================================================
98 // ============================================================================================ //
107 // ============================================================================================ //
116 
122 //========================================================================
123 // A. ДОПОЛНИТЕЛЬНЫЕ ПОДКЛЮЧЕНИЯ (Типы и модули, необходимые для .h - файла)
124 //------------------------------------------------------------------------
125 #include "global_definitions.h"
126 #include "libtools.h"
127 #include "anymap.h"
128 
129 #include <string>
130 #include <fstream>
131 #include <list>
132 #include <set>
133 #include <map>
134 //========================================================================
135 namespace com
136 {
142  namespace ini
143  {
146  {
158  };
159 
162  {
165  };
166 
167  //режим парсинга параметров
168  enum enu_ReadMode
169  {
170  rmDefault,
171  rmRecursive
172  };
173 
175  struct MAC_DLLEXPORT INIRange
176  {
177  double mCur;
178  double mStep;
179  double mMin;
180  double mMax;
181  };
182 
185  {
186  ParamAddress(const std::string& p_section, const std::string& p_paramName)
187  : mParamName(p_paramName)
188  , mSection(p_section)
189  {}
190 
191  std::string mSection;
192  std::string mParamName;
193  };
194 
201  std::string MAC_DLLEXPORT makeSubParam(const std::string& p_param, const std::string& p_subparam);
202 
209  class MAC_DLLEXPORT INIParser
210  {
211  // Cтруктура для хранения данных по одному узлу дерева
212  struct INITreeNode
213  {
214  INITreeNode(const std::map< std::string, std::string >& p_node)
215  : mNodeData(p_node)
216  {}
217 
218  std::map< std::string, std::string > mNodeData;
219  };
220 
221  struct ParamContent
222  {
223  std::string mParamValue;
224  std::string mParamDescr;
225  };
226 
227  // Структура для хранения параметров в списке
229  struct stc_ParamLines
230  {
231  stc_ParamLines(const std::string& p_paramName, const ParamContent& p_paramContent)
232  : mParamName(p_paramName)
233  , mParamContent(p_paramContent)
234  {}
235 
236  std::string mParamName;
237  ParamContent mParamContent;
238  };
239 
240  typedef std::list< stc_ParamLines > tdf_ParamLinesList;
241 
242  // Представление строки типа "Param=Value//Description" в парсере
243  // ParamName ParamContent
244  typedef std::map< std::string, ParamContent > tdf_ParamLinesMap;
245 
246  struct stc_Section
247  {
248  tdf_ParamLinesMap mParamLines;
249  std::string mComment;
250  tdf_ParamLinesList mParamLinesList;
251  int mPos;
252  };
253 
254  // Представление INI-файла в парсере
255  // Section Data
256  typedef std::map< std::string, stc_Section > INIView;
257 
258  public:
261  {
277  ecUnknownError
278  };
279 
285  INIParser(const std::string& p_projectOrFileName, const std::string& p_hostPath);
286  INIParser(const std::string& p_projectOrFileName);
287  ~INIParser();
288 
293  bool isLoaded();
294 
299  std::string getCurrentINIFilename() const;
300 
301  std::string getDefaultINIFilename() const;
302 
307  void setINIFilename(const std::string& p_INIFilename);
308 
309  void setDefaultINIFilename();
310 
315  ErrorCode save();
316 
323  com::ini::INIParamType getParamType(const std::string& p_section, const std::string& p_paramName) const;
324 
332  ErrorCode getScriptFromFile(const std::string& p_section,
333  std::list< std::string >& o_script,
334  bool p_removeSubcomments = true ) const;
335 
340  void getSections(std::vector< std::string >& o_sections) const;
341 
348  ErrorCode getParamNamesList(const std::string& p_section, std::list< std::string >& o_paramNames);
349 
355  bool sectionExists(const std::string& p_section) const;
356 
364  ErrorCode getParamDescription(const std::string& p_section,
365  const std::string& p_paramName,
366  std::string& o_paramDescr);
367 
374  ErrorCode getSectionDescription(const std::string& p_section, std::string& o_sectionDescr);
375 
383  ErrorCode setOptionValueInFile(const std::string& p_section,
384  const std::string& p_paramName,
385  const std::string& p_newValue);
386 
394  int getIntOptionValue(const std::string& p_section,
395  const std::string& p_paramName,
396  ErrorCode* o_error = NULL) const;
397 
406  std::string getStrOptionValueRecursive(const std::string& p_section,
407  const std::string& p_paramName,
408  enu_ReadMode rm,
409  ErrorCode* o_error) const;
410 
418  std::string getStrOptionValue(const std::string& p_section,
419  const std::string& p_paramName,
420  ErrorCode* o_error = NULL) const;
421 
429  double getFloatOptionValue(const std::string& p_section,
430  const std::string& p_paramName,
431  ErrorCode* o_error = NULL) const;
432 
440  ErrorCode getDoubleArrayOptionValue(const std::string& p_section,
441  const std::string& p_paramName,
442  std::vector< double >& o_array) const;
443 
451  ErrorCode getStrArrayOptionValue(const std::string& p_section,
452  const std::string& p_paramName,
453  std::vector< std::string >& o_array) const;
454 
468  ErrorCode getTwoDimensionalArray(const std::string& p_section,
469  const std::string& p_paramName,
470  std::vector< std::vector<double> >& o_list,
471  double& o_currentValue,
472  std::vector<std::string>& o_units) const;
473 
483  ErrorCode getTreeNodes(const std::string& p_section,
484  const std::string& p_paramName,
485  std::list< std::string >& o_nodesSids,
486  std::map< std::string, std::map< std::string, std::string > >& o_nodesData,
487  std::set< std::string >& o_nodesDataFields) const;
488 
496  ErrorCode getFileParamData(const std::string& p_section,
497  const std::string& p_paramName,
498  std::string& o_filename) const;
499 
507  ErrorCode getRangeValue(const std::string& p_section, const std::string& p_paramName, com::ini::INIRange& o_range) const;
508 
516  bool getCheckValue(const std::string& p_section,
517  const std::string& p_paramName,
518  INIParser::ErrorCode* o_error = NULL) const;
519 
528  ErrorCode getSetValue(const std::string& p_section,
529  const std::string& p_paramName,
530  std::string& o_currentValue,
531  std::list< std::string >& o_valueList) const;
532 
540  ErrorCode getCurrentSetValue(const std::string& p_section,
541  const std::string& p_paramName,
542  std::string& o_currentValue) const;
543 
552  ErrorCode getUnitValue(const std::string& p_section,
553  const std::string& p_paramName,
554  std::string& o_value,
555  std::string& o_unit) const;
556 
565  ErrorCode getDBTableValue(const std::string& p_section,
566  const std::string& p_paramName,
567  std::string& o_defaultValue,
568  std::string& o_sourceTable) const;
569 
580  INIParser::ErrorCode splitParamLine(const std::string& p_section,
581  int p_paramIndex,
582  std::string& o_paramName,
583  std::string& o_paramValue,
584  std::string& o_paramDescription) const;
585 
596  void loadINIDataToAnyMap(Anymap& o_anyMapData,
597  const std::vector<std::string>& extNames,
598  enu_LoadMode loadMode = lmDefault);
599 
605  std::vector< com::ini::ParamAddress > getParNamesByType(com::ini::INIParamType p_type) const;
606 
607  private:
608  void loadSectionParamsToAnyMap(Anymap& o_sectionContentAnyMap,
609  std::vector< std::string >::iterator p_sectionsIt,
610  enu_LoadMode loadMode,
611  const std::vector<std::string>& extNames);
612 
613  void loadParamToAnyMap(Anymap& o_AnyMap,
614  const std::string &sectionName,
615  const std::string &paramName,
616  enu_LoadMode loadMode,
617  const std::vector<std::string>& extNames);
618 
619  private:
620  int initParser(const std::string& p_projectOrFileName, const std::string& p_hostPath);
621  int initParser(const std::string& p_projectOrFileName);
622  ErrorCode loadINIFile();
623  void convertDecimalSeparator( std::string& p_value) const;
624  std::string removeSubComment( const std::string& p_source );
625  ErrorCode splitRawParamLine( const std::string& p_paramLine, ParamContent& o_paramContent, std::string& o_paramName) const;
626  ErrorCode getParamContent(const std::string& p_section, const std::string& p_paramName, ParamContent& o_paramContent) const;
627  std::string cutOffUnit( const std::string& p_unitValue ) const;
628 
629  private: // устаревшие функции
630  // Возвращает логическое значение true|false в зависимости от файла (0|1)
631  bool getBoolOptionValue(const std::string& pSection, const std::string& pParamName, ErrorCode* o_error = NULL) const;
632 
633  // Возвращает список строк
634  ErrorCode getStrListValue(const std::string& pSection,
635  const std::string& pParamName,
636  std::list< std::string >& oList,
637  char pLeftBracket = '{',
638  char pRightBracket = '}',
639  char pDelim = ',') const;
640 
641  private:
642  // std::string mDefaultINIFilename; // имя INI файла по умолчанию (т.е. то, которое было задано в конструкторе)
643  std::string mINIFilename; // имя INI файла, который сейчас парсится
644  INIView* mINIView; // INI-Представление файла в парсере. Здесь храняться только секции и соответствующие
645  // им линии параметров (Param=Value//Comment)
646  std::map< int, std::string >* mRawStrings; // Здесь хранятся строки, не имеющие практического значения для INI-представления
647  // (переводы строк, построчные комментарии), но необходимые для сохранения файла
648  // после изменений в INI-представлении ключ - номер строки в исходном файле.
649  bool misINIViewModified; // флаг указывает, что список был модифицирован
650  bool mIsLoaded;
651  };
652  }
653 }
654 
656 //===========================================================================
657 #endif
658 //===========================================================================
Флаг [0]{0|1}.
Definition: iniparser.h:151
Не удалось разобрать список
Definition: iniparser.h:271
ErrorCode
Коды ошибок парсера
Definition: iniparser.h:260
double mMax
Максимальное значение
Definition: iniparser.h:180
Парсер файлов aini формата
Definition: iniparser.h:209
Некорректный тип параметра
Definition: iniparser.h:269
Невозможно открыть файл
Definition: iniparser.h:264
double mStep
Шаг
Definition: iniparser.h:178
Некорретная строка
Definition: iniparser.h:265
Двумерный массив: ((abc;def;ghi) ; (abc;def;ghi))
Definition: iniparser.h:149
Диапазон: [5; 0:10; 1], где 5 - заданное значение, 0 - минимальное значение, 10 - максимальное значен...
Definition: iniparser.h:154
enu_LoadMode
режимы загрузки ini файлов в Anymap.
Definition: iniparser.h:161
lmDefault - обычный режим загрузки
Definition: iniparser.h:163
Множество с заданным значением: [abc]{abc|def|ghi}.
Definition: iniparser.h:150
double mMin
Минимальное значение
Definition: iniparser.h:179
Параметр не найден
Definition: iniparser.h:267
Параметр с указанным индексом не существует
Definition: iniparser.h:268
Без ошибок
Definition: iniparser.h:262
Ошибка разбора значения
Definition: iniparser.h:270
Мультитиповой словарь
Definition: anymap.h:79
Не удалось разобрать множество
Definition: iniparser.h:275
std::string mParamName
Параметр
Definition: iniparser.h:192
double mCur
Текущее значение
Definition: iniparser.h:177
Значение из таблицы базы данных: [somepk]$sys.table.
Definition: iniparser.h:156
Не удалось разобрать вещестный мап
Definition: iniparser.h:273
Структура для хранения параметра типа диапазон (ptRange) aINI формата
Definition: iniparser.h:175
lmRecursive - рекурсивный режим загрузки
Definition: iniparser.h:164
std::string MAC_DLLEXPORT makeSubParam(const std::string &p_param, const std::string &p_subparam)
Секция не найдена
Definition: iniparser.h:266
Массив: (abc;def;ghi)
Definition: iniparser.h:148
Не удалось сохранить файл
Definition: iniparser.h:276
std::string mSection
Секция
Definition: iniparser.h:191
Дерево, комплексный параметр
Definition: iniparser.h:153
Не удалось разобрать двумерный список
Definition: iniparser.h:272
INIParamType
Типы параметров aINI формата
Definition: iniparser.h:145
Структура, представляющая собой пару &quot;секция-параметр&quot;.
Definition: iniparser.h:184
Субпараметр, используемых для построения параметра типа ptTree.
Definition: iniparser.h:157
Файл: [file.ext].
Definition: iniparser.h:152
Не удалось разобрать строковый мап
Definition: iniparser.h:274
Значение с размерностью: 20[[GPa]].
Definition: iniparser.h:155
Файл не найден
Definition: iniparser.h:263
Строка
Definition: iniparser.h:147