hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
JsonSerializable.hpp
Go to the documentation of this file.
1 
14 #ifndef JSON_SERIALIZABLE_HPP
15 #define JSON_SERIALIZABLE_HPP
16 
17 #include <Poco/Dynamic/Var.h>
18 #include <Poco/NumberFormatter.h>
19 #include <iostream>
20 #include <sstream>
21 #include <iomanip>
22 
23 namespace HCE
24 {
25 //-----------------------------------------------------------------------------
27 {
28 public:
29  enum
30  {
32  };
33 protected:
34  template <class T = unsigned long long>
35  T convertVarToNumeric(Poco::Dynamic::Var& var, T defaultValue)
36  {
37  T result=defaultValue;
38  try
39  {
40  if (!var.isEmpty())
41  {
42  if (var.isString())
43  result = static_cast<T>(std::stoull(var.convert<std::string>()));
44  else
45  {
46  if (var.isNumeric())
47  {
48  if (var.isInteger())
49  {
50  if (var.isSigned())
51  result = static_cast<T>(var.convert<Poco::Int64>());
52  else
53  result = static_cast<T>(var.convert<Poco::UInt64>());
54  }
55  else
56  result = static_cast<T>(var.convert<double>());
57  }
58  }
59  }
60  }
61  catch(...)
62  {
63  result = defaultValue;
64  }
65  return result;
66  }
67 public:
68  IJsonSerializable(void) : errorMsg(""), errorCode(0), _isError(false) {}
69  virtual ~IJsonSerializable(void) {}
70 
71  virtual bool serialize(std::string& json)=0;
72  virtual bool unserialize(const std::string& json)=0;
73 
74  void setErrorMsg(const std::string& errorMsg_) {errorMsg=errorMsg_;}
75  std::string getErrorMsg(void) const {return errorMsg;}
76 
77  void setErrorCode(unsigned int errorCode_) {errorCode=errorCode_;}
78  unsigned int getErrorCode(void) const {return errorCode;}
79 
80  void setIsError(bool isError_) {_isError=isError_;}
81  bool isError(void) const {return _isError;}
82  void resetError(void)
83  {
84  errorMsg.clear();
86  _isError = false;
87  }
88 protected:
89  std::string errorMsg;
90  unsigned int errorCode;
91  bool _isError;
92 };
93 //-----------------------------------------------------------------------------
94 //-----------------------------------------------------------------------------
95 template <typename T = std::string>
97 {
98  static const size_t PRECISION=2;
99 public:
100  T operator()(double value, size_t precision=PRECISION)
101  {
102  T t;
103  std::istringstream(Poco::NumberFormatter::format(value, precision)) >> t;
104  return t;
105  }
106 };
107 //-----------------------------------------------------------------------------
108 //-----------------------------------------------------------------------------
109 } // end namespace HCE
110 
111 #endif // JSON_SERIALIZABLE_HPP