VM2D  1.12
Vortex methods for 2D flows simulation
VMlib::StreamParser Class Reference

Класс, позволяющий выполнять разбор файлов и строк с настройками и параметрами More...

#include <StreamParser.h>

Collaboration diagram for VMlib::StreamParser:

Public Member Functions

 StreamParser (LogStream &infoStream, const std::string &label, std::istream &mainStream, std::istream &defaultsStream, std::istream &switchersStream, std::istream &varsStream, std::vector< std::string > specificKey={})
 Конструктор, принимающий четыре потока More...
 
 StreamParser (LogStream &infoStream, const std::string &label, std::istream &mainStream, std::istream &defaultsStream, std::vector< std::string > specificKey={})
 Конструктор, принимающий два потока More...
 
 StreamParser (LogStream &infoStream, const std::string &label, std::istream &mainStream, char openBracket= '{', char closeBracket= '}')
 Конструктор, принимающий один поток More...
 
 ~StreamParser ()
 Деструктор More...
 
template<typename T >
void SetDefault (const std::string &name, T &res, const T *defValue, bool echoDefault) const
 Установка значения параметра по умолчанию More...
 
bool get (const std::string &name, std::vector< Point2D > &res, const std::vector< Point2D > *defValue=nullptr, bool echoDefault=true) const
 Считывание вектора из двумерных точек из базы данных More...
 
bool get (const std::string &name, std::vector< v3D > &res, const std::vector< v3D > *defValue=nullptr, bool echoDefault=true) const
 Считывание вектора из трехмерных точек из базы данных More...
 
template<typename T , typename P >
bool get (const std::string &name, std::vector< std::pair< T, P >> &res, const std::vector< std::pair< T, P >> *defValue=nullptr, bool echoDefault=true) const
 Считывание вектора из пар чисел из базы данных More...
 
template<typename T >
bool get (const std::string &name, std::vector< numvector< T, 2 >> &res, const std::vector< numvector< T, 2 >> *defValue=nullptr, bool echoDefault=true) const
 Считывание вектора из пар чисел из базы данных More...
 
bool get (const std::string &name, std::vector< Vortex2D > &res, const std::vector< Vortex2D > *defValue=nullptr, bool echoDefault=true) const
 Считывание вектора из вихрей из базы данных More...
 
bool get (const std::string &name, std::vector< GeomPoint > &res, const std::vector< GeomPoint > *defValue=nullptr, bool echoDefault=true) const
 Считывание вектора из точек, задающих профиль, из базы данных More...
 
template<typename T >
bool get (const std::string &name, std::vector< T > &res, const std::vector< T > *defValue=nullptr, bool echoDefault=true) const
 Считывание вектора из простых типов из базы данных More...
 
template<typename T >
bool get (const std::string &name, std::pair< std::string, T > &res, const std::pair< std::string, T > *defValue=nullptr, bool echoDefault=true) const
 Считывание пары (строка, скаляр) из базы данных More...
 
template<typename T >
bool get (const std::string &name, T &res, const T *defValue=nullptr, bool echoDefault=true) const
 Считывание скаляра из базы данных More...
 
bool get (const std::string &name, Point2D &res, const Point2D *defValue=nullptr, bool echoDefault=true) const
 Считывание точки из базы данных More...
 
bool get (const std::string &name, v3D &res, const v3D *defValue=nullptr, bool echoDefault=true) const
 Считывание точки из базы данных More...
 
bool get (const std::string &name, bool &res, const bool *defValue=nullptr, bool echoDefault=true) const
 Считывание логической переменной из базы данных More...
 
bool get (const std::string &name, std::pair< std::pair< std::string, int >, std::string > &res, const std::pair< std::pair< std::string, int >, std::string > *defValue=nullptr, bool echoDefault=true) const
 Считывание пары: ((строка, целое число), строка) вида ((str1, int), string) из базы данных More...
 

Static Public Member Functions

static std::string UpperCase (const std::string &line)
 Перевод строки в верхний регистр More...
 
static std::vector< std::string > StringToVector (std::string line, char openBracket= '(', char closeBracket= ')')
 Pазбор строки, содержащей запятые, на отдельные строки More...
 
static std::string VectorStringToString (const std::vector< std::string > &_vecString)
 Объединение вектора (списка) из строк в одну строку More...
 
static std::pair< std::string, std::string > SplitString (LogStream &info, std::string line, bool upcase=true)
 Разбор строки на пару ключ-значение More...
 

Public Attributes

std::unordered_map< std::string, std::vector< std::string > > database
 Данные считываемые из основного файла-паспорта расчета More...
 

Private Member Functions

void ParseStream (std::istream &stream, std::unordered_map< std::string, std::vector< std::string >> &database, std::vector< std::string > specificKey={}, bool replaceVars=false, char openBracket= '(', char closeBracket= ')')
 Парсинг заданного потока More...
 
void ReplaceVarsInString (std::string &st)
 Замена переменных в строке их значениями More...
 

Private Attributes

LogStream info
 Поток для вывода логов и сообщений об ошибках More...
 
std::unordered_map< std::string, std::vector< std::string > > defaults
 Данные считываемые из списка умолчаний More...
 
std::unordered_map< std::string, std::vector< std::string > > vars
 Данные считываемые из параметров конкретной задачи More...
 
std::unordered_map< std::string, std::vector< std::string > > switchers
 Данные считываемые из перечня параметров-переключателей More...
 

Detailed Description

Класс, позволяющий выполнять разбор файлов и строк с настройками и параметрами

Author
Марчевский Илья Константинович 1.12
Date
14 января 2024 г.

Definition at line 151 of file StreamParser.h.

Constructor & Destructor Documentation

StreamParser::StreamParser ( LogStream infoStream,
const std::string &  label,
std::istream &  mainStream,
std::istream &  defaultsStream,
std::istream &  switchersStream,
std::istream &  varsStream,
std::vector< std::string >  specificKey = {} 
)

Конструктор, принимающий четыре потока

Заполняет 4 базы данных — database, defaults, switchers, vars
Используется для установки основных параметров расчета

