binary_data_value.cpp
Go to the documentation of this file.
1 // @author Alexander Rykovanov 2012
10 
11 #include "binary_serialization.h"
12 
14 #include <opc/ua/protocol/types.h>
16 
17 #include <algorithm>
18 #include <functional>
19 #include <memory>
20 #include <stdexcept>
21 #include <string>
22 
23 namespace OpcUa
24 {
25 
26 namespace Binary
27 {
28 
29 template<>
30 std::size_t RawSize<DataValue>(const DataValue & val)
31 {
32  std::size_t size = RawSize(val.Encoding);
33 
34  if (val.Encoding & DATA_VALUE)
35  {
36  size += RawSize(val.Value);
37  }
38 
39  if (val.Encoding & DATA_VALUE_STATUS_CODE)
40  {
41  size += RawSize(val.Status);
42  }
43 
44  if (val.Encoding & DATA_VALUE_SOURCE_TIMESTAMP)
45  {
46  size += RawSize(val.SourceTimestamp);
47  }
48 
49  if (val.Encoding & DATA_VALUE_Server_TIMESTAMP)
50  {
51  size += RawSize(val.ServerTimestamp);
52  }
53 
54  if (val.Encoding & DATA_VALUE_SOURCE_PICOSECONDS)
55  {
56  size += RawSize(val.SourcePicoseconds);
57  }
58 
59  if (val.Encoding & DATA_VALUE_Server_PICOSECONDS)
60  {
61  size += RawSize(val.ServerPicoseconds);
62  }
63 
64  return size;
65 }
66 
67 template<>
68 void DataSerializer::Serialize<DataValue>(const DataValue & val)
69 {
70  *this << val.Encoding;
71 
72  if (val.Encoding & DATA_VALUE)
73  {
74  *this << val.Value;
75  }
76 
77  if (val.Encoding & DATA_VALUE_STATUS_CODE)
78  {
79  *this << val.Status;
80  }
81 
82  if (val.Encoding & DATA_VALUE_SOURCE_TIMESTAMP)
83  {
84  *this << val.SourceTimestamp;
85  }
86 
87  if (val.Encoding & DATA_VALUE_SOURCE_PICOSECONDS)
88  {
89  *this << val.SourcePicoseconds;
90  }
91 
92  if (val.Encoding & DATA_VALUE_Server_TIMESTAMP)
93  {
94  *this << val.ServerTimestamp;
95  }
96 
97  if (val.Encoding & DATA_VALUE_Server_PICOSECONDS)
98  {
99  *this << val.ServerPicoseconds;
100  }
101 }
102 
103 template<>
104 void DataDeserializer::Deserialize<DataValue>(DataValue & val)
105 {
106  *this >> val.Encoding;
107 
108  if (val.Encoding & DATA_VALUE)
109  {
110  *this >> val.Value;
111  }
112 
113  if (val.Encoding & DATA_VALUE_STATUS_CODE)
114  {
115  *this >> val.Status;
116  }
117 
118  if (val.Encoding & DATA_VALUE_SOURCE_TIMESTAMP)
119  {
120  *this >> val.SourceTimestamp;
121  }
122 
123  if (val.Encoding & DATA_VALUE_SOURCE_PICOSECONDS)
124  {
125  *this >> val.SourcePicoseconds;
126  }
127 
128  if (val.Encoding & DATA_VALUE_Server_TIMESTAMP)
129  {
130  *this >> val.ServerTimestamp;
131  }
132 
133  if (val.Encoding & DATA_VALUE_Server_PICOSECONDS)
134  {
135  *this >> val.ServerPicoseconds;
136  }
137 }
138 } // namespace Binary
139 } // namespace OpcUa
140 
const uint8_t DATA_VALUE_STATUS_CODE
Definition: data_value.h:19
const uint8_t DATA_VALUE_Server_TIMESTAMP
Definition: data_value.h:21
const uint8_t DATA_VALUE_SOURCE_PICOSECONDS
Definition: data_value.h:22
std::size_t RawSize< DataValue >(const DataValue &val)
const uint8_t DATA_VALUE_SOURCE_TIMESTAMP
Definition: data_value.h:20
OPC UA Address space part. GNU LGPL.
const uint8_t DATA_VALUE_Server_PICOSECONDS
Definition: data_value.h:23
const char * Binary(const char *input, short n)
const uint8_t DATA_VALUE
Definition: data_value.h:18
std::size_t RawSize(const T &obj)


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:06:03