src/protocol/binary_node_management.cpp
Go to the documentation of this file.
1 
11 #include "binary_serialization.h"
12 
16 #include <opc/ua/protocol/types.h>
19 
20 #include <algorithm>
21 #include <memory>
22 #include <string>
23 #include <iostream>
24 
25 namespace OpcUa
26 {
27 
28 
30 {
33 
34  std::bitset<32> specattr;
40  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
41 
47 }
48 
50 {
53 
54  std::bitset<32> specattr;
67  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
68 
75  Attributes[AttributeId::AccessLevel] = static_cast<uint8_t>(attr.AccessLevel);
76  Attributes[AttributeId::UserAccessLevel] = static_cast<uint8_t>(attr.UserAccessLevel);
81 }
82 
84 {
87 
88  std::bitset<32> specattr;
95  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
96 
103 }
105 {
108 
109  std::bitset<32> specattr;
115  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
116 
122 }
123 
125 {
128 
129  std::bitset<32> specattr;
139  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
140 
150 }
151 
153 {
156 
157  std::bitset<32> specattr;
164 
165  if (!attr.IsAbstract)
167 
168  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
169 
176 
177  if (!attr.IsAbstract)
179 }
180 
182 {
185 
186  std::bitset<32> specattr;
192  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
193 
199 }
200 
202 {
205 
206  std::bitset<32> specattr;
212  SpecifiedAttributes = (uint32_t) specattr.to_ulong();
213 
219 }
220 
221 
222 
225 {
226 }
227 
230 {
231 }
232 
235 {
236 }
237 
240 {
241 }
242 
243 namespace Binary
244 {
245 
246 //
247 //AddNodeRequest
248 //
249 /*
250  template<>
251  std::size_t RawSize<ObjectAttributes>(const ObjectAttributes& val)
252  {
253  return RawSize(val.SpecifiedAttributes) +
254  RawSize(val.DisplayName) +
255  RawSize(val.Description) +
256  RawSize(val.EventNotifier) +
257  RawSize(val.WriteMask) +
258  RawSize(val.UserWriteMask)
259  ;
260  }
261 
262  template<>
263  void DataSerializer::Serialize<ObjectAttributes>(const ObjectAttributes& val)
264  {
265  *this << val.SpecifiedAttributes;
266  *this << val.DisplayName;
267  *this << val.Description;
268  *this << val.EventNotifier;
269  *this << val.WriteMask;
270  *this << val.UserWriteMask;
271  }
272 
273  template<>
274  void DataDeserializer::Deserialize<ObjectAttributes>(ObjectAttributes& val)
275  {
276  *this >> val.SpecifiedAttributes;
277  *this >> val.DisplayName;
278  *this >> val.Description;
279  *this >> val.EventNotifier;
280  *this >> val.WriteMask;
281  *this >> val.UserWriteMask;
282  }
283 
284  template<>
285  std::size_t RawSize<VariableAttributes>(const VariableAttributes& val)
286  {
287  return RawSize(val.SpecifiedAttributes) +
288  RawSize(val.DisplayName) +
289  RawSize(val.Description) +
290  RawSize(val.Value) +
291  RawSize(val.Type) +
292  RawSize(val.Rank) +
293  RawSizeContainer(val.Dimensions) +
294  RawSize((uint8_t)val.AccessLevel) +
295  RawSize((uint8_t)val.UserAccessLevel) +
296  RawSize(val.MinimumSamplingInterval) +
297  RawSize(val.Historizing) +
298  RawSize(val.WriteMask) +
299  RawSize(val.UserWriteMask)
300  ;
301  }
302 
303  template<>
304  void DataSerializer::Serialize<VariableAttributes>(const VariableAttributes& val)
305  {
306  *this << val.SpecifiedAttributes;
307  *this << val.DisplayName;
308  *this << val.Description;
309  *this << val.Value;
310  *this << val.Type;
311  *this << val.Rank;
312  *this << val.Dimensions;
313  *this << (uint8_t)val.AccessLevel; // TODO
314  *this << (uint8_t)val.UserAccessLevel; //TODO
315  *this << val.MinimumSamplingInterval;
316  *this << val.Historizing;
317  *this << val.WriteMask;
318  *this << val.UserWriteMask;
319  }
320 
321  template<>
322  void DataDeserializer::Deserialize<VariableAttributes>(VariableAttributes& val)
323  {
324  *this >> val.SpecifiedAttributes;
325  *this >> val.DisplayName;
326  *this >> val.Description;
327  *this >> val.Value;
328  *this >> val.Type;
329  *this >> val.Rank;
330  *this >> val.Dimensions;
331  uint8_t tmp = 0;
332  *this >> tmp; val.AccessLevel = static_cast<VariableAccessLevel>(tmp);
333  *this >> tmp; val.UserAccessLevel = static_cast<VariableAccessLevel>(tmp);
334  *this >> val.MinimumSamplingInterval;
335  *this >> val.Historizing;
336  *this >> val.WriteMask;
337  *this >> val.UserWriteMask;
338  }
339 
340 
341  template<>
342  std::size_t RawSize<MethodAttributes>(const MethodAttributes& val)
343  {
344  return RawSize(val.SpecifiedAttributes) +
345  RawSize(val.DisplayName) +
346  RawSize(val.Description) +
347  RawSize(val.Executable) +
348  RawSize(val.UserExecutable) +
349  RawSize(val.WriteMask) +
350  RawSize(val.UserWriteMask)
351  ;
352  }
353 
354  template<>
355  void DataSerializer::Serialize<MethodAttributes>(const MethodAttributes& val)
356  {
357  *this << val.SpecifiedAttributes;
358  *this << val.DisplayName;
359  *this << val.Description;
360  *this << val.Executable;
361  *this << val.UserExecutable;
362  *this << val.WriteMask;
363  *this << val.UserWriteMask;
364  }
365 
366  template<>
367  void DataDeserializer::Deserialize<MethodAttributes>(MethodAttributes& val)
368  {
369  *this >> val.SpecifiedAttributes;
370  *this >> val.DisplayName;
371  *this >> val.Description;
372  *this >> val.Executable;
373  *this >> val.UserExecutable;
374  *this >> val.WriteMask;
375  *this >> val.UserWriteMask;
376  }
377 
378  template<>
379  std::size_t RawSize<ObjectTypeAttributes>(const ObjectTypeAttributes& val)
380  {
381  return RawSize(val.SpecifiedAttributes) +
382  RawSize(val.DisplayName) +
383  RawSize(val.Description) +
384  RawSize(val.IsAbstract) +
385  RawSize(val.WriteMask) +
386  RawSize(val.UserWriteMask)
387  ;
388  }
389 
390  template<>
391  void DataSerializer::Serialize<ObjectTypeAttributes>(const ObjectTypeAttributes& val)
392  {
393  *this << val.SpecifiedAttributes;
394  *this << val.DisplayName;
395  *this << val.Description;
396  *this << val.IsAbstract;
397  *this << val.WriteMask;
398  *this << val.UserWriteMask;
399  }
400 
401  template<>
402  void DataDeserializer::Deserialize<ObjectTypeAttributes>(ObjectTypeAttributes& val)
403  {
404  *this >> val.SpecifiedAttributes;
405  *this >> val.DisplayName;
406  *this >> val.Description;
407  *this >> val.IsAbstract;
408  *this >> val.WriteMask;
409  *this >> val.UserWriteMask;
410  }
411 
412 
413  template<>
414  std::size_t RawSize<VariableTypeAttributes>(const VariableTypeAttributes& val)
415  {
416  return RawSize(val.SpecifiedAttributes) +
417  RawSize(val.DisplayName) +
418  RawSize(val.Description) +
419  RawSize(val.Value) +
420  RawSize(val.Type) +
421  RawSize(val.Rank) +
422  RawSizeContainer(val.Dimensions) +
423  RawSize(val.IsAbstract) +
424  RawSize(val.WriteMask) +
425  RawSize(val.UserWriteMask)
426  ;
427  }
428 
429  template<>
430  void DataSerializer::Serialize<VariableTypeAttributes>(const VariableTypeAttributes& val)
431  {
432  *this << val.SpecifiedAttributes;
433  *this << val.DisplayName;
434  *this << val.Description;
435  *this << val.Value;
436  *this << val.Type;
437  *this << val.Rank;
438  *this << val.Dimensions;
439  *this << val.IsAbstract;
440  *this << val.WriteMask;
441  *this << val.UserWriteMask;
442  }
443 
444  template<>
445  void DataDeserializer::Deserialize<VariableTypeAttributes>(VariableTypeAttributes& val)
446  {
447  *this >> val.SpecifiedAttributes;
448  *this >> val.DisplayName;
449  *this >> val.Description;
450  *this >> val.Value;
451  *this >> val.Type;
452  *this >> val.Rank;
453  *this >> val.Dimensions;
454  *this >> val.IsAbstract;
455  *this >> val.WriteMask;
456  *this >> val.UserWriteMask;
457  }
458 
459 
460  template<>
461  std::size_t RawSize<ReferenceTypeAttributes>(const ReferenceTypeAttributes& val)
462  {
463  return RawSize(val.SpecifiedAttributes) +
464  RawSize(val.DisplayName) +
465  RawSize(val.Description) +
466  RawSize(val.IsAbstract) +
467  RawSize(val.Symmetric) +
468  RawSize(val.InverseName) +
469  RawSize(val.WriteMask) +
470  RawSize(val.UserWriteMask)
471  ;
472  }
473 
474  template<>
475  void DataSerializer::Serialize<ReferenceTypeAttributes>(const ReferenceTypeAttributes& val)
476  {
477  *this << val.SpecifiedAttributes;
478  *this << val.DisplayName;
479  *this << val.Description;
480  *this << val.IsAbstract;
481  *this << val.Symmetric;
482  *this << val.InverseName;
483  *this << val.WriteMask;
484  *this << val.UserWriteMask;
485  }
486 
487  template<>
488  void DataDeserializer::Deserialize<ReferenceTypeAttributes>(ReferenceTypeAttributes& val)
489  {
490  *this >> val.SpecifiedAttributes;
491  *this >> val.DisplayName;
492  *this >> val.Description;
493  *this >> val.IsAbstract;
494  *this >> val.Symmetric;
495  *this >> val.InverseName;
496  *this >> val.WriteMask;
497  *this >> val.UserWriteMask;
498  }
499 
500 
501  template<>
502  std::size_t RawSize<DataTypeAttributes>(const DataTypeAttributes& val)
503  {
504  return RawSize(val.SpecifiedAttributes) +
505  RawSize(val.DisplayName) +
506  RawSize(val.Description) +
507  RawSize(val.IsAbstract) +
508  RawSize(val.WriteMask) +
509  RawSize(val.UserWriteMask)
510  ;
511  }
512 
513  template<>
514  void DataSerializer::Serialize<DataTypeAttributes>(const DataTypeAttributes& val)
515  {
516  *this << val.SpecifiedAttributes;
517  *this << val.DisplayName;
518  *this << val.Description;
519  *this << val.IsAbstract;
520  *this << val.WriteMask;
521  *this << val.UserWriteMask;
522  }
523 
524  template<>
525  void DataDeserializer::Deserialize<DataTypeAttributes>(DataTypeAttributes& val)
526  {
527  *this >> val.SpecifiedAttributes;
528  *this >> val.DisplayName;
529  *this >> val.Description;
530  *this >> val.IsAbstract;
531  *this >> val.WriteMask;
532  *this >> val.UserWriteMask;
533  }
534 
535  template<>
536  std::size_t RawSize<ViewAttributes>(const ViewAttributes& val)
537  {
538  return RawSize(val.SpecifiedAttributes) +
539  RawSize(val.DisplayName) +
540  RawSize(val.Description) +
541  RawSize(val.ContainsNoLoops) +
542  RawSize(val.WriteMask) +
543  RawSize(val.UserWriteMask)
544  ;
545  }
546 
547  template<>
548  void DataSerializer::Serialize<ViewAttributes>(const ViewAttributes& val)
549  {
550  *this << val.SpecifiedAttributes;
551  *this << val.DisplayName;
552  *this << val.Description;
553  *this << val.ContainsNoLoops;
554  *this << val.WriteMask;
555  *this << val.UserWriteMask;
556  }
557 
558  // TODO Seems doesn't required because there is serialization of NodeAttributes
559  // TODO Exact attributes have to be initialized from node attributes which will serialize.
560  template<>
561  void DataDeserializer::Deserialize<ViewAttributes>(ViewAttributes& val)
562  {
563  *this >> val.SpecifiedAttributes;
564  *this >> val.DisplayName;
565  *this >> val.Description;
566  *this >> val.ContainsNoLoops;
567  *this >> val.WriteMask;
568  *this >> val.UserWriteMask;
569  }
570 */
571 
572 
574 {
575  size_t total = 0;
576  total += RawSize(val.SpecifiedAttributes);
577 
578  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DisplayName))
579  {
580  total += RawSize(val.Attributes.find(AttributeId::DisplayName)->second.As<LocalizedText>()); //We assume the attr exists!!!
581  }
582 
583  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Description))
584  {
585  total += RawSize(val.Attributes.find(AttributeId::Description)->second.As<LocalizedText>());
586  }
587 
589  {
590  total += 1;//RawSize(val.Attributes.find(AttributeId::EventNotifier)->second.Value.U);
591  }
592 
593  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Value))
594  {
595  total += RawSize(val.Attributes.find(AttributeId::Value)->second);
596  }
597 
598  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DataType))
599  {
600  total += RawSize(val.Attributes.find(AttributeId::DataType)->second.As<NodeId>());
601  }
602 
603  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ValueRank))
604  {
605  total += 4;
606  }
607 
609  {
610  total += RawSizeContainer(val.Attributes.find(AttributeId::ArrayDimensions)->second.As<std::vector<uint32_t>>());
611  }
612 
613  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::AccessLevel))
614  {
615  total += 1;
616  }
617 
619  {
620  total += 1;
621  }
622 
624  {
625  total += sizeof(double);
626  }
627 
628  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Historizing))
629  {
630  total += sizeof(bool);
631  }
632 
633  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Executable))
634  {
635  }
636 
638  {
639  }
640 
641  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::IsAbstract))
642  {
643  }
644 
645  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Symmetric))
646  {
647  }
648 
649  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::InverseName))
650  {
651  }
652 
654  {
655  }
656 
657  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::WriteMask))
658  {
659  total += 4;
660  }
661 
663  {
664  total += 4;
665  }
666 
667  return total;
668 
669 }
670 
671 
672 template<>
673 std::size_t RawSize<NodeAttributes>(const NodeAttributes & val)
674 {
675  size_t total = 0;
676  total += RawSize(val.Header);
677  total += 4 ; //uint32_t size body
678  total += RawSizeBodyNodeAttributes(val) ;
679  return total;
680 }
681 
682 
683 
684 template<>
685 void DataSerializer::Serialize<NodeAttributes>(const NodeAttributes & val)
686 {
687  *this << val.Header;
688  *this << (int32_t) RawSizeBodyNodeAttributes(val); //debug
689  *this << val.SpecifiedAttributes;
690 
691  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DisplayName))
692  {
693  *this << val.Attributes.find(AttributeId::DisplayName)->second.As<LocalizedText>();
694  }
695 
696  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Description))
697  {
698  *this << val.Attributes.find(AttributeId::Description)->second.As<LocalizedText>();
699  }
700 
701  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::WriteMask))
702  {
703  *this << val.Attributes.find(AttributeId::WriteMask)->second.As<uint32_t>();
704  }
705 
706  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserWriteMask))
707  {
708  *this << val.Attributes.find(AttributeId::UserWriteMask)->second.As<uint32_t>();
709  }
710 
711  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::EventNotifier))
712  {
713  *this << (uint8_t) val.Attributes.find(AttributeId::EventNotifier)->second.As<uint8_t>();
714  }
715 
716  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Value))
717  {
718  *this << val.Attributes.find(AttributeId::Value)->second;
719  }
720 
721  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DataType))
722  {
723  *this << val.Attributes.find(AttributeId::DataType)->second.As<NodeId>();
724  }
725 
726  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ValueRank))
727  {
728  *this << val.Attributes.find(AttributeId::ValueRank)->second.As<int32_t>();
729  }
730 
731  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ArrayDimensions))
732  {
733  *this << val.Attributes.find(AttributeId::ArrayDimensions)->second.As<std::vector<uint32_t>>();
734  }
735 
736  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::AccessLevel))
737  {
738  *this << val.Attributes.find(AttributeId::AccessLevel)->second.As<uint8_t>();
739  }
740 
741  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserAccessLevel))
742  {
743  *this << val.Attributes.find(AttributeId::UserAccessLevel)->second.As<uint8_t>();
744  }
745 
746  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::MinimumSamplingInterval))
747  {
748  *this << val.Attributes.find(AttributeId::MinimumSamplingInterval)->second.As<double>();
749  }
750 
751  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Historizing))
752  {
753  *this << val.Attributes.find(AttributeId::Historizing)->second.As<bool>();
754  }
755 
756  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Executable))
757  {
758  *this << val.Attributes.find(AttributeId::Executable)->second.As<bool>();
759  }
760 
761  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserExecutable))
762  {
763  *this << val.Attributes.find(AttributeId::UserExecutable)->second.As<bool>();
764  }
765 
766  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::IsAbstract))
767  {
768  *this << val.Attributes.find(AttributeId::IsAbstract)->second.As<bool>();
769  }
770 
771  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Symmetric))
772  {
773  *this << val.Attributes.find(AttributeId::Symmetric)->second.As<bool>();
774  }
775 
776  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::InverseName))
777  {
778  *this << val.Attributes.find(AttributeId::InverseName)->second.As<LocalizedText>();
779  }
780 
781  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ContainsNoLoops))
782  {
783  *this << val.Attributes.find(AttributeId::ContainsNoLoops)->second.As<bool>();
784  }
785 
786 }
787 
788 template<>
789 void DataDeserializer::Deserialize<NodeAttributes>(NodeAttributes & val)
790 {
791  *this >> val.Header;
792  int32_t size;
793  *this >> size ; // not used yet
794  *this >> val.SpecifiedAttributes;
795 
796  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DisplayName))
797  {
798  LocalizedText tmp;
799  *this >> tmp;
800  val.Attributes[AttributeId::DisplayName] = tmp;
801  }
802 
803  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Description))
804  {
805  LocalizedText tmp;
806  *this >> tmp;
807  val.Attributes[AttributeId::Description] = tmp;
808  }
809 
810  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::WriteMask))
811  {
812  uint32_t tmp;
813  *this >> tmp;
814  val.Attributes[AttributeId::WriteMask] = tmp;
815  }
816 
817  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserWriteMask))
818  {
819  uint32_t tmp;
820  *this >> tmp;
821  val.Attributes[AttributeId::UserWriteMask] = tmp;
822  }
823 
824  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::EventNotifier))
825  {
826  uint8_t tmp;
827  *this >> tmp;
828  val.Attributes[AttributeId::EventNotifier] = tmp;
829  }
830 
831  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Value))
832  {
833  Variant tmp;
834  *this >> tmp;
835  val.Attributes[AttributeId::Value] = tmp;
836  }
837 
838  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DataType))
839  {
840  NodeId tmp;
841  *this >> tmp;
842  val.Attributes[AttributeId::DataType] = tmp;
843  }
844 
845  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ValueRank))
846  {
847  int32_t tmp;
848  *this >> tmp;
849  val.Attributes[AttributeId::ValueRank] = tmp;
850  }
851 
852  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ArrayDimensions))
853  {
854  std::vector<uint32_t> tmp;
855  *this >> tmp;
856  val.Attributes[AttributeId::ArrayDimensions] = tmp;
857  }
858 
859  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::AccessLevel))
860  {
861  uint8_t tmp;
862  *this >> tmp;
863  val.Attributes[AttributeId::AccessLevel] = tmp;
864  }
865 
866  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserAccessLevel))
867  {
868  uint8_t tmp;
869  *this >> tmp;
870  val.Attributes[AttributeId::UserAccessLevel] = tmp;
871  }
872 
873  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::MinimumSamplingInterval))
874  {
875  Duration tmp;
876  *this >> tmp;
877  val.Attributes[AttributeId::MinimumSamplingInterval] = tmp;
878  }
879 
880  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Historizing))
881  {
882  bool tmp;
883  *this >> tmp;
884  val.Attributes[AttributeId::Historizing] = tmp;
885  }
886 
887  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Executable))
888  {
889  }
890 
891  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserExecutable))
892  {
893  }
894 
895  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::IsAbstract))
896  {
897  }
898 
899  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Symmetric))
900  {
901  }
902 
903  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::InverseName))
904  {
905  }
906 
907  if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ContainsNoLoops))
908  {
909  }
910 
911 }
912 
913 template<>
914 std::size_t RawSize<AddNodesItem>(const AddNodesItem & resp)
915 {
916  return RawSize(resp.ParentNodeId) +
917  RawSize(resp.ReferenceTypeId) +
918  RawSize(resp.RequestedNewNodeId) +
919  RawSize(resp.BrowseName) +
920  RawSize(resp.Class) +
921  RawSize(resp.Attributes) +
922  RawSize(resp.TypeDefinition);
923 }
924 
925 template<>
926 void DataSerializer::Serialize<AddNodesItem>(const AddNodesItem & resp)
927 {
928  *this << resp.ParentNodeId;
929  *this << resp.ReferenceTypeId;
930  *this << resp.RequestedNewNodeId;
931  *this << resp.BrowseName;
932  *this << resp.Class;
933  *this << resp.Attributes;
934  *this << resp.TypeDefinition;
935 }
936 
937 template<>
938 void DataDeserializer::Deserialize<AddNodesItem>(AddNodesItem & resp)
939 {
940  *this >> resp.ParentNodeId;
941  *this >> resp.ReferenceTypeId;
942  *this >> resp.RequestedNewNodeId;
943  *this >> resp.BrowseName;
944  *this >> resp.Class;
945  *this >> resp.Attributes;
946  *this >> resp.TypeDefinition;
947 }
948 
949 template<>
950 std::size_t RawSize(const std::vector<AddNodesItem> & ack)
951 {
952  return RawSizeContainer(ack);
953 }
954 
955 
956 template<>
957 void DataDeserializer::Deserialize<std::vector<AddNodesItem>>(std::vector<AddNodesItem> & ack)
958 {
959  DeserializeContainer(*this, ack);
960 }
961 
962 template<>
963 void DataSerializer::Serialize<std::vector<AddNodesItem>>(const std::vector<AddNodesItem> & ack)
964 {
965  SerializeContainer(*this, ack);
966 }
967 
968 template<>
970 {
971  return RawSize(val.NodesToAdd);
972 }
973 
974 template<>
975 void DataSerializer::Serialize<AddNodesParameters>(const AddNodesParameters & val)
976 {
977  *this << val.NodesToAdd;
978 }
979 
980 template<>
981 void DataDeserializer::Deserialize<AddNodesParameters>(AddNodesParameters & resp)
982 {
983  *this >> resp.NodesToAdd;
984 }
985 
986 
987 
988 template<>
989 std::size_t RawSize<AddNodesRequest>(const AddNodesRequest & resp)
990 {
991  return RawSize(resp.TypeId) + RawSize(resp.Header) + RawSize(resp.Parameters);
992 }
993 
994 template<>
995 void DataSerializer::Serialize<AddNodesRequest>(const AddNodesRequest & resp)
996 {
997  *this << resp.TypeId;
998  *this << resp.Header;
999  *this << resp.Parameters;
1000 }
1001 
1002 template<>
1003 void DataDeserializer::Deserialize<AddNodesRequest>(AddNodesRequest & resp)
1004 {
1005  *this >> resp.TypeId;
1006  *this >> resp.Header;
1007  *this >> resp.Parameters;
1008 }
1009 
1010 template<>
1011 std::size_t RawSize<AddNodesResult>(const AddNodesResult & resp)
1012 {
1013  return RawSize(resp.Status) + RawSize(resp.AddedNodeId);
1014 }
1015 
1016 template<>
1017 void DataSerializer::Serialize<AddNodesResult>(const AddNodesResult & resp)
1018 {
1019  *this << resp.Status;
1020  *this << resp.AddedNodeId;
1021 }
1022 
1023 template<>
1024 void DataDeserializer::Deserialize<AddNodesResult>(AddNodesResult & resp)
1025 {
1026  *this >> resp.Status;
1027  *this >> resp.AddedNodeId;
1028 }
1029 
1030 
1031 template<>
1032 void DataDeserializer::Deserialize<std::vector<AddNodesResult>>(std::vector<AddNodesResult> & ack)
1033 {
1034  DeserializeContainer(*this, ack);
1035 }
1036 
1037 template<>
1038 void DataSerializer::Serialize<std::vector<AddNodesResult>>(const std::vector<AddNodesResult> & ack)
1039 {
1040  SerializeContainer(*this, ack);
1041 }
1042 
1043 
1044 
1045 
1046 
1047 
1048 template<>
1050 {
1051  return RawSize(resp.TypeId) + RawSize(resp.Header) + RawSizeContainer(resp.results) + RawSize(resp.Diagnostics);
1052 }
1053 
1054 template<>
1055 void DataSerializer::Serialize<AddNodesResponse>(const AddNodesResponse & resp)
1056 {
1057  *this << resp.TypeId;
1058  *this << resp.Header;
1059  *this << resp.results;
1060  *this << resp.Diagnostics;
1061 }
1062 
1063 template<>
1064 void DataDeserializer::Deserialize<AddNodesResponse>(AddNodesResponse & resp)
1065 {
1066  *this >> resp.TypeId;
1067  *this >> resp.Header;
1068  *this >> resp.results;
1069  *this >> resp.Diagnostics;
1070 }
1071 
1072 
1073 //
1074 // AddReferences
1075 //
1076 
1077 
1078 
1079 
1080 template<>
1082 {
1083  return RawSize(resp.TypeId) + RawSize(resp.Header) + RawSizeContainer(resp.Results) + RawSize(resp.Diagnostics);
1084 }
1085 
1086 template<>
1087 void DataSerializer::Serialize<AddReferencesResponse>(const AddReferencesResponse & resp)
1088 {
1089  *this << resp.TypeId;
1090  *this << resp.Header;
1091  *this << resp.Results;
1092  *this << resp.Diagnostics;
1093 }
1094 
1095 template<>
1096 void DataDeserializer::Deserialize<AddReferencesResponse>(AddReferencesResponse & resp)
1097 {
1098  *this >> resp.TypeId;
1099  *this >> resp.Header;
1100  *this >> resp.Results;
1101  *this >> resp.Diagnostics;
1102 }
1103 
1104 template<>
1106 {
1107  return RawSize(val.SourceNodeId) +
1108  RawSize(val.ReferenceTypeId) +
1109  RawSize(val.IsForward) +
1110  RawSize(val.TargetServerUri) +
1111  RawSize(val.TargetNodeId) +
1112  RawSize(val.TargetNodeClass)
1113  ;
1114 }
1115 
1116 template<>
1117 void DataSerializer::Serialize<AddReferencesItem>(const AddReferencesItem & val)
1118 {
1119  *this << val.SourceNodeId;
1120  *this << val.ReferenceTypeId;
1121  *this << val.IsForward;
1122  *this << val.TargetServerUri;
1123  *this << val.TargetNodeId;
1124  *this << val.TargetNodeClass;
1125 }
1126 
1127 template<>
1128 void DataDeserializer::Deserialize<AddReferencesItem>(AddReferencesItem & val)
1129 {
1130  *this >> val.SourceNodeId;
1131  *this >> val.ReferenceTypeId;
1132  *this >> val.IsForward;
1133  *this >> val.TargetServerUri;
1134  *this >> val.TargetNodeId;
1135  *this >> val.TargetNodeClass;
1136 }
1137 
1138 template<>
1139 std::size_t RawSize(const std::vector<AddReferencesItem> & ack)
1140 {
1141  return RawSizeContainer(ack);
1142 }
1143 
1144 
1145 
1146 template<>
1147 void DataDeserializer::Deserialize<std::vector<AddReferencesItem>>(std::vector<AddReferencesItem> & ack)
1148 {
1149  DeserializeContainer(*this, ack);
1150 }
1151 
1152 template<>
1153 void DataSerializer::Serialize<std::vector<AddReferencesItem>>(const std::vector<AddReferencesItem> & ack)
1154 {
1155  SerializeContainer(*this, ack);
1156 }
1157 
1158 
1159 template<>
1161 {
1162  return RawSizeContainer(val.ReferencesToAdd);
1163 }
1164 
1165 template<>
1166 void DataSerializer::Serialize<AddReferencesParameters>(const AddReferencesParameters & val)
1167 {
1168  *this << val.ReferencesToAdd;
1169 }
1170 
1171 template<>
1172 void DataDeserializer::Deserialize<AddReferencesParameters>(AddReferencesParameters & val)
1173 {
1174  *this >> val.ReferencesToAdd;
1175 }
1176 
1177 
1178 
1179 
1180 template<>
1182 {
1183  return RawSize(val.TypeId) + RawSize(val.Header) +
1184  RawSize(val.Parameters)
1185  ;
1186 }
1187 
1188 template<>
1189 void DataSerializer::Serialize<AddReferencesRequest>(const AddReferencesRequest & val)
1190 {
1191  *this << val.TypeId;
1192  *this << val.Header;
1193  *this << val.Parameters;
1194 }
1195 
1196 template<>
1197 void DataDeserializer::Deserialize<AddReferencesRequest>(AddReferencesRequest & val)
1198 {
1199  *this >> val.TypeId;
1200  *this >> val.Header;
1201  *this >> val.Parameters;
1202 }
1203 
1204 
1205 
1206 
1207 } // namespace Binary
1208 
1209 const char * GetObjectIdName(const NodeId & id)
1210 {
1211  if (id == ObjectId::FolderType)
1212  {
1213  return Names::FolderType;
1214  }
1215 
1216  else if (id == ObjectId::BaseVariableType)
1217  {
1218  return Names::BaseVariableType;
1219  }
1220 
1221  else if (id == ObjectId::BaseDataVariableType)
1222  {
1224  }
1225 
1226  else if (id == ObjectId::PropertyType)
1227  {
1228  return Names::PropertyType;
1229  }
1230 
1231  else if (id == ObjectId::BaseObjectType)
1232  {
1233  return Names::BaseObjectType;
1234  }
1235 
1236  else if (id == ObjectId::ModellingRule_Mandatory)
1237  {
1239  }
1240 
1241  else if (id == ObjectId::ServerType)
1242  {
1243  return Names::ServerType;
1244  }
1245 
1246  return "NoNameFound";
1247 }
1248 
1249 }
const char ServerType[]
Definition: strings.h:164
ExtensionObjectEncoding
Definition: types.h:276
void SerializeContainer(Stream &out, const Container &c, uint32_t emptySizeValue=~uint32_t())
std::size_t RawSize< AddNodesResponse >(const AddNodesResponse &resp)
std::size_t RawSize< AddNodesParameters >(const AddNodesParameters &val)
std::map< AttributeId, Variant > Attributes
double Duration
Definition: datetime.h:53
std::size_t RawSize< AddNodesRequest >(const AddNodesRequest &resp)
void DeserializeContainer(Stream &in, Container &c)
const char * GetObjectIdName(const NodeId &id)
std::size_t RawSize< AddReferencesParameters >(const AddReferencesParameters &val)
const char BaseDataVariableType[]
Definition: strings.h:27
const char ModellingRule_Mandatory[]
Definition: strings.h:109
std::size_t RawSize< AddReferencesItem >(const AddReferencesItem &val)
std::size_t RawSize< AddNodesResult >(const AddNodesResult &resp)
const char BaseObjectType[]
Definition: strings.h:30
std::size_t RawSize< AddNodesItem >(const AddNodesItem &resp)
const char PropertyType[]
Definition: strings.h:126
OPC UA Address space part. GNU LGPL.
const char * Binary(const char *input, short n)
std::size_t RawSize< AddReferencesResponse >(const AddReferencesResponse &resp)
std::size_t RawSize< NodeAttributes >(const NodeAttributes &val)
std::size_t RawSizeBodyNodeAttributes(const NodeAttributes &val)
std::size_t RawSize(const std::vector< AddReferencesItem > &ack)
const char FolderType[]
Definition: strings.h:62
std::vector< uint32_t > Dimensions
std::size_t RawSizeContainer(const T &container)
const char BaseVariableType[]
Definition: strings.h:31
std::size_t RawSize< AddReferencesRequest >(const AddReferencesRequest &val)


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