Parameters
[in,out]infoStreamбазовый поток для вывода логов
[in]labelконстантная ссылка на метку парсера для вывода логов
[in]mainStreamссылка на основной поток параметров
[in]defaultsStreamссылка на поток по умолчанию
[in]switchersStreamссылка на поток параметров-переключателей
[in]varsStreamссылка на поток переменных
[in]specificKeyпоиск только ключей из данного списка (по умолчанию — пустой список, что означает разбор всех ключей)

Definition at line 42 of file StreamParser.cpp.

43 {
44  info.inheritStream(infoStream, label);
45 
46  ParseStream(varsStream, vars);
47  ParseStream(defaultsStream, defaults);
48  ParseStream(switchersStream, switchers);
49  ParseStream(mainStream, database, specificKey, true);
50 }//StreamParser(...)
Глобальные параметры по умолчанию
Definition: defs.h:90
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
std::unordered_map< std::string, std::vector< std::string > > vars
Данные считываемые из параметров конкретной задачи
Definition: StreamParser.h:175
void ParseStream(std::istream &stream, std::unordered_map< std::string, std::vector< std::string >> &database, std::vector< std::string > specificKey={}, bool replaceVars=false, char openBracket= '(', char closeBracket= ')')
Парсинг заданного потока
void inheritStream(LogStream &infoStream_, const std::string &label_)
Связывание потока логов с потоком вывода от другого потока логов
Definition: LogStream.h:90
std::unordered_map< std::string, std::vector< std::string > > switchers
Данные считываемые из перечня параметров-переключателей
Definition: StreamParser.h:181

Here is the call graph for this function:

StreamParser::StreamParser ( LogStream infoStream,
const std::string &  label,
std::istream &  mainStream,
std::istream &  defaultsStream,
std::vector< std::string >  specificKey = {} 
)

Конструктор, принимающий два потока

Заполняет 2 базы данных — database, defaults; базы данных switchers и vars остаются пустыми
Используется для первоначального считывания параметров задач из списка задач и формирования очереди

Parameters
[in,out]infoStreamбазовый поток для вывода логов
[in]labelконстантная ссылка на метку парсера для вывода логов
[in]mainStreamссылка на основной поток параметров
[in]defaultsStreamссылка на поток по умолчанию
[in]specificKeyпоиск только ключей из данного списка (по умолчанию — пустой список, что означает разбор всех ключей)

Definition at line 54 of file StreamParser.cpp.

55 {
56  info.inheritStream(infoStream, label);
57 
58  ParseStream(mainStream, database, specificKey);
59  ParseStream(defaultsStream, defaults);
60 
61  switchers.clear();
62  vars.clear();
63 }//StreamParser(...)
Глобальные параметры по умолчанию
Definition: defs.h:90
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
std::unordered_map< std::string, std::vector< std::string > > vars
Данные считываемые из параметров конкретной задачи
Definition: StreamParser.h:175
void ParseStream(std::istream &stream, std::unordered_map< std::string, std::vector< std::string >> &database, std::vector< std::string > specificKey={}, bool replaceVars=false, char openBracket= '(', char closeBracket= ')')
Парсинг заданного потока
void inheritStream(LogStream &infoStream_, const std::string &label_)
Связывание потока логов с потоком вывода от другого потока логов
Definition: LogStream.h:90
std::unordered_map< std::string, std::vector< std::string > > switchers
Данные считываемые из перечня параметров-переключателей
Definition: StreamParser.h:181

Here is the call graph for this function:

StreamParser::StreamParser ( LogStream infoStream,
const std::string &  label,
std::istream &  mainStream,
char  openBracket = '{',
char  closeBracket = '}' 
)

Конструктор, принимающий один поток

Заполняет 1 базу данных — database; базы данных defaults, switchers и vars остаются пустыми
Используется для считывания профиля, следа, списка задач

Parameters
[in,out]infoStreamбазовый поток для вывода логов
[in]labelконстантная ссылка на метку парсера для вывода логов
[in]mainStreamссылка на основной поток параметров
[in]openBracketтип открывающейся скобки (по умолчанию — "{" )
[in]closeBracketтип закрывающейся скобки (по умолчанию — "}" )

Definition at line 67 of file StreamParser.cpp.

68 {
69  info.inheritStream(infoStream, label);
70 
71  ParseStream(mainStream, database, {}, false, openBracket, closeBracket);
72 
73  defaults.clear();
74  switchers.clear();
75  vars.clear();
76 }//StreamParser(...)
Глобальные параметры по умолчанию
Definition: defs.h:90
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
std::unordered_map< std::string, std::vector< std::string > > vars
Данные считываемые из параметров конкретной задачи
Definition: StreamParser.h:175
void ParseStream(std::istream &stream, std::unordered_map< std::string, std::vector< std::string >> &database, std::vector< std::string > specificKey={}, bool replaceVars=false, char openBracket= '(', char closeBracket= ')')
Парсинг заданного потока
void inheritStream(LogStream &infoStream_, const std::string &label_)
Связывание потока логов с потоком вывода от другого потока логов
Definition: LogStream.h:90
std::unordered_map< std::string, std::vector< std::string > > switchers
Данные считываемые из перечня параметров-переключателей
Definition: StreamParser.h:181

Here is the call graph for this function:

VMlib::StreamParser::~StreamParser ( )
inline

Деструктор

Definition at line 249 of file StreamParser.h.

249 { };

Here is the call graph for this function:

Member Function Documentation

