ComSDK
 Указатель Классы Пространства имен Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Группы Страницы
iniparser_data_structures.h
1 //===========================================================================
2 #ifndef unt_INIParserDataStructuresH
3 #define unt_INIParserDataStructuresH
4 //===========================================================================
5 // Заготовка модуля INIParserDataStructures была сгенерирована CASE средством разработки SA2-DE.
6 // Все права защищены. (2011)
7 //
8 // В данном файле представлен исходный текст основного заголовочного файла модуля.
9 //
10 // ======================================= //
11 // Параметры новой разработки.
12 // ======================================= //
13 // Имя комплекса: CommonTools (com)
14 // Имя решения: FileTools (fil) (прочерк если модуль относится лишь к комплексу)
15 // Имя проекта: INIParserLib_vs8 (ini) (прочерк если модуль относится лишь к решению)
16 // Полный SID: comfilini
17 // Время создания: 10:47:28
18 // Дата создания: 04.05.2011
19 // ======================================= //
20 // ============================================================================================ //
21 // Параметры ревизии(версии):
22 // ============================================================================================ //
23 // [prd]Period: 5/2011
24 // [aut]Author: Александр Соколов
25 // [did]DeveloperID: sa
26 // [pid]ProblemID: 00001
27 // [rvs = did.date.pid]Revision: //#sa.04.05.2011.00001
28 // [dsc]Description: Структуры данных, используемые INI парсером.
29 // [ccm]CodeComment: rvs.{[s]Start | [e]End | []}{[n]New | [o]Old | [d]Develop}
30 // ============================================================================================ //
31 #include "libtools.h"
32 #include "iniparser.h"
33 
34 #include <string>
35 #include <list>
36 #include <map>
37 
38 #include <boost/spirit/include/qi.hpp>
39 
40 namespace com
41 {
42  namespace ini
43  {
44  //------------------------------------------------------------------------
46  template<typename charType>
47  class strAppend
48  {
49  std::basic_string<charType, std::char_traits<charType>, std::allocator<charType> >& mStr;
50  public:
51  strAppend(std::basic_string<charType, std::char_traits<charType>, std::allocator<charType> >& o_destStr)
52  :mStr(o_destStr)
53  {
54  mStr.clear();
55  }
56 
57  void operator()(charType v_ch, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
58  {
59  mStr.push_back(v_ch);
60  }
61  };
62  //------------------------------------------------------------------------
64  template<typename charType>
65  class slistAdd
66  {
67  std::list< std::basic_string<charType, std::char_traits<charType>, std::allocator<charType> > >& mList;
68  std::basic_string<charType, std::char_traits<charType>, std::allocator<charType> >& mAddition;
69  public:
70  slistAdd(std::list< std::basic_string<charType, std::char_traits<charType>, std::allocator<charType> > >& o_list,
71  std::basic_string<charType, std::char_traits<charType>, std::allocator<charType> >& p_addition)
72  :mList(o_list)
73  ,mAddition(p_addition)
74  {}
75 
76  void operator()(charType v_indicator, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
77  {
78  mList.push_back(mAddition);
79  mAddition.clear();
80  }
81  };
82  //------------------------------------------------------------------------
84  template<template<typename, typename> class Container, typename Data>
86  {
87  Container<Data, std::allocator<Data> >& mList;
88  Container<Container<Data, std::allocator<Data>>, std::allocator<Container<Data, std::allocator<Data> > > >& mLList;
89  public:
90  twoDimContainerPushBack(Container<Data, std::allocator<Data>>& o_list,
91  Container<Container<Data, std::allocator<Data>>, std::allocator<Container<Data, std::allocator<Data> > > >& o_llist)
92  :mList(o_list)
93  ,mLList(o_llist)
94  {}
95 
96  void operator()(char const& ch, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
97  {
98  mLList.push_back(mList);
99  mList.clear();
100  }
101  };
102 
103  template<template<typename, typename> class Container, class Data>
105  {
106  Container<Data, std::allocator<Data> >& mList;
107  public:
108  containerPushBack(Container<Data, std::allocator<Data> >& o_list)
109  :mList(o_list)
110  {}
111 
112  void operator()(const Data& v_param, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
113  {
114  mList.push_back(v_param);
115  }
116  };
117 
118  template<template<typename, typename> class Container, class Data>
120  {
121  Container<Data, std::allocator<Data> >& mList;
122  Data& mBuf;
123 
124  public:
125  containerPushBackLast(Data& o_buf, Container<Data, std::allocator<Data> >& o_list)
126  :mList(o_list)
127  ,mBuf(o_buf)
128  {}
129 
130  void operator()(const std::string& dummy, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
131  {
132  mList.push_back(mBuf);
133  mBuf.clear();
134  }
135 
136  void operator()(const char& dummy, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
137  {
138  mList.push_back(mBuf);
139  mBuf.clear();
140  }
141  };
142 
143 /*
144  template<template<typename, typename> class Container, class Data>
145  class containerPushBack
146  {
147  Container<Data, std::allocator<Data> >& mList;
148  public:
149  containerPushBack(Container<Data, std::allocator<Data> >& o_list)
150  :mList(o_list)
151  {}
152 
153  void operator()(const Data& v_param, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
154  {
155  mList.push_back(v_param);
156  }
157  };
158 */
159 
160 /*
161  template<class Container, class Data>
162  class twoDimContainerPushBack
163  {
164  std::list< double >& mList;
165  std::list< std::list< double > >& mLList;
166  public:
167  twoDimListPushBack(std::list< double >& o_list, std::list< std::list< double > >& o_llist)
168  :mList(o_list)
169  ,mLList(o_llist)
170  {}
171 
172  void operator()(char const& ch, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
173  {
174  mLList.push_back(mList);
175  mList.clear();
176  }
177  };
178  //------------------------------------------------------------------------
179  //------------------------------------------------------------------------
181  template<class T>
182  class containerPushBack
183  {
184  std::list< T >& mList;
185  public:
186  listPushBack(std::list< T >& o_list)
187  :mList(o_list)
188  {}
189 
190  void operator()(T const& v_param, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
191  {
192  mList.push_back(v_param);
193  }
194  };
195 */
196  //------------------------------------------------------------------------
197  // A function object 3
198  template<class Key, class Data>
200  {
201  std::map< Key, Data >& mMap;
202  Key& mKey;
203  Data& mData;
204  public:
205  mapPushBack(std::map< Key, Data >& o_map, Key& o_key, Data& o_data)
206  :mMap(o_map)
207  ,mKey(o_key)
208  ,mData(o_data)
209  {}
210 
211  void operator()(char v_indicator, boost::spirit::qi::unused_type, boost::spirit::qi::unused_type) const
212  {
213  mMap[mKey] = mData;
214  mKey = Key();
215  mData = Data();
216  }
217  };
218 
219  //------------------------------------------------------------------------
222  INIParser::ErrorCode stringListFromString(const std::string& p_inputStr,
223  char p_leftBracket,
224  char p_rightBracket,
225  char p_separator,
226  std::list< std::string >& o_list);
227 
230  INIParser::ErrorCode twoDimDoubleArrayFromString(const std::string& p_inputStr,
231  char p_leftBracket,
232  char p_rightBracket,
233  char p_separator,
234  std::vector< std::vector<double> >& o_list,
235  double& o_currentValue,
236  std::vector<std::string>& o_units);
237 
240  INIParser::ErrorCode strDoubleMapFromString(const std::string& p_inputStr,
241  char p_leftBracket,
242  char p_rightBracket,
243  char p_separator,
244  std::map< std::string, double >& o_map);
245 
248  INIParser::ErrorCode strMapFromString(const std::string& p_inputStr,
249  char p_leftBracket,
250  char p_rightBracket,
251  char p_separator,
252  std::map< std::string, std::string >& o_map);
253 
254  //------------------------------------------------------------------------
256  INIParser::ErrorCode setValueWithEnumerationValues(const std::string& p_inputStr,
257  std::string& o_current_value,
258  std::list< std::string >& o_valuelist);
259 
268  std::string removeParamSpecification(const std::string& p_inputParamNameWithSpec);
269  }
270 }
271 
272 //===========================================================================
273 #endif
274 //===========================================================================
INIParser::ErrorCode twoDimDoubleArrayFromString(const std::string &p_inputStr, char p_leftBracket, char p_rightBracket, char p_separator, std::vector< std::vector< double > > &o_list, double &o_currentValue, std::vector< std::string > &o_units)
загрузка двумерного списка чисел из строки с заданными разделителями. Есть поддержка текущего значени...
ErrorCode
Коды ошибок парсера
Definition: iniparser.h:260
Функциональный объект для добавления элементов в двумерный список
Definition: iniparser_data_structures.h:85
функциональный объект, позволяющий добавлять строки в список строк
Definition: iniparser_data_structures.h:65
INIParser::ErrorCode strMapFromString(const std::string &p_inputStr, char p_leftBracket, char p_rightBracket, char p_separator, std::map< std::string, std::string > &o_map)
загрузка мэпа &quot;строка-число&quot;.
INIParser::ErrorCode strDoubleMapFromString(const std::string &p_inputStr, char p_leftBracket, char p_rightBracket, char p_separator, std::map< std::string, double > &o_map)
загрузка мэпа &quot;строка-число&quot;.
std::string removeParamSpecification(const std::string &p_inputParamNameWithSpec)
INIParser::ErrorCode setValueWithEnumerationValues(const std::string &p_inputStr, std::string &o_current_value, std::list< std::string > &o_valuelist)
Загрузка текущего значения параметра множества и всех возможных значений
Definition: iniparser_data_structures.h:104
Definition: iniparser_data_structures.h:199
Definition: iniparser_data_structures.h:119
INIParser::ErrorCode stringListFromString(const std::string &p_inputStr, char p_leftBracket, char p_rightBracket, char p_separator, std::list< std::string > &o_list)
загрузка списка строк из строки с заданными разделителями
функциональный объект, позволяющий добавлять символы в строку
Definition: iniparser_data_structures.h:47