ComSDK
 Указатель Классы Пространства имен Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Группы Страницы
anymap.h
1 //===========================================================================
2 #ifndef comfrm_AnymapH
3 #define comfrm_AnymapH
4 //===========================================================================
5 // Заготовка модуля AnyMap была сгенерирована специальным средством RAD разработки SA2-DE.
6 // Все права защищены. (2012)
7 //
8 // В данном файле представлен исходный текст основного заголовочного файла модуля.
9 //
10 // В данном файле представлен паттерн класса.
11 // Описание класса:
12 // Отображение, сопоставляющее строкам произвольные типы данных
13 // ======================================= //
14 // Параметры новой разработки.
15 // ======================================= //
16 // Имя комплекса: GCAD (gcd)
17 // Имя решения: GCAD_2 (gc3)
18 // Имя проекта: Default (def)
19 // Полный SID: defgc3
20 // Время создания: 13:29:19
21 // Дата создания: 2012-12-24
22 // ======================================= //
23 // ============================================================================================ //
24 // Параметры ревизии(версии):
25 // ============================================================================================ //
26 // [prd]Period: 12/2012
27 // [aut]Author: Макаренков Вячеслав
28 // [did]DeveloperID: mv
29 // [pid]ProblemID: 00001
30 // [rvs = did.date.pid]Revision: //#mv.2012-12-24.00001
31 // [dsc]Description: Отображение, сопоставляющее строкам произвольные типы данных
32 // [ccm]CodeComment: rvs.{[s]Start | [e]End | []}{[n]New | [o]Old | [d]Develop}
33 // ============================================================================================ //
34 // [prd]Period: 03/2013
35 // [aut]Author: Соколов Александр
36 // [did]DeveloperID: sa
37 // [pid]ProblemID: 00002
38 // [rvs = did.date.pid]Revision: //#sa.2013-03-25.00002
39 // [dsc]Description: Преобразование в DLL
40 // [ccm]CodeComment: rvs.{[s]Start | [e]End | []}{[n]New | [o]Old | [d]Develop}
41 // ============================================================================================ //
42 // [prd]Period: 02/2014
43 // [aut]Author: Макаренков Вячеслав
44 // [did]DeveloperID: mv
45 // [pid]ProblemID: 00003
46 // [rvs = did.date.pid]Revision: //#mv.2014-02-04.00003
47 // [dsc]Description: Добавление поддержки void*
48 // [ccm]CodeComment: rvs.{[s]Start | [e]End | []}{[n]New | [o]Old | [d]Develop}
49 // ============================================================================================ //
50 // [prd]Period: 05/2014
51 // [aut]Author: Соколов Александр
52 // [did]DeveloperID: sa
53 // [pid]ProblemID: 00004
54 // [rvs = did.date.pid]Revision: //#sa.2014-05-09.00004
55 // [dsc]Description: Добавил реализацию оператора (), обеспечивающего возможность доступа к данным AnyMap на чтение.
56 // [ccm]CodeComment: rvs.{[s]Start | [e]End | []}{[n]New | [o]Old | [d]Develop}
57 // ============================================================================================ //
58 
59 //========================================================================
60 // ДОПОЛНИТЕЛЬНЫЕ ПОДКЛЮЧЕНИЯ (Типы и модули, необходимые для .h - файла)
61 //------------------------------------------------------------------------
62 #include "libtools.h"
63 
64 #include <map>
65 #include <string>
66 #include <fstream>
67 #include <vector>
68 
69 #include <boost/shared_ptr.hpp>
70 #include <boost/any.hpp>
71 //========================================================================
72 namespace com {
79  class MAC_DLLEXPORT Anymap
80  {
81  public:
86  {
95  };
96 
99  {
102  };
103 
104  Anymap();
105 
106  Anymap(boost::any p_selfData);
107 
112  Anymap& operator=(boost::any p_value);
113  Anymap& operator=(const char* p_charStr);
114  Anymap& operator=(const Anymap& p_value);
115  Anymap& operator=(const void *p_voidPointer); //#mv.2014-02-04.00003.n
116 
117  template <typename T>
118  Anymap& operator=(T* p_pointer);
119 
125  Anymap& operator[](const std::string& p_key);
126 
132  const Anymap& operator()(const std::string& p_key)const; //#sa.2014-05-09.00004.n
133 
139  std::string toStdString(bool *o_ok = 0) const;
140 
146  int toInt(bool *o_ok = 0) const;
147 
153  double toDouble(bool *o_ok = 0) const;
154 
160  void *toVoid(bool *o_ok = 0) const; //#mv.2014-02-04.00003.n
161 
167  template <typename T>
168  T* toPointer(bool *o_ok = 0) const;
169 
175  template<typename T>
176  std::vector<T> toStdVector(bool *o_ok = 0) const;
177 
181  void deleteElement();
182 
186  void deleteAllElements();
187 
193  Anymap& get(const std::string& p_key);
194 
200  const Anymap& get_const(const std::string& p_key)const; //#sa.2014-05-09.00004.n
201 
208  Anymap& set(const std::string& p_key,boost::any p_value);
209 
216  Anymap& set(const std::string& p_key,const char *p_charStr);
217 
224  Anymap& set(const std::string& p_key,const Anymap& p_value);
225 
232  Anymap& set(const std::string& p_key,const void *p_voidPointer);
233 
239  bool isSet(const std::string& p_key) const;
240 
245  std::vector< std::string > keys() const;
246 
251  bool isSingleValued() const;
252 
257  AnyDataType getSelfDataType() const;
258 
264  AnyDataType getDataTypeByKey(const std::string& p_key) const;
265 
271  void printAsText(const std::string& p_fileName,const std::string& p_precStr = "") const;
272 
279  friend MAC_DLLEXPORT std::ostream& operator<<(std::ostream& o_out, const Anymap& p_anymap);
280 
287  friend MAC_DLLEXPORT std::istream& operator>>(std::istream& o_in, Anymap& o_anymap);
288 
289  public:
290  typedef std::map<std::string,Anymap> StrAnyMap; //#sa.2013-04-23.00002.n
291 
292  //#sa.2013-04-23.00002.sn
295  StrAnyMap& data()
296  {
297  return m_data;
298  }
299  //#sa.2013-04-23.00002.sn
300 
304  template<typename T>
306  {
307  return adtUndefined;
308  }
309 
313  template<typename T>
314  AnyMapType getAnyMapType(const T&) const;
315 
319  template<typename T>
320  T toType(bool *o_ok = 0) const;
321 
327  void printAnyMap(std::ofstream& p_outFile, std::string p_preStr = "") const;
328 
329  private:
330  boost::any m_selfData;
331  boost::shared_ptr< void > m_selfPointerData;
332  StrAnyMap m_data;
333 
335  mutable bool m_singleValue; //#sa.2013-04-23.00002.sn
336  bool m_pointer;
337  };
338 
339  //---------------------------------------------------------------------------
340  template<typename T>
341  T Anymap::toType( bool *o_ok /*= 0*/ ) const
342  {
343  T result = T();
344 
345  if (o_ok)
346  *o_ok = true;
347 
348  try{
349  result = boost::any_cast<T>(m_selfData);
350  }
351  catch(const boost::bad_any_cast& p_badCast){
352  if(o_ok)
353  *o_ok = false;
354  }
355  catch(...){
356  if(o_ok)
357  *o_ok = false;
358  }
359 
360  return result;
361  }
362 
363  //---------------------------------------------------------------------------
364  template<typename T>
365  std::vector<T> Anymap::toStdVector( bool *o_ok /*= 0*/ ) const
366  {
367  return toType< std::vector<T> >(o_ok);
368  }
369 
370  //---------------------------------------------------------------------------
371  template <typename T>
372  T *Anymap::toPointer(bool *o_ok /*= 0*/) const
373  {
374  return (T*)boost::any_cast<char*>(m_selfData);
375  }
376 
377  //---------------------------------------------------------------------------
378  template <typename T>
379  Anymap& Anymap::operator=(T* p_pointer )
380  {
381  m_selfData = (char *)p_pointer;
382  //m_selfPointerData = boost::shared_ptr<void>((int*)p_pointer);
383  m_singleValue = true;
384  m_pointer = true;
385  return *this;
386  }
387 }
388 
389 //===========================================================================
390 #endif
391 //===========================================================================
392 
AnyMapType
Тип Anymap.
Definition: anymap.h:98
Вещественное число
Definition: anymap.h:89
AnyDataType
Definition: anymap.h:85
T * toPointer(bool *o_ok=0) const
Definition: anymap.h:372
Строка
Definition: anymap.h:90
AnyDataType getDataType() const
Definition: anymap.h:305
std::vector< T > toStdVector(bool *o_ok=0) const
Definition: anymap.h:365
Одиночное значение
Definition: anymap.h:100
T toType(bool *o_ok=0) const
Definition: anymap.h:341
Словарь
Definition: anymap.h:94
Anymap & operator=(boost::any p_value)
Definition: anymap.cpp:178
Мультитиповой словарь
Definition: anymap.h:79
Объект, поддерживающий сериализацию
Definition: anymap.h:93
Вектор строк
Definition: anymap.h:91
Вектор целых чисел
Definition: anymap.h:92
Целое число
Definition: anymap.h:88
StrAnyMap & data()
Definition: anymap.h:295
Неопределенно
Definition: anymap.h:87
Словарь
Definition: anymap.h:101