bool VMlib::StreamParser::get ( const std::string &  name,
std::vector< Point2D > &  res,
const std::vector< Point2D > *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание вектора из двумерных точек из базы данных

Переопределение метода get() для считывания вектора из точек (Point2D) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на значение, считываемое из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 314 of file StreamParser.h.

315  {
316  bool boolRes = false;
317 
318  res.resize(0);
319 
320  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
321 
322  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
323  if (is_match(search_ita->first, UpperCase(name)))
324  break;
325 
326  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
327  if (is_match(search_itb->first, UpperCase(name)))
328  break;
329 
330  //поиск ключа в базе и, если нет, то в базе умолчаний
331  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
332  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
333  if (((search_it = search_ita) != database.end()) ||
334  ((search_it = search_itb) != defaults.end()))
335  {
336  for (size_t i = 0; i < (search_it->second).size(); ++i)
337  {
338  std::string s = (search_it->second)[i];
339 
340  Point2D elem;
341  size_t pos = s.find(',', 1);
342  std::stringstream(s.substr(1, pos - 1)) >> elem[0];
343  std::stringstream(s.substr(pos + 1, s.length() - pos - 2)) >> elem[1];
344  res.push_back(elem);
345  }
346  boolRes = true;
347  }
348  //else
349  // SetDefault(name, res, defValue, echoDefault);
350  return boolRes;
351  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

Here is the caller graph for this function:

bool VMlib::StreamParser::get ( const std::string &  name,
std::vector< v3D > &  res,
const std::vector< v3D > *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание вектора из трехмерных точек из базы данных

Переопределение метода get() для считывания вектора из точек (v3D) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на значение, считываемое из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 362 of file StreamParser.h.

363  {
364  bool boolRes = false;
365 
366  res.resize(0);
367  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
368 
369  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
370  if (is_match(search_ita->first, UpperCase(name)))
371  break;
372 
373  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
374  if (is_match(search_itb->first, UpperCase(name)))
375  break;
376 
377  //поиск ключа в базе и, если нет, то в базе умолчаний
378  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
379  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
380  if (((search_it = search_ita) != database.end()) ||
381  ((search_it = search_itb) != defaults.end()))
382  {
383  for (size_t i = 0; i < (search_it->second).size(); ++i)
384  {
385  std::string s = (search_it->second)[i];
386 
387  v3D elem;
388  size_t pos1 = s.find(',', 1);
389  std::stringstream(s.substr(1, pos1 - 1)) >> elem[0];
390  size_t pos2 = s.find(',', pos1 + 1);
391  std::stringstream(s.substr(pos1 + 1, pos2 - pos1 - 1)) >> elem[1];
392  std::stringstream(s.substr(pos2 + 1, s.length() - pos2 - 2)) >> elem[2];
393  res.push_back(elem);
394  }
395  boolRes = true;
396  }
397  //else
398  // SetDefault(name, res, defValue, echoDefault);
399 
400  return boolRes;
401  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
Класс, опеделяющий двумерный вектор
Definition: v3D.h:55
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

template<typename T , typename P >
bool VMlib::StreamParser::get ( const std::string &  name,
std::vector< std::pair< T, P >> &  res,
const std::vector< std::pair< T, P >> *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание вектора из пар чисел из базы данных

Переопределение метода get() для считывания вектора из пар чисел (std::pair) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на значение, считываемое из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 412 of file StreamParser.h.

413  {
414  bool boolRes = false;
415 
416  res.resize(0);
417  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
418 
419  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
420  if (is_match(search_ita->first, UpperCase(name)))
421  break;
422 
423  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
424  if (is_match(search_itb->first, UpperCase(name)))
425  break;
426 
427  //поиск ключа в базе и, если нет, то в базе умолчаний
428  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
429  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
430  if (((search_it = search_ita) != database.end()) ||
431  ((search_it = search_itb) != defaults.end()))
432  {
433  for (size_t i = 0; i < (search_it->second).size(); ++i)
434  {
435  std::string s = (search_it->second)[i];
436 
437  std::pair<T,P> elem;
438  size_t pos = s.find(',', 1);
439  std::stringstream(s.substr(1, pos - 1)) >> elem.first;
440  std::stringstream(s.substr(pos + 1, s.length() - pos - 2)) >> elem.second;
441  res.push_back(elem);
442  }
443  boolRes = true;
444  }
445  //else
446  // SetDefault(name, res, defValue, echoDefault);
447 
448  return boolRes;
449  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

template<typename T >
bool VMlib::StreamParser::get ( const std::string &  name,
std::vector< numvector< T, 2 >> &  res,
const std::vector< numvector< T, 2 >> *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание вектора из пар чисел из базы данных

Переопределение метода get() для считывания вектора из пар чисел (numvector<T,2>) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на значение, считываемое из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 461 of file StreamParser.h.

462  {
463  bool boolRes = false;
464 
465  res.resize(0);
466  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
467 
468  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
469  if (is_match(search_ita->first, UpperCase(name)))
470  break;
471 
472  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
473  if (is_match(search_itb->first, UpperCase(name)))
474  break;
475 
476  //поиск ключа в базе и, если нет, то в базе умолчаний
477  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
478  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
479  if (((search_it = search_ita) != database.end()) ||
480  ((search_it = search_itb) != defaults.end()))
481  {
482  for (size_t i = 0; i < (search_it->second).size(); ++i)
483  {
484  std::string s = (search_it->second)[i];
485 
486  numvector<T, 2> elem;
487  size_t pos = s.find(',', 1);
488  std::stringstream(s.substr(1, pos - 1)) >> elem[0];
489  std::stringstream(s.substr(pos + 1, s.length() - pos - 2)) >> elem[1];
490  res.push_back(elem);
491  }
492  boolRes = true;
493  }
494  //else
495  // SetDefault(name, res, defValue, echoDefault);
496 
497  return boolRes;
498  };
Глобальные параметры по умолчанию
Definition: defs.h:90
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

bool VMlib::StreamParser::get ( const std::string &  name,
std::vector< Vortex2D > &  res,
const std::vector< Vortex2D > *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание вектора из вихрей из базы данных

Переопределение метода get() для считывания вектора из вихрей (Vortex2D) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на вектор из вихрей, считываемый из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 509 of file StreamParser.h.

510  {
511  bool boolRes = false;
512 
513  res.resize(0);
514  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
515 
516  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
517  if (is_match(search_ita->first, UpperCase(name)))
518  break;
519 
520  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
521  if (is_match(search_itb->first, UpperCase(name)))
522  break;
523 
524  //поиск ключа в базе и, если нет, то в базе умолчаний
525  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
526  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
527  if (((search_it = search_ita) != database.end()) ||
528  ((search_it = search_itb) != defaults.end()))
529  {
530  for (size_t i = 0; i < (search_it->second).size(); ++i)
531  {
532  std::string s = (search_it->second)[i];
533 
534  Point2D r;
535  double g;
536  size_t pos1 = s.find(',', 1);
537  size_t pos2 = s.find(',', pos1 + 1);
538  std::stringstream(s.substr(1, pos1 - 1)) >> r[0];
539  std::stringstream(s.substr(pos1 + 1, pos2 - pos1 - 1)) >> r[1];
540  std::stringstream(s.substr(pos2 + 1, s.length() - pos2 - 2)) >> g;
541 
542  Vortex2D elem(r, g);
543 
544  res.push_back(elem);
545  }
546  boolRes = true;
547  }
548  //else
549  // SetDefault(name, res, defValue, echoDefault);
550 
551  return boolRes;
552  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
Класс, опеделяющий двумерный вихревой элемент
Definition: Vortex2D.h:51
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

bool VMlib::StreamParser::get ( const std::string &  name,
std::vector< GeomPoint > &  res,
const std::vector< GeomPoint > *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание вектора из точек, задающих профиль, из базы данных

Переопределение метода get() для считывания вектора из вихрей (Vortex2D) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на вектор из вихрей, считываемый из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 563 of file StreamParser.h.

564  {
565  bool boolRes = false;
566 
567  res.resize(0);
568  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
569 
570  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
571  if (is_match(search_ita->first, UpperCase(name)))
572  break;
573 
574  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
575  if (is_match(search_itb->first, UpperCase(name)))
576  break;
577 
578  //поиск ключа в базе и, если нет, то в базе умолчаний
579  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
580  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
581  if (((search_it = search_ita) != database.end()) ||
582  ((search_it = search_itb) != defaults.end()))
583  {
584  for (size_t i = 0; i < (search_it->second).size(); ++i)
585  {
586  std::string s = (search_it->second)[i];
587 
588  Point2D r;
589  std::string type;
590  size_t pos1 = s.find(',', 1);
591  size_t pos2 = s.find(',', pos1 + 1);
592  std::stringstream(s.substr(1, pos1 - 1)) >> r[0];
593  std::stringstream(s.substr(pos1 + 1, pos2 - pos1 - 1)) >> r[1];
594  std::stringstream(s.substr(pos2 + 1, s.length() - pos2 - 2)) >> type;
595 
596  GeomPoint elem(r, type);
597 
598 
599  res.push_back(elem);
600  }
601  boolRes = true;
602  }
603  //else
604  // SetDefault(name, res, defValue, echoDefault);
605 
606 
607  return boolRes;
608  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

template<typename T >
bool VMlib::StreamParser::get ( const std::string &  name,
std::vector< T > &  res,
const std::vector< T > *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание вектора из простых типов из базы данных

Шаблонный метод get() для считывания вектора из простых типов из базы данных

Template Parameters
Tтип считываемых данных
Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на вектор из данных, считываемый из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 623 of file StreamParser.h.

624  {
625  bool boolRes = false;
626 
627  res.resize(0);
628  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
629 
630  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
631  if (is_match(search_ita->first, UpperCase(name)))
632  break;
633 
634  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
635  if (is_match(search_itb->first, UpperCase(name)))
636  break;;
637 
638  //поиск ключа в базе и, если нет, то в базе умолчаний
639  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
640  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
641  if (((search_it = search_ita) != database.end()) ||
642  ((search_it = search_itb) != defaults.end()))
643  {
644  for (size_t i = 0; i < (search_it->second).size(); ++i)
645  {
646  std::string s = (search_it->second)[i];
647 
648  std::stringstream ss(s);
649  T elem;
650  ss >> elem;
651  if (typeid(elem).name() == typeid(std::string("TestString")).name())
652  {
653  std::string* str = reinterpret_cast<std::string*>(&elem);
654  str->erase(remove(str->begin(), str->end(), '\"'), str->end());
655  }
656  res.push_back(elem);
657  }
658  boolRes = true;
659  }
660  else
661  SetDefault(name, res, defValue, echoDefault);
662 
663  return boolRes;
664  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
void SetDefault(const std::string &name, T &res, const T *defValue, bool echoDefault) const
Установка значения параметра по умолчанию
Definition: StreamParser.h:291
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

template<typename T >
bool VMlib::StreamParser::get ( const std::string &  name,
std::pair< std::string, T > &  res,
const std::pair< std::string, T > *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание пары (строка, скаляр) из базы данных

Шаблонный метод get() для считывания пары (строка, скаляр) из базы данных

Template Parameters
Tтип считываемых данных
Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка данные, считываемые из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 677 of file StreamParser.h.

678  {
679  bool boolRes = false;
680 
681  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
682 
683  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
684  if (is_match(search_ita->first, UpperCase(name)))
685  break;
686 
687  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
688  if (is_match(search_itb->first, UpperCase(name)))
689  break;
690 
691  //поиск ключа в базе и, если нет, то в базе умолчаний
692  //if ((((search_it = database.find(UpperCase(name))) != database.end()) && ((search_it->second).size() > 0)) ||
693  // (((search_it = defaults.find(UpperCase(name))) != defaults.end()) && ((search_it->second).size() > 0)))
694  if ((((search_it = search_ita) != database.end()) && ((search_it->second).size() > 0)) ||
695  (((search_it = search_itb) != defaults.end()) && ((search_it->second).size() > 0)))
696  {
697  if ((search_it->second).size() == 1)
698  {
699  std::string s = (search_it->second)[0];
700  res.first = s;
701 
702  //проверка на значение-переключатель
703  if (((search_it = switchers.find(UpperCase(s))) != switchers.end()) && ((search_it->second).size() > 0))
704  s = search_it->second[0];
705 
706  std::stringstream ss(s);
707  T elem;
708  ss >> elem;
709  if (typeid(elem).name() == typeid(std::string("TestString")).name())
710  {
711  std::string* str = reinterpret_cast<std::string*>(&elem);
712  str->erase(remove(str->begin(), str->end(), '\"'), str->end());
713  }
714  res.second = elem;
715  boolRes = true;
716  }
717  else
718  {
719  info('e') << "parameter " << name << " is list (only scalar is available)" << std::endl;
720  exit(-1);
721  }
722  }
723  else
724  SetDefault(name, res, defValue, echoDefault);
725 
726  return boolRes;
727  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
void SetDefault(const std::string &name, T &res, const T *defValue, bool echoDefault) const
Установка значения параметра по умолчанию
Definition: StreamParser.h:291
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
std::unordered_map< std::string, std::vector< std::string > > switchers
Данные считываемые из перечня параметров-переключателей
Definition: StreamParser.h:181
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

template<typename T >
bool VMlib::StreamParser::get ( const std::string &  name,
T &  res,
const T *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание скаляра из базы данных

Шаблонный метод get() для считывания скаляра из базы данных

Template Parameters
Tтип считываемых данных
Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка данные, считываемые из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 742 of file StreamParser.h.

743  {
744  bool boolRes = false;
745 
746  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
747 
748  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
749  if (is_match(search_ita->first, UpperCase(name)))
750  break;
751 
752  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
753  if (is_match(search_itb->first, UpperCase(name)))
754  break;
755 
756  //поиск ключа в базе и, если нет, то в базе умолчаний
757  //if ((((search_it = database.find(UpperCase(name))) != database.end()) && ((search_it->second).size() > 0)) ||
758  // (((search_it = defaults.find(UpperCase(name))) != defaults.end()) && ((search_it->second).size() > 0)))
759  if ((((search_it = search_ita) != database.end()) && ((search_it->second).size() > 0)) ||
760  (((search_it = search_itb) != defaults.end()) && ((search_it->second).size() > 0)))
761  {
762  if ((search_it->second).size() == 1)
763  {
764  std::string s = (search_it->second)[0];
765 
766  //проверка на значение-переключатель
767  if (((search_it = switchers.find(UpperCase(s))) != switchers.end()) && ((search_it->second).size() > 0))
768  s = search_it->second[0];
769 
770  std::stringstream ss(s);
771  T elem;
772  ss >> elem;
773  if (typeid(elem).name() == typeid(std::string("TestString")).name())
774  {
775  std::string* str = reinterpret_cast<std::string*>(&elem);
776  str->erase(remove(str->begin(), str->end(), '\"'), str->end());
777  }
778  res = elem;
779  boolRes = true;
780  }
781  else
782  {
783  info('e') << "parameter " << name << " is list (only scalar is available)" << std::endl;
784  exit(-1);
785  }
786  }
787  else
788  SetDefault(name, res, defValue, echoDefault);
789 
790  return boolRes;
791  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
void SetDefault(const std::string &name, T &res, const T *defValue, bool echoDefault) const
Установка значения параметра по умолчанию
Definition: StreamParser.h:291
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
std::unordered_map< std::string, std::vector< std::string > > switchers
Данные считываемые из перечня параметров-переключателей
Definition: StreamParser.h:181
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

bool VMlib::StreamParser::get ( const std::string &  name,
Point2D res,
const Point2D defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание точки из базы данных

Переопределение метода get() для считывания точки (Point2D) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на точку, считываемую из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 803 of file StreamParser.h.

804  {
805  bool boolRes = false;
806 
807  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
808 
809  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
810  if (is_match(search_ita->first, UpperCase(name)))
811  break;
812 
813  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
814  if (is_match(search_itb->first, UpperCase(name)))
815  break;
816 
817  //поиск ключа в базе и, если нет, то в базе умолчаний
818  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
819  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
820  if (((search_it = search_ita) != database.end()) ||
821  ((search_it = search_itb) != defaults.end()))
822  {
823  if ((search_it->second).size() == res.size())
824  {
825  for (size_t i = 0; i < (search_it->second).size(); ++i)
826  {
827  std::string s = (search_it->second)[i];
828 
829  std::stringstream ss(s);
830  double elem;
831  ss >> elem;
832  res[i] = elem;
833  }
834  boolRes = true;
835  }
836  else
837  {
838  info('e') << "parameter " << name << " length differs from 2 (only Point2D is available)" << std::endl;
839  exit(-1);
840  }
841 
842  }
843  else
844  SetDefault(name, res, defValue, echoDefault);
845 
846  return boolRes;
847  }
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
void SetDefault(const std::string &name, T &res, const T *defValue, bool echoDefault) const
Установка значения параметра по умолчанию
Definition: StreamParser.h:291
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
size_t size() const
Definition: numvector.h:111
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

bool VMlib::StreamParser::get ( const std::string &  name,
v3D res,
const v3D defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание точки из базы данных

Переопределение метода get() для считывания точки (v3D) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на точку, считываемую из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 858 of file StreamParser.h.

859  {
860  bool boolRes = false;
861 
862  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
863 
864  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
865  if (is_match(search_ita->first, UpperCase(name)))
866  break;
867 
868  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
869  if (is_match(search_itb->first, UpperCase(name)))
870  break;
871 
872  //поиск ключа в базе и, если нет, то в базе умолчаний
873  //if (((search_it = database.find(UpperCase(name))) != database.end()) ||
874  // ((search_it = defaults.find(UpperCase(name))) != defaults.end()))
875  if (((search_it = search_ita) != database.end()) ||
876  ((search_it = search_itb) != defaults.end()))
877  {
878  if ((search_it->second).size() == res.size())
879  {
880  for (size_t i = 0; i < (search_it->second).size(); ++i)
881  {
882  std::string s = (search_it->second)[i];
883 
884  std::stringstream ss(s);
885  double elem;
886  ss >> elem;
887  res[i] = elem;
888  }
889  boolRes = true;
890  }
891  else
892  {
893  info('e') << "parameter " << name << " length differs from 3 (only v3D is available)" << std::endl;
894  exit(-1);
895  }
896 
897  }
898  else
899  SetDefault(name, res, defValue, echoDefault);
900 
901  return boolRes;
902  }
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
void SetDefault(const std::string &name, T &res, const T *defValue, bool echoDefault) const
Установка значения параметра по умолчанию
Definition: StreamParser.h:291
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
size_t size() const
Definition: numvector.h:111
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

bool VMlib::StreamParser::get ( const std::string &  name,
bool &  res,
const bool *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание логической переменной из базы данных

Переопределение метода get() для ситывания логической переменной (bool) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка на логическую переменную, считываемую из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 913 of file StreamParser.h.

914  {
915  bool boolRes = false;
916 
917  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
918 
919  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
920  if (is_match(search_ita->first, UpperCase(name)))
921  break;
922 
923  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
924  if (is_match(search_itb->first, UpperCase(name)))
925  break;
926 
927  //поиск ключа в базе и, если нет, то в базе умолчаний
928  //if ((((search_it = database.find(UpperCase(name))) != database.end()) && ((search_it->second).size() > 0)) ||
929  // (((search_it = defaults.find(UpperCase(name))) != defaults.end()) && ((search_it->second).size() > 0)))
930  if ((((search_it = search_ita) != database.end()) && ((search_it->second).size() > 0)) ||
931  (((search_it = search_itb) != defaults.end()) && ((search_it->second).size() > 0)))
932  {
933  if ((search_it->second).size() == 1)
934  {
935  std::string s = (search_it->second)[0];
936 
937  //проверка на значение-переключатель
938  if (((search_it = switchers.find(UpperCase(s))) != switchers.end()) && ((search_it->second).size() > 0))
939  s = search_it->second[0];
940 
941  if ((UpperCase(s) == "FALSE") || (UpperCase(s) == "NO") || (s.c_str()[0] == '0'))
942  res = false;
943  else
944  res = true;
945 
946  boolRes = true;
947  }
948  else
949  {
950  info('e') << "parameter " << name << " is list (only scalar is available)" << std::endl;
951  exit(-1);
952  }
953  }
954  else
955  SetDefault(name, res, defValue, echoDefault);
956 
957  return boolRes;
958  };//get(...)
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
void SetDefault(const std::string &name, T &res, const T *defValue, bool echoDefault) const
Установка значения параметра по умолчанию
Definition: StreamParser.h:291
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
std::unordered_map< std::string, std::vector< std::string > > switchers
Данные считываемые из перечня параметров-переключателей
Definition: StreamParser.h:181
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

bool VMlib::StreamParser::get ( const std::string &  name,
std::pair< std::pair< std::string, int >, std::string > &  res,
const std::pair< std::pair< std::string, int >, std::string > *  defValue = nullptr,
bool  echoDefault = true 
) const
inline

Считывание пары: ((строка, целое число), строка) вида ((str1, int), string) из базы данных

Метод get() для считывания пары: ((строка, целое число), строка) из базы данных

Parameters
[in]nameконстантная ссылка на строку — имя считываемого параметра
[out]resссылка данные, считываемые из базы данных
[in]defValueуказатель на константу — значение по умолчанию (по умолчанию nullptr)
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию (по умолчанию true)
Returns
признак считывания переменной из базы данных (false - если считано значение по умолчанию)

Definition at line 970 of file StreamParser.h.

971  {
972  bool boolRes = false;
973 
974  std::unordered_map<std::string, std::vector<std::string>>::const_iterator search_it, search_ita, search_itb;
975 
976  for (search_ita = database.begin(); search_ita != database.end(); ++search_ita)
977  if (is_match(search_ita->first, UpperCase(name)))
978  break;
979 
980  for (search_itb = defaults.begin(); search_itb != defaults.end(); ++search_itb)
981  if (is_match(search_itb->first, UpperCase(name)))
982  break;
983 
984  //поиск ключа в базе и, если нет, то в базе умолчаний
985  //if ((((search_it = database.find(UpperCase(name))) != database.end()) && ((search_it->second).size() > 0)) ||
986  // (((search_it = defaults.find(UpperCase(name))) != defaults.end()) && ((search_it->second).size() > 0)))
987  if ((((search_it = search_ita) != database.end()) && ((search_it->second).size() > 0)) ||
988  (((search_it = search_itb) != defaults.end()) && ((search_it->second).size() > 0)))
989  {
990  if ((search_it->second).size() == 1)
991  {
992  std::string s = (search_it->second)[0];
993 
994  size_t posBegin = s.find('(');
995  size_t posEnd = s.find(')');
996 
997  if ((posBegin != -1) && (posEnd == -1))
998  {
999  info('e') << "parameter " << name << " is given incorrectly" << std::endl;
1000  exit(-1);
1001  }
1002  else
1003  {
1004  std::string str1a, str1b, str2;
1005  str1a = s.substr(0, posBegin);
1006 
1007  if (((search_it = switchers.find(UpperCase(str1a))) != switchers.end()) && ((search_it->second).size() > 0))
1008  str1b = search_it->second[0];
1009  else
1010  str1b = "-1";
1011 
1012  std::stringstream ssStr1b;
1013  ssStr1b << str1b;
1014  int res1b;
1015  ssStr1b >> res1b;
1016 
1017  str2 = s.substr(posBegin + 1, posEnd - posBegin - 1);
1018 
1019  if ((posBegin == -1) && (posEnd == -1))
1020  res = { {str1a, res1b}, "" };
1021  else
1022  res = { {str1a, res1b}, str2 };
1023 
1024  boolRes = true;
1025  }
1026  }
1027  else
1028  {
1029  info('e') << "parameter " << name << " is list (only scalar is available)" << std::endl;
1030  exit(-1);
1031  }
1032  }
1033  else
1034  SetDefault(name, res, defValue, echoDefault);
1035 
1036  return boolRes;
1037  };
Глобальные параметры по умолчанию
Definition: defs.h:90
int is_match(const std::string &line_, const std::string &pattern_)
Функция сверки строки с шаблоном, который может содержать знаки * и ?
Definition: StreamParser.h:57
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
void SetDefault(const std::string &name, T &res, const T *defValue, bool echoDefault) const
Установка значения параметра по умолчанию
Definition: StreamParser.h:291
std::unordered_map< std::string, std::vector< std::string > > database
Данные считываемые из основного файла-паспорта расчета
Definition: StreamParser.h:163
std::unordered_map< std::string, std::vector< std::string > > switchers
Данные считываемые из перечня параметров-переключателей
Definition: StreamParser.h:181
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

void StreamParser::ParseStream ( std::istream &  stream,
std::unordered_map< std::string, std::vector< std::string >> &  database,
std::vector< std::string >  specificKey = {},
bool  replaceVars = false,
char  openBracket = '(',
char  closeBracket = ')' 
)
private

Парсинг заданного потока

Разбирает поток вида key = value или key = { value1, value2, ..., valueN }
Возвращает базу данных, указывается тип скобок, по умолчанию — круглые

Parameters
[in]streamссылка на поток, который требуется распарсить
[out]databaseссылка на заполняемую базу данных (unordered_map)
[in]specificKeyпоиск только ключей из данного списка (по умолчанию — пустой список, что означает разбор всех ключей)
[in]replaceVarsпризнак замены переменных из базы vars (по умолчанию false)
[in]openBracketтип открывающейся скобки (по умолчанию — "(" )
[in]closeBracketтип закрывающейся скобки (по умолчанию — ")" )

Definition at line 177 of file StreamParser.cpp.

178 {
179  std::string line, readline;
180  size_t defVarNum = 0;
181 
182  while (stream.good())
183  {
184  line = "";
185 
186  do
187  {
188  getline(stream, readline);
189 
190  size_t posComment = std::min(readline.find('#'), readline.find("//"));
191  //min, так как если не найдено -- то find возвращает string::npos, которое равно (-1), но приводится к большому положительному size_t
192  if (posComment != std::string::npos)
193  readline = readline.substr(0, posComment);
194 
195  line += readline;
196 
197  readline.erase(remove(readline.begin(), readline.end(), ' '), readline.end());
198  readline.erase(remove(readline.begin(), readline.end(), '\t'), readline.end());
199 
200  } while ( (readline.size()>0) && (readline[readline.size() - 1] == '\\') && (stream.good()));
201 
202  line.erase(remove(line.begin(), line.end(), '\\'), line.end());
203  line.erase(remove(line.begin(), line.end(), ' '), line.end());
204  line.erase(remove(line.begin(), line.end(), '\t'), line.end());
205 
206  size_t posEqual = line.find('=');
207  if (posEqual != -1)
208  {
209  std::string key = line.substr(0, posEqual);
210  auto search_it = database.find(UpperCase(key));
211 
212  if (search_it == database.end())
213  {
214  if ((specificKey.size() == 0) || (std::find(specificKey.begin(),specificKey.end(),key) != specificKey.end()) )
215  {
216  std::string value = line.substr(posEqual + 1, line.length());
217  if (replaceVars)
218  ReplaceVarsInString(value);
219  database.insert(make_pair(UpperCase(key), StringToVector(value, openBracket, closeBracket)));
220  }
221  }
222  else
223  {
224  info('e') << "key <" << key << "> is found twice" << std::endl;
225  exit(-1);
226  }
227  }//if (posEqual != -1)
228  else if (line.size() > 0)
229  {
230  std::string value = line;
231  if (replaceVars)
232  ReplaceVarsInString(value);
233 
234  std::stringstream ssDef;
235  ssDef << "_defVar_" << defVarNum;
236 
237  database.insert(make_pair(UpperCase(ssDef.str()), StringToVector(value, openBracket, closeBracket)));
238 
239  ++defVarNum;
240  }
241  }//while (streamName.good())
242 
243  //Указатель возвращаем в начало потока
244  stream.clear();
245  stream.seekg(0, std::ios::beg);
246 }//ParseStream(...)
void ReplaceVarsInString(std::string &st)
Замена переменных в строке их значениями
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
static std::vector< std::string > StringToVector(std::string line, char openBracket= '(', char closeBracket= ')')
Pазбор строки, содержащей запятые, на отдельные строки
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

Here is the caller graph for this function:

void StreamParser::ReplaceVarsInString ( std::string &  st)
private

Замена переменных в строке их значениями

Находит в строке все переменные, имена которых начинаются с символа $, и заменяет их на значения, извлекаемые из базы данных vars

Parameters
[in]stстрока, которая подлежит обработке

Definition at line 250 of file StreamParser.cpp.

251 {
252  while (st.find("$") != -1)
253  {
254  size_t startVar = st.find('$');
255 
256  size_t endVar = -1 + std::min({
257  st.find(" ", startVar + 1),
258  st.find(",", startVar + 1),
259  st.find(";", startVar + 1),
260  st.find("$", startVar + 1),
261  st.find("(", startVar + 1),
262  st.find(")", startVar + 1),
263  st.find("{", startVar + 1),
264  st.find("}", startVar + 1),
265  st.find("\n", startVar + 1),
266  st.length()
267  });
268 
269  std::string var = st.substr(startVar + 1, endVar - startVar);
270 
271  auto search_var = vars.find(UpperCase(var));
272  if ((search_var != vars.end()) && ((search_var->second).size() > 0))
273  {
274  std::vector<std::string> findString = search_var->second;
275 
276  std::stringstream ss;
277 
278  ss << st.substr(0, startVar);
279 
280  if (findString.size() == 1)
281  {
282  ss << findString[0];
283  }
284  else
285  {
286  ss << "{" << findString[0];
287  if (findString.size() > 0)
288  {
289  for (size_t sz = 1; sz < findString.size(); ++sz)
290  ss << "," << findString[sz];
291  }
292  ss << "}";
293  }
294 
295 
296  size_t startP = endVar+1;
297  size_t endP = st.length() - 1;
298 
299  if (startP <= endP)
300  ss << st.substr(startP, endP);
301 
302  st = ss.str();
303  }
304  else
305  {
306  info('e') << "substitution $" << var << " is undefined" << std::endl;
307  exit(1);
308  }
309  }
310 }
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
std::unordered_map< std::string, std::vector< std::string > > vars
Данные считываемые из параметров конкретной задачи
Definition: StreamParser.h:175
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

Here is the caller graph for this function:

template<typename T >
void VMlib::StreamParser::SetDefault ( const std::string &  name,
T &  res,
const T *  defValue,
bool  echoDefault 
) const
inline

Установка значения параметра по умолчанию

Устанавливает параметру значение по умолчанию, если оно задано в виде константной ссылки

Template Parameters
Tтип параметра, значение которого устанавливается
Parameters
[in]nameконстантная ссылка на строку — имя устанавливаемого параметра (необходимо только для отображения в лог)
[in]resссылка на задаваемый параметр
[in]defValueуказатель на константу — значение по умолчанию
[in]echoDefaultпризнак эхо-ответа при считывании значения по умолчанию

Definition at line 291 of file StreamParser.h.

292  {
293  if (defValue != nullptr)
294  {
295  res = *defValue;
296  if (echoDefault)
297  info('i') << "parameter <" << name << " = " << res << "> set as default" << std::endl;
298  }
299  else
300  {
301  info('e') << "parameter " << name << " is not found" << std::endl;
302  exit(-1);
303  }
304  }
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156

Here is the caller graph for this function:

std::pair< std::string, std::string > StreamParser::SplitString ( LogStream info,
std::string  line,
bool  upcase = true 
)
static

Разбор строки на пару ключ-значение

Разбирает строку вида xxx(yyy) на пару подстрок xxx и yyy

Parameters
[in,out]infoпоток для вывода логов и сообщений об ошибках
[in]lineразбираемая строка вида xxx(ууу)
[in]upcaseпризнак перевода ключа в верхний регистр
Returns
пара строк (xxx, yyy)

Definition at line 156 of file StreamParser.cpp.

157 {
158  size_t posBegin = line.find('(', 0);
159  size_t posEnd = line.find(')', 0);
160  if ((posBegin != -1) && (posEnd == -1))
161  {
162  info('e') << "error while parsing line " << line << std::endl;
163  exit(-1);
164  }
165  else
166  {
167  std::string sub = line.substr(0, posBegin);
168  if ((posBegin == -1) && (posEnd == -1))
169  return std::pair<std::string, std::string>(upcase ? UpperCase(sub) : sub, "{}");
170  else
171  return std::pair<std::string, std::string>(upcase ? UpperCase(sub) : sub, "{" + line.substr(posBegin + 1, posEnd - posBegin - 1) + "}");
172  }
173 }//SplitString(...)
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: StreamParser.h:156
static std::string UpperCase(const std::string &line)
Перевод строки в верхний регистр

Here is the call graph for this function:

Here is the caller graph for this function:

std::vector< std::string > StreamParser::StringToVector ( std::string  line,
char  openBracket = '(',
char  closeBracket = ')' 
)
static

Pазбор строки, содержащей запятые, на отдельные строки

Запятые внутри парных скобок игнорируются и не воспринимаются как разделители

Parameters
[in]lineразбираемая строка
[in]openBracketтип открывающейся скобки (по умолчанию — "(" )
[in]closeBracketтип закрывающейся скобки (по умолчанию — ")" )
Returns
список (вектор) из отдельных строк

Definition at line 98 of file StreamParser.cpp.

99 {
100  //LogStream info;
101  //info.inheritStream(infoStream, label);
102 
103  if (line[0] != '{')
104  {
105  if (line.length() > 0)
106  return { line };
107  else
108  {
109  //info('i') << "empty parameter" << std::endl;
110  return std::vector<std::string>({});
111  }
112  }
113  else
114  {
115  if (line[1] != '}')
116  {
117  std::vector<std::string> vecLine;
118  size_t pos;
119  while ( ((pos = line.find(',', 0)) < line.find(openBracket, 1)) ||
120  ( (pos = line.find(',', std::max(1, static_cast<int>(line.find(closeBracket, 1)) ))) != std::string::npos) ||
121  (pos = line.length()-1) )
122  {
123  std::string subline = line.substr(1, pos - 1);
124  if (subline != "")
125  vecLine.push_back(subline);
126 
127  line.erase(1, subline.size() + 1);
128  }
129  return vecLine;
130  }
131  else
132  {
133  //info('i') << "empty parameter list" << std::endl;
134  return std::vector<std::string>({});
135  }//else if (line[1] != '}')
136  }//else if (st[0] != '{')
137 }//StringToVector(...)

Here is the caller graph for this function:

std::string StreamParser::UpperCase ( const std::string &  line)
static

Перевод строки в верхний регистр

Parameters
[in]lineконстантная ссылка на обрабатываемую строку
Returns
строка в верхнем регистре

Definition at line 79 of file StreamParser.cpp.

80 {
81  std::string str(line);
82  bool flag = true;
83 
84  for (auto & c : str)
85  {
86  if (c == '"')
87  flag = !flag;
88  if (flag)
89  c = toupper(c);
90  }
91 
92  //std::transform(str.begin(), str.end(), str.begin(), ::toupper);
93  return str;
94 };//UpperCase(...)

Here is the caller graph for this function:

std::string StreamParser::VectorStringToString ( const std::vector< std::string > &  _vecString)
static

Объединение вектора (списка) из строк в одну строку

После каждой строки вставляется символ конца строки

Parameters
[in]_vecStringконстантная ссылка на вектор из строк
Returns
сплошную строку с символами конца строки между подстроками

Definition at line 142 of file StreamParser.cpp.

143 {
144  std::string buf;
145  for (size_t q = 0; q < _vecString.size(); ++q)
146  {
147  buf.append(_vecString[q]);
148  buf.append("\n");
149  }
150 
151  return buf;
152 }//VectorStringToString(...)

Here is the caller graph for this function:

Member Data Documentation

std::unordered_map<std::string, std::vector<std::string> > VMlib::StreamParser::database

Данные считываемые из основного файла-паспорта расчета

Неупорядоченный ассоциативный контейнер, хранящий данные из паспорта расчета
По умолчанию данные берутся из файла passport, но это имя может быть изменено ключом pspFile в строке параметров задачи

Definition at line 163 of file StreamParser.h.

std::unordered_map<std::string, std::vector<std::string> > VMlib::StreamParser::defaults
private

Данные считываемые из списка умолчаний

Неупорядоченный ассоциативный контейнер, хранящий данные из файла со списком значений по умолчанию
По умолчанию данные берутся из файла defaults

Definition at line 169 of file StreamParser.h.

LogStream VMlib::StreamParser::info
mutableprivate

Поток для вывода логов и сообщений об ошибках

Definition at line 156 of file StreamParser.h.

std::unordered_map<std::string, std::vector<std::string> > VMlib::StreamParser::switchers
private

Данные считываемые из перечня параметров-переключателей

Неупорядоченный ассоциативный контейнер, хранящий значения параметров-переключателей
По умолчанию данные берутся из файла switcher.

Definition at line 181 of file StreamParser.h.

std::unordered_map<std::string, std::vector<std::string> > VMlib::StreamParser::vars
private

Данные считываемые из параметров конкретной задачи

Неупорядоченный ассоциативный контейнер, хранящий данные из строки — перечня параметров конкретной задачи в файле problems.
Здесь же определяются переменные, которые затем могут использоваться методом разыменовывания в файлах-паспортах конкретных задач

Definition at line 175 of file StreamParser.h.


The documentation for this class was generated from the following files: