binary_node_management.cpp
Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 #include "binary_serialization.h"
00012 
00013 #include <opc/ua/protocol/attribute_ids.h>
00014 #include <opc/ua/protocol/expanded_object_ids.h>
00015 #include <opc/ua/protocol/binary/stream.h>
00016 #include <opc/ua/protocol/types.h>
00017 #include <opc/ua/protocol/node_management.h>
00018 #include <opc/ua/protocol/string_utils.h>
00019 
00020 #include <algorithm>
00021 #include <memory>
00022 #include <string>
00023 #include <iostream>
00024 
00025 namespace OpcUa
00026 {
00027 
00028 
00029   NodeAttributes::NodeAttributes(const ObjectAttributes& attr)
00030   {
00031     Header.TypeId = ExpandedObjectId::ObjectAttribute;
00032     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00033 
00034     std::bitset<32> specattr;
00035     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00036     specattr.set(SpecifiedAttributesEncoding::Description);
00037     specattr.set(SpecifiedAttributesEncoding::EventNotifier);
00038     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00039     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00040     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00041 
00042     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00043     Attributes[AttributeId::Description] = attr.Description;
00044     Attributes[AttributeId::EventNotifier] = attr.EventNotifier;
00045     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00046     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00047   }
00048 
00049   NodeAttributes::NodeAttributes(const VariableAttributes& attr)
00050   {
00051     Header.TypeId = ExpandedObjectId::VariableAttribute;
00052     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00053 
00054     std::bitset<32> specattr;
00055     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00056     specattr.set(SpecifiedAttributesEncoding::Description);
00057     specattr.set(SpecifiedAttributesEncoding::Value);
00058     specattr.set(SpecifiedAttributesEncoding::DataType);
00059     specattr.set(SpecifiedAttributesEncoding::ValueRank);
00060     specattr.set(SpecifiedAttributesEncoding::ArrayDimensions);
00061     specattr.set(SpecifiedAttributesEncoding::AccessLevel);
00062     specattr.set(SpecifiedAttributesEncoding::UserAccessLevel);
00063     specattr.set(SpecifiedAttributesEncoding::MinimumSamplingInterval);
00064     specattr.set(SpecifiedAttributesEncoding::Historizing);
00065     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00066     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00067     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00068 
00069     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00070     Attributes[AttributeId::Description] = attr.Description;
00071     Attributes[AttributeId::Value] = attr.Value;
00072     Attributes[AttributeId::DataType] = attr.Type;
00073     Attributes[AttributeId::ValueRank] = attr.Rank;
00074     Attributes[AttributeId::ArrayDimensions] = attr.Dimensions;
00075     Attributes[AttributeId::AccessLevel] = static_cast<uint8_t>(attr.AccessLevel);
00076     Attributes[AttributeId::UserAccessLevel] = static_cast<uint8_t>(attr.UserAccessLevel);
00077     Attributes[AttributeId::MinimumSamplingInterval] = attr.MinimumSamplingInterval;
00078     Attributes[AttributeId::Historizing] = attr.Historizing;
00079     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00080     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00081   }
00082 
00083   NodeAttributes::NodeAttributes(const MethodAttributes& attr)
00084   {
00085     Header.TypeId = ExpandedObjectId::MethodAttribute;
00086     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00087 
00088     std::bitset<32> specattr;
00089     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00090     specattr.set(SpecifiedAttributesEncoding::Description);
00091     specattr.set(SpecifiedAttributesEncoding::Executable);
00092     specattr.set(SpecifiedAttributesEncoding::UserExecutable);
00093     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00094     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00095     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00096 
00097     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00098     Attributes[AttributeId::Description] = attr.Description;
00099     Attributes[AttributeId::Executable] = attr.Executable;
00100     Attributes[AttributeId::UserExecutable] = attr.UserExecutable;
00101     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00102     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00103   }
00104   NodeAttributes::NodeAttributes(const ObjectTypeAttributes& attr)
00105   {
00106     Header.TypeId = ExpandedObjectId::ObjectTypeAttribute;
00107     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00108 
00109     std::bitset<32> specattr;
00110     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00111     specattr.set(SpecifiedAttributesEncoding::Description);
00112     specattr.set(SpecifiedAttributesEncoding::IsAbstract);
00113     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00114     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00115     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00116 
00117     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00118     Attributes[AttributeId::Description] = attr.Description;
00119     Attributes[AttributeId::IsAbstract] = attr.IsAbstract;
00120     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00121     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00122   }
00123 
00124   NodeAttributes::NodeAttributes(const VariableTypeAttributes& attr)
00125   {
00126     Header.TypeId = ExpandedObjectId::VariableTypeAttribute;
00127     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00128 
00129     std::bitset<32> specattr;
00130     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00131     specattr.set(SpecifiedAttributesEncoding::Description);
00132     specattr.set(SpecifiedAttributesEncoding::Value);
00133     specattr.set(SpecifiedAttributesEncoding::DataType);
00134     specattr.set(SpecifiedAttributesEncoding::ValueRank);
00135     specattr.set(SpecifiedAttributesEncoding::ArrayDimensions);
00136     specattr.set(SpecifiedAttributesEncoding::IsAbstract);
00137     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00138     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00139     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00140 
00141     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00142     Attributes[AttributeId::Description] = attr.Description;
00143     Attributes[AttributeId::Value] = attr.Value;
00144     Attributes[AttributeId::DataType] = attr.Type;
00145     Attributes[AttributeId::ValueRank] = attr.Rank;
00146     Attributes[AttributeId::IsAbstract] = attr.IsAbstract;
00147     Attributes[AttributeId::ArrayDimensions] = attr.Dimensions;
00148     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00149     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00150   }
00151 
00152   NodeAttributes::NodeAttributes(const ReferenceTypeAttributes& attr)
00153   {
00154     Header.TypeId = ExpandedObjectId::ReferenceTypeAttribute;
00155     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00156 
00157     std::bitset<32> specattr;
00158     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00159     specattr.set(SpecifiedAttributesEncoding::Description);
00160     specattr.set(SpecifiedAttributesEncoding::IsAbstract);
00161     specattr.set(SpecifiedAttributesEncoding::Symmetric);
00162     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00163     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00164     if (!attr.IsAbstract)
00165       specattr.set(SpecifiedAttributesEncoding::InverseName);
00166     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00167 
00168     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00169     Attributes[AttributeId::Description] = attr.Description;
00170     Attributes[AttributeId::IsAbstract] = attr.IsAbstract;
00171     Attributes[AttributeId::Symmetric] = attr.Symmetric;
00172     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00173     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00174     if (!attr.IsAbstract)
00175       Attributes[AttributeId::InverseName] = attr.InverseName;
00176   }
00177 
00178   NodeAttributes::NodeAttributes(const DataTypeAttributes& attr)
00179   {
00180     Header.TypeId = ExpandedObjectId::DataTypeAttribute;
00181     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00182 
00183     std::bitset<32> specattr;
00184     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00185     specattr.set(SpecifiedAttributesEncoding::Description);
00186     specattr.set(SpecifiedAttributesEncoding::IsAbstract);
00187     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00188     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00189     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00190 
00191     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00192     Attributes[AttributeId::Description] = attr.Description;
00193     Attributes[AttributeId::IsAbstract] = attr.IsAbstract;
00194     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00195     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00196   }
00197 
00198   NodeAttributes::NodeAttributes(const ViewAttributes& attr)
00199   {
00200     Header.TypeId = ExpandedObjectId::ViewAttribute;
00201     Header.Encoding  = static_cast<ExtensionObjectEncoding>(Header.Encoding | ExtensionObjectEncoding::HAS_BINARY_BODY);
00202 
00203     std::bitset<32> specattr;
00204     specattr.set(SpecifiedAttributesEncoding::DisplayName);
00205     specattr.set(SpecifiedAttributesEncoding::Description);
00206     specattr.set(SpecifiedAttributesEncoding::ContainsNoLoops);
00207     specattr.set(SpecifiedAttributesEncoding::WriteMask);
00208     specattr.set(SpecifiedAttributesEncoding::UserWriteMask);
00209     SpecifiedAttributes = (uint32_t) specattr.to_ulong();
00210 
00211     Attributes[AttributeId::DisplayName] = attr.DisplayName;
00212     Attributes[AttributeId::Description] = attr.Description;
00213     Attributes[AttributeId::ContainsNoLoops] = attr.ContainsNoLoops;
00214     Attributes[AttributeId::WriteMask] = attr.WriteMask;
00215     Attributes[AttributeId::UserWriteMask] = attr.UserWriteMask;
00216   }
00217 
00218 
00219 
00220   AddNodesRequest::AddNodesRequest()
00221     : TypeId(ADD_NODES_REQUEST)
00222   {
00223   }
00224 
00225   AddNodesResponse::AddNodesResponse()
00226     : TypeId(ADD_NODES_RESPONSE)
00227   {
00228   }
00229 
00230  AddReferencesRequest::AddReferencesRequest()
00231     : TypeId(ADD_REFERENCES_REQUEST)
00232   {
00233   }
00234 
00235   AddReferencesResponse::AddReferencesResponse()
00236     : TypeId(ADD_REFERENCES_RESPONSE)
00237   {
00238   }
00239 
00240   namespace Binary
00241   {
00242 
00243     //
00244     //AddNodeRequest
00245     //
00246 /*
00247     template<>
00248     std::size_t RawSize<ObjectAttributes>(const ObjectAttributes& val)
00249     {
00250       return RawSize(val.SpecifiedAttributes) + 
00251         RawSize(val.DisplayName) + 
00252         RawSize(val.Description) + 
00253         RawSize(val.EventNotifier) + 
00254         RawSize(val.WriteMask) + 
00255         RawSize(val.UserWriteMask)
00256         ;
00257     }
00258 
00259     template<>
00260     void DataSerializer::Serialize<ObjectAttributes>(const ObjectAttributes& val)
00261     {
00262       *this << val.SpecifiedAttributes;
00263       *this << val.DisplayName;
00264       *this << val.Description;
00265       *this << val.EventNotifier;
00266       *this << val.WriteMask;
00267       *this << val.UserWriteMask;
00268     }
00269 
00270     template<>
00271     void DataDeserializer::Deserialize<ObjectAttributes>(ObjectAttributes& val)
00272     {
00273       *this >> val.SpecifiedAttributes;
00274       *this >> val.DisplayName;
00275       *this >> val.Description;
00276       *this >> val.EventNotifier;
00277       *this >> val.WriteMask;
00278       *this >> val.UserWriteMask;
00279     }
00280 
00281     template<>
00282     std::size_t RawSize<VariableAttributes>(const VariableAttributes& val)
00283     {
00284       return RawSize(val.SpecifiedAttributes) + 
00285         RawSize(val.DisplayName) + 
00286         RawSize(val.Description) + 
00287         RawSize(val.Value) + 
00288         RawSize(val.Type) + 
00289         RawSize(val.Rank) + 
00290         RawSizeContainer(val.Dimensions) + 
00291         RawSize((uint8_t)val.AccessLevel) +
00292         RawSize((uint8_t)val.UserAccessLevel) +
00293         RawSize(val.MinimumSamplingInterval) + 
00294         RawSize(val.Historizing) + 
00295         RawSize(val.WriteMask) + 
00296         RawSize(val.UserWriteMask)
00297         ;
00298     }
00299 
00300     template<>
00301     void DataSerializer::Serialize<VariableAttributes>(const VariableAttributes& val)
00302     {
00303       *this << val.SpecifiedAttributes;
00304       *this << val.DisplayName;
00305       *this << val.Description;
00306       *this << val.Value;
00307       *this << val.Type;
00308       *this << val.Rank;
00309       *this << val.Dimensions;
00310       *this << (uint8_t)val.AccessLevel; // TODO
00311       *this << (uint8_t)val.UserAccessLevel; //TODO
00312       *this << val.MinimumSamplingInterval;
00313       *this << val.Historizing;
00314       *this << val.WriteMask;
00315       *this << val.UserWriteMask;
00316     }
00317 
00318     template<>
00319     void DataDeserializer::Deserialize<VariableAttributes>(VariableAttributes& val)
00320     {
00321       *this >> val.SpecifiedAttributes;
00322       *this >> val.DisplayName;
00323       *this >> val.Description;
00324       *this >> val.Value;
00325       *this >> val.Type;
00326       *this >> val.Rank;
00327       *this >> val.Dimensions;
00328       uint8_t tmp = 0;
00329       *this >> tmp; val.AccessLevel = static_cast<VariableAccessLevel>(tmp);
00330       *this >> tmp; val.UserAccessLevel = static_cast<VariableAccessLevel>(tmp);
00331       *this >> val.MinimumSamplingInterval;
00332       *this >> val.Historizing;
00333       *this >> val.WriteMask;
00334       *this >> val.UserWriteMask;
00335     }
00336 
00337 
00338     template<>
00339     std::size_t RawSize<MethodAttributes>(const MethodAttributes& val)
00340     {
00341       return RawSize(val.SpecifiedAttributes) + 
00342         RawSize(val.DisplayName) + 
00343         RawSize(val.Description) + 
00344         RawSize(val.Executable) + 
00345         RawSize(val.UserExecutable) + 
00346         RawSize(val.WriteMask) + 
00347         RawSize(val.UserWriteMask)
00348         ;
00349     }
00350 
00351     template<>
00352     void DataSerializer::Serialize<MethodAttributes>(const MethodAttributes& val)
00353     {
00354       *this << val.SpecifiedAttributes;
00355       *this << val.DisplayName;
00356       *this << val.Description;
00357       *this << val.Executable;
00358       *this << val.UserExecutable;
00359       *this << val.WriteMask;
00360       *this << val.UserWriteMask;
00361     }
00362 
00363     template<>
00364     void DataDeserializer::Deserialize<MethodAttributes>(MethodAttributes& val)
00365     {
00366       *this >> val.SpecifiedAttributes;
00367       *this >> val.DisplayName;
00368       *this >> val.Description;
00369       *this >> val.Executable;
00370       *this >> val.UserExecutable;
00371       *this >> val.WriteMask;
00372       *this >> val.UserWriteMask;
00373     }
00374 
00375     template<>
00376     std::size_t RawSize<ObjectTypeAttributes>(const ObjectTypeAttributes& val)
00377     {
00378       return RawSize(val.SpecifiedAttributes) + 
00379         RawSize(val.DisplayName) + 
00380         RawSize(val.Description) + 
00381         RawSize(val.IsAbstract) + 
00382         RawSize(val.WriteMask) + 
00383         RawSize(val.UserWriteMask)
00384         ;
00385     }
00386 
00387     template<>
00388     void DataSerializer::Serialize<ObjectTypeAttributes>(const ObjectTypeAttributes& val)
00389     {
00390       *this << val.SpecifiedAttributes;
00391       *this << val.DisplayName;
00392       *this << val.Description;
00393       *this << val.IsAbstract;
00394       *this << val.WriteMask;
00395       *this << val.UserWriteMask;
00396     }
00397 
00398     template<>
00399     void DataDeserializer::Deserialize<ObjectTypeAttributes>(ObjectTypeAttributes& val)
00400     {
00401       *this >> val.SpecifiedAttributes;
00402       *this >> val.DisplayName;
00403       *this >> val.Description;
00404       *this >> val.IsAbstract;
00405       *this >> val.WriteMask;
00406       *this >> val.UserWriteMask;
00407     }
00408 
00409 
00410     template<>
00411     std::size_t RawSize<VariableTypeAttributes>(const VariableTypeAttributes& val)
00412     {
00413       return RawSize(val.SpecifiedAttributes) + 
00414         RawSize(val.DisplayName) + 
00415         RawSize(val.Description) + 
00416         RawSize(val.Value) + 
00417         RawSize(val.Type) + 
00418         RawSize(val.Rank) + 
00419         RawSizeContainer(val.Dimensions) + 
00420         RawSize(val.IsAbstract) + 
00421         RawSize(val.WriteMask) + 
00422         RawSize(val.UserWriteMask)
00423         ;
00424     }
00425 
00426     template<>
00427     void DataSerializer::Serialize<VariableTypeAttributes>(const VariableTypeAttributes& val)
00428     {
00429       *this << val.SpecifiedAttributes;
00430       *this << val.DisplayName;
00431       *this << val.Description;
00432       *this << val.Value;
00433       *this << val.Type;
00434       *this << val.Rank;
00435       *this << val.Dimensions;
00436       *this << val.IsAbstract;
00437       *this << val.WriteMask;
00438       *this << val.UserWriteMask;
00439     }
00440 
00441     template<>
00442     void DataDeserializer::Deserialize<VariableTypeAttributes>(VariableTypeAttributes& val)
00443     {
00444       *this >> val.SpecifiedAttributes;
00445       *this >> val.DisplayName;
00446       *this >> val.Description;
00447       *this >> val.Value;
00448       *this >> val.Type;
00449       *this >> val.Rank;
00450       *this >> val.Dimensions;
00451       *this >> val.IsAbstract;
00452       *this >> val.WriteMask;
00453       *this >> val.UserWriteMask;
00454     }
00455 
00456 
00457     template<>
00458     std::size_t RawSize<ReferenceTypeAttributes>(const ReferenceTypeAttributes& val)
00459     {
00460       return RawSize(val.SpecifiedAttributes) + 
00461         RawSize(val.DisplayName) + 
00462         RawSize(val.Description) + 
00463         RawSize(val.IsAbstract) + 
00464         RawSize(val.Symmetric) + 
00465         RawSize(val.InverseName) + 
00466         RawSize(val.WriteMask) + 
00467         RawSize(val.UserWriteMask)
00468         ;
00469     }
00470 
00471     template<>
00472     void DataSerializer::Serialize<ReferenceTypeAttributes>(const ReferenceTypeAttributes& val)
00473     {
00474       *this << val.SpecifiedAttributes;
00475       *this << val.DisplayName;
00476       *this << val.Description;
00477       *this << val.IsAbstract;
00478       *this << val.Symmetric;
00479       *this << val.InverseName;
00480       *this << val.WriteMask;
00481       *this << val.UserWriteMask;
00482     }
00483 
00484     template<>
00485     void DataDeserializer::Deserialize<ReferenceTypeAttributes>(ReferenceTypeAttributes& val)
00486     {
00487       *this >> val.SpecifiedAttributes;
00488       *this >> val.DisplayName;
00489       *this >> val.Description;
00490       *this >> val.IsAbstract;
00491       *this >> val.Symmetric;
00492       *this >> val.InverseName;
00493       *this >> val.WriteMask;
00494       *this >> val.UserWriteMask;
00495     }
00496 
00497 
00498     template<>
00499     std::size_t RawSize<DataTypeAttributes>(const DataTypeAttributes& val)
00500     {
00501       return RawSize(val.SpecifiedAttributes) + 
00502         RawSize(val.DisplayName) + 
00503         RawSize(val.Description) + 
00504         RawSize(val.IsAbstract) + 
00505         RawSize(val.WriteMask) + 
00506         RawSize(val.UserWriteMask)
00507         ;
00508     }
00509 
00510     template<>
00511     void DataSerializer::Serialize<DataTypeAttributes>(const DataTypeAttributes& val)
00512     {
00513       *this << val.SpecifiedAttributes;
00514       *this << val.DisplayName;
00515       *this << val.Description;
00516       *this << val.IsAbstract;
00517       *this << val.WriteMask;
00518       *this << val.UserWriteMask;
00519     }
00520 
00521     template<>
00522     void DataDeserializer::Deserialize<DataTypeAttributes>(DataTypeAttributes& val)
00523     {
00524       *this >> val.SpecifiedAttributes;
00525       *this >> val.DisplayName;
00526       *this >> val.Description;
00527       *this >> val.IsAbstract;
00528       *this >> val.WriteMask;
00529       *this >> val.UserWriteMask;
00530     }
00531 
00532     template<>
00533     std::size_t RawSize<ViewAttributes>(const ViewAttributes& val)
00534     {
00535       return RawSize(val.SpecifiedAttributes) + 
00536         RawSize(val.DisplayName) + 
00537         RawSize(val.Description) + 
00538         RawSize(val.ContainsNoLoops) + 
00539         RawSize(val.WriteMask) + 
00540         RawSize(val.UserWriteMask)
00541         ;
00542     }
00543 
00544     template<>
00545     void DataSerializer::Serialize<ViewAttributes>(const ViewAttributes& val)
00546     {
00547       *this << val.SpecifiedAttributes;
00548       *this << val.DisplayName;
00549       *this << val.Description;
00550       *this << val.ContainsNoLoops;
00551       *this << val.WriteMask;
00552       *this << val.UserWriteMask;
00553     }
00554 
00555     // TODO Seems doesn't required because there is serialization of NodeAttributes
00556     // TODO Exact attributes have to be initialized from node attributes which will serialize.
00557     template<>
00558     void DataDeserializer::Deserialize<ViewAttributes>(ViewAttributes& val)
00559     {
00560       *this >> val.SpecifiedAttributes;
00561       *this >> val.DisplayName;
00562       *this >> val.Description;
00563       *this >> val.ContainsNoLoops;
00564       *this >> val.WriteMask;
00565       *this >> val.UserWriteMask;
00566     }
00567 */
00568 
00569 
00570     std::size_t RawSizeBodyNodeAttributes(const NodeAttributes& val)
00571     {
00572       size_t total = 0;
00573       total += RawSize(val.SpecifiedAttributes);
00574       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DisplayName))
00575       {
00576         total += RawSize(val.Attributes.find(AttributeId::DisplayName)->second.As<LocalizedText>()); //We assume the attr exists!!!
00577       }
00578       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Description))
00579       {
00580         total += RawSize(val.Attributes.find(AttributeId::Description)->second.As<LocalizedText>());
00581       }
00582       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::EventNotifier))
00583       {
00584         total += 1;//RawSize(val.Attributes.find(AttributeId::EventNotifier)->second.Value.U);
00585       }
00586       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Value))
00587       {
00588         total += RawSize(val.Attributes.find(AttributeId::Value)->second);
00589       }
00590       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DataType))
00591       {
00592         total += RawSize(val.Attributes.find(AttributeId::DataType)->second.As<NodeId>());
00593       }
00594       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ValueRank))
00595       {
00596         total += 4;
00597       }
00598       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ArrayDimensions))
00599       {
00600         total += RawSizeContainer(val.Attributes.find(AttributeId::ArrayDimensions)->second.As<std::vector<uint32_t>>());
00601       }
00602       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::AccessLevel))
00603       {
00604         total += 1;
00605       }
00606       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserAccessLevel))
00607       {
00608         total += 1;
00609       }
00610       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::MinimumSamplingInterval))
00611       {
00612         total += sizeof(double);
00613       }
00614       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Historizing))
00615       {
00616         total += sizeof(bool);
00617       }
00618       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Executable))
00619       {
00620       }
00621       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserExecutable))
00622       {
00623       }
00624       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::IsAbstract))
00625       {
00626       }
00627       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Symmetric))
00628       {
00629       }
00630       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::InverseName))
00631       {
00632       }
00633       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ContainsNoLoops))
00634       {
00635       }
00636       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::WriteMask))
00637       {
00638         total += 4;
00639       }
00640       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserWriteMask))
00641       {
00642         total += 4;
00643       }
00644 
00645       return total;
00646 
00647     }
00648 
00649 
00650     template<>
00651     std::size_t RawSize<NodeAttributes>(const NodeAttributes& val)
00652     {
00653       size_t total = 0;
00654       total += RawSize(val.Header);
00655       total += 4 ; //uint32_t size body
00656       total += RawSizeBodyNodeAttributes(val) ;
00657       return total;
00658     }
00659 
00660 
00661 
00662     template<>
00663     void DataSerializer::Serialize<NodeAttributes>(const NodeAttributes& val)
00664     {
00665       *this << val.Header;
00666       *this << (int32_t) RawSizeBodyNodeAttributes(val); //debug
00667       *this << val.SpecifiedAttributes;
00668       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DisplayName))
00669       {
00670         *this << val.Attributes.find(AttributeId::DisplayName)->second.As<LocalizedText>();
00671       }
00672       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Description))
00673       {
00674         *this << val.Attributes.find(AttributeId::Description)->second.As<LocalizedText>();
00675       }
00676       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::WriteMask))
00677       {
00678         *this << val.Attributes.find(AttributeId::WriteMask)->second.As<uint32_t>();
00679       }
00680       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserWriteMask))
00681       {
00682         *this << val.Attributes.find(AttributeId::UserWriteMask)->second.As<uint32_t>();
00683       }
00684       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::EventNotifier))
00685       {
00686         *this << (uint8_t) val.Attributes.find(AttributeId::EventNotifier)->second.As<uint8_t>();
00687       }
00688       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Value))
00689       {
00690         *this << val.Attributes.find(AttributeId::Value)->second;
00691       }
00692       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DataType))
00693       {
00694         *this << val.Attributes.find(AttributeId::DataType)->second.As<NodeId>();
00695       }
00696       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ValueRank))
00697       {
00698         *this << val.Attributes.find(AttributeId::ValueRank)->second.As<int32_t>();
00699       }
00700       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ArrayDimensions))
00701       {
00702         *this << val.Attributes.find(AttributeId::ArrayDimensions)->second.As<std::vector<uint32_t>>();
00703       }
00704       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::AccessLevel))
00705       {
00706         *this << val.Attributes.find(AttributeId::AccessLevel)->second.As<uint8_t>();
00707       }
00708       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserAccessLevel))
00709       {
00710         *this << val.Attributes.find(AttributeId::UserAccessLevel)->second.As<uint8_t>();
00711       }
00712       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::MinimumSamplingInterval))
00713       {
00714         *this << val.Attributes.find(AttributeId::MinimumSamplingInterval)->second.As<double>();
00715       }
00716       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Historizing))
00717       {
00718         *this << val.Attributes.find(AttributeId::Historizing)->second.As<bool>();
00719       }
00720       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Executable))
00721       {
00722         *this << val.Attributes.find(AttributeId::Executable)->second.As<bool>();
00723       }
00724       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserExecutable))
00725       {
00726         *this << val.Attributes.find(AttributeId::UserExecutable)->second.As<bool>();
00727       }
00728       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::IsAbstract))
00729       {
00730         *this << val.Attributes.find(AttributeId::IsAbstract)->second.As<bool>();
00731       }
00732       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Symmetric))
00733       {
00734         *this << val.Attributes.find(AttributeId::Symmetric)->second.As<bool>();
00735       }
00736       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::InverseName))
00737       {
00738         *this << val.Attributes.find(AttributeId::InverseName)->second.As<LocalizedText>();
00739       }
00740       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ContainsNoLoops))
00741       {
00742         *this << val.Attributes.find(AttributeId::ContainsNoLoops)->second.As<bool>();
00743       }
00744 
00745     }
00746 
00747     template<>
00748     void DataDeserializer::Deserialize<NodeAttributes>(NodeAttributes& val)
00749     {
00750       *this >> val.Header;
00751       int32_t size;
00752       *this >> size ; // not used yet
00753       *this >> val.SpecifiedAttributes;
00754 
00755       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DisplayName))
00756       {
00757         LocalizedText tmp;
00758         *this >> tmp;
00759         val.Attributes[AttributeId::DisplayName] = tmp;
00760       }
00761       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Description))
00762       {
00763         LocalizedText tmp;
00764         *this >> tmp;
00765         val.Attributes[AttributeId::Description] = tmp;
00766       }
00767       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::WriteMask))
00768       {
00769         uint32_t tmp;
00770         *this >> tmp;
00771         val.Attributes[AttributeId::WriteMask] = tmp;
00772       }
00773       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserWriteMask))
00774       {
00775         uint32_t tmp;
00776         *this >> tmp;
00777         val.Attributes[AttributeId::UserWriteMask] = tmp;
00778       }
00779       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::EventNotifier))
00780       {
00781         uint8_t tmp;
00782         *this >> tmp;
00783         val.Attributes[AttributeId::EventNotifier] = tmp;
00784       }
00785       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Value))
00786       {
00787         Variant tmp;
00788         *this >> tmp;
00789         val.Attributes[AttributeId::Value] = tmp;
00790       }
00791       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::DataType))
00792       {
00793         NodeId tmp;
00794         *this >> tmp;
00795         val.Attributes[AttributeId::DataType] = tmp;
00796       }
00797       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ValueRank))
00798       {
00799         int32_t tmp;
00800         *this >> tmp;
00801         val.Attributes[AttributeId::ValueRank] = tmp;
00802       }
00803       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ArrayDimensions))
00804       {
00805         std::vector<uint32_t> tmp;
00806         *this >> tmp;
00807         val.Attributes[AttributeId::ArrayDimensions] = tmp;
00808       }
00809       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::AccessLevel))
00810       {
00811         uint8_t tmp;
00812         *this >> tmp;
00813         val.Attributes[AttributeId::AccessLevel] = tmp;
00814       }
00815       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserAccessLevel))
00816       {
00817         uint8_t tmp;
00818         *this >> tmp;
00819         val.Attributes[AttributeId::UserAccessLevel] = tmp;
00820       }
00821       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::MinimumSamplingInterval))
00822       {
00823         Duration tmp;
00824         *this >> tmp;
00825         val.Attributes[AttributeId::MinimumSamplingInterval] = tmp;
00826       }
00827       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Historizing))
00828       {
00829         bool tmp;
00830         *this >> tmp;
00831         val.Attributes[AttributeId::Historizing] = tmp;
00832       }
00833       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Executable))
00834       {
00835       }
00836       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::UserExecutable))
00837       {
00838       }
00839       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::IsAbstract))
00840       {
00841       }
00842       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::Symmetric))
00843       {
00844       }
00845       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::InverseName))
00846       {
00847       }
00848       if (std::bitset<32>(val.SpecifiedAttributes).test(SpecifiedAttributesEncoding::ContainsNoLoops))
00849       {
00850       }
00851 
00852     }
00853 
00854     template<>
00855     std::size_t RawSize<AddNodesItem>(const AddNodesItem& resp)
00856     {
00857       return RawSize(resp.ParentNodeId) + 
00858         RawSize(resp.ReferenceTypeId) +
00859         RawSize(resp.RequestedNewNodeId) +
00860         RawSize(resp.BrowseName) +
00861         RawSize(resp.Class) +
00862         RawSize(resp.Attributes) +
00863         RawSize(resp.TypeDefinition);
00864     }
00865 
00866     template<>
00867     void DataSerializer::Serialize<AddNodesItem>(const AddNodesItem& resp)
00868     {
00869       *this << resp.ParentNodeId;
00870       *this << resp.ReferenceTypeId;
00871       *this << resp.RequestedNewNodeId;
00872       *this << resp.BrowseName;
00873       *this << resp.Class;
00874       *this << resp.Attributes;
00875       *this << resp.TypeDefinition;
00876     }
00877 
00878     template<>
00879     void DataDeserializer::Deserialize<AddNodesItem>(AddNodesItem& resp)
00880     {
00881       *this >> resp.ParentNodeId;
00882       *this >> resp.ReferenceTypeId;
00883       *this >> resp.RequestedNewNodeId;
00884       *this >> resp.BrowseName;
00885       *this >> resp.Class;
00886       *this >> resp.Attributes;
00887       *this >> resp.TypeDefinition;
00888     }
00889 
00890     template<>
00891     std::size_t RawSize(const std::vector<AddNodesItem>& ack)
00892     {
00893       return RawSizeContainer(ack);
00894     }
00895 
00896 
00897     template<>
00898     void DataDeserializer::Deserialize<std::vector<AddNodesItem>>(std::vector<AddNodesItem>& ack)
00899     {
00900       DeserializeContainer(*this, ack);
00901     }
00902 
00903     template<>
00904     void DataSerializer::Serialize<std::vector<AddNodesItem>>(const std::vector<AddNodesItem>& ack)
00905     {
00906       SerializeContainer(*this, ack);
00907     }
00908 
00909     template<>
00910     std::size_t RawSize<AddNodesParameters>(const AddNodesParameters& val)
00911     {
00912       return RawSize(val.NodesToAdd);
00913     }
00914 
00915     template<>
00916     void DataSerializer::Serialize<AddNodesParameters>(const AddNodesParameters& val)
00917     {
00918       *this << val.NodesToAdd;
00919     }
00920 
00921     template<>
00922     void DataDeserializer::Deserialize<AddNodesParameters>(AddNodesParameters& resp)
00923     {
00924       *this >> resp.NodesToAdd;
00925     }
00926 
00927 
00928 
00929     template<>
00930     std::size_t RawSize<AddNodesRequest>(const AddNodesRequest& resp)
00931     {
00932       return RawSize(resp.TypeId) + RawSize(resp.Header) + RawSize(resp.Parameters);
00933     }
00934 
00935     template<>
00936     void DataSerializer::Serialize<AddNodesRequest>(const AddNodesRequest& resp)
00937     {
00938       *this << resp.TypeId;
00939       *this << resp.Header;
00940       *this << resp.Parameters;
00941     }
00942 
00943     template<>
00944     void DataDeserializer::Deserialize<AddNodesRequest>(AddNodesRequest& resp)
00945     {
00946       *this >> resp.TypeId;
00947       *this >> resp.Header;
00948       *this >> resp.Parameters;
00949     }
00950 
00951     template<>
00952     std::size_t RawSize<AddNodesResult>(const AddNodesResult& resp)
00953     {
00954       return RawSize(resp.Status) + RawSize(resp.AddedNodeId);
00955     }
00956 
00957     template<>
00958     void DataSerializer::Serialize<AddNodesResult>(const AddNodesResult& resp)
00959     {
00960       *this << resp.Status;
00961       *this << resp.AddedNodeId;
00962     }
00963 
00964     template<>
00965     void DataDeserializer::Deserialize<AddNodesResult>(AddNodesResult& resp)
00966     {
00967       *this >> resp.Status;
00968       *this >> resp.AddedNodeId;
00969     }
00970 
00971 
00972     template<>
00973     void DataDeserializer::Deserialize<std::vector<AddNodesResult>>(std::vector<AddNodesResult>& ack)
00974     {
00975       DeserializeContainer(*this, ack);
00976     }
00977 
00978     template<>
00979     void DataSerializer::Serialize<std::vector<AddNodesResult>>(const std::vector<AddNodesResult>& ack)
00980     {
00981       SerializeContainer(*this, ack);
00982     }
00983 
00984 
00985 
00986 
00987 
00988 
00989     template<>
00990     std::size_t RawSize<AddNodesResponse>(const AddNodesResponse& resp)
00991     {
00992       return RawSize(resp.TypeId) + RawSize(resp.Header) + RawSizeContainer(resp.results) + RawSize(resp.Diagnostics);
00993     }
00994 
00995     template<>
00996     void DataSerializer::Serialize<AddNodesResponse>(const AddNodesResponse& resp)
00997     {
00998       *this << resp.TypeId;
00999       *this << resp.Header;
01000       *this << resp.results;
01001       *this << resp.Diagnostics;
01002     }
01003 
01004     template<>
01005     void DataDeserializer::Deserialize<AddNodesResponse>(AddNodesResponse& resp)
01006     {
01007       *this >> resp.TypeId;
01008       *this >> resp.Header;
01009       *this >> resp.results;
01010       *this >> resp.Diagnostics;
01011     }
01012 
01013   
01014     //
01015     // AddReferences
01016     //
01017 
01018 
01019 
01020 
01021     template<>
01022     std::size_t RawSize<AddReferencesResponse>(const AddReferencesResponse& resp)
01023     {
01024       return RawSize(resp.TypeId) + RawSize(resp.Header) + RawSizeContainer(resp.Results) + RawSize(resp.Diagnostics);
01025     }
01026 
01027     template<>
01028     void DataSerializer::Serialize<AddReferencesResponse>(const AddReferencesResponse& resp)
01029     {
01030       *this << resp.TypeId;
01031       *this << resp.Header;
01032       *this << resp.Results;
01033       *this << resp.Diagnostics;
01034     }
01035 
01036     template<>
01037     void DataDeserializer::Deserialize<AddReferencesResponse>(AddReferencesResponse& resp)
01038     {
01039       *this >> resp.TypeId;
01040       *this >> resp.Header;
01041       *this >> resp.Results;
01042       *this >> resp.Diagnostics;
01043     }
01044 
01045      template<>
01046     std::size_t RawSize<AddReferencesItem>(const AddReferencesItem& val)
01047     {
01048       return RawSize(val.SourceNodeId) + 
01049         RawSize(val.ReferenceTypeId) + 
01050         RawSize(val.IsForward) + 
01051         RawSize(val.TargetServerUri) + 
01052         RawSize(val.TargetNodeId) + 
01053         RawSize(val.TargetNodeClass)
01054         ;
01055     }
01056 
01057     template<>
01058     void DataSerializer::Serialize<AddReferencesItem>(const AddReferencesItem& val)
01059     {
01060       *this << val.SourceNodeId;
01061       *this << val.ReferenceTypeId;
01062       *this << val.IsForward;
01063       *this << val.TargetServerUri;
01064       *this << val.TargetNodeId;
01065       *this << val.TargetNodeClass;
01066     }
01067 
01068     template<>
01069     void DataDeserializer::Deserialize<AddReferencesItem>(AddReferencesItem& val)
01070     {
01071       *this >> val.SourceNodeId;
01072       *this >> val.ReferenceTypeId;
01073       *this >> val.IsForward;
01074       *this >> val.TargetServerUri;
01075       *this >> val.TargetNodeId;
01076       *this >> val.TargetNodeClass;
01077     }
01078 
01079     template<>
01080     std::size_t RawSize(const std::vector<AddReferencesItem>& ack)
01081     {
01082       return RawSizeContainer(ack);
01083     }
01084 
01085 
01086 
01087     template<>
01088     void DataDeserializer::Deserialize<std::vector<AddReferencesItem>>(std::vector<AddReferencesItem>& ack)
01089     {
01090       DeserializeContainer(*this, ack);
01091     }
01092 
01093     template<>
01094     void DataSerializer::Serialize<std::vector<AddReferencesItem>>(const std::vector<AddReferencesItem>& ack)
01095     {
01096       SerializeContainer(*this, ack);
01097     }
01098 
01099 
01100      template<>
01101     std::size_t RawSize<AddReferencesParameters>(const AddReferencesParameters& val)
01102     {
01103       return RawSizeContainer(val.ReferencesToAdd);
01104     }
01105 
01106     template<>
01107     void DataSerializer::Serialize<AddReferencesParameters>(const AddReferencesParameters& val)
01108     {
01109       *this << val.ReferencesToAdd;
01110     }
01111 
01112     template<>
01113     void DataDeserializer::Deserialize<AddReferencesParameters>(AddReferencesParameters& val)
01114     {
01115       *this >> val.ReferencesToAdd;
01116     }
01117 
01118 
01119 
01120 
01121      template<>
01122     std::size_t RawSize<AddReferencesRequest>(const AddReferencesRequest& val)
01123     {
01124       return RawSize(val.TypeId) +  RawSize(val.Header) + 
01125         RawSize(val.Parameters)
01126         ;
01127     }
01128 
01129     template<>
01130     void DataSerializer::Serialize<AddReferencesRequest>(const AddReferencesRequest& val)
01131     {
01132       *this << val.TypeId;
01133       *this << val.Header;
01134       *this << val.Parameters;
01135     }
01136 
01137     template<>
01138     void DataDeserializer::Deserialize<AddReferencesRequest>(AddReferencesRequest& val)
01139     {
01140       *this >> val.TypeId;
01141       *this >> val.Header;
01142       *this >> val.Parameters;
01143     }
01144 
01145 
01146 
01147 
01148   } // namespace Binary
01149 
01150   const char* GetObjectIdName(const NodeId& id)
01151   {
01152     if ( id == ObjectId::FolderType )
01153     {
01154       return Names::FolderType;
01155     }
01156     else if ( id == ObjectId::BaseVariableType )
01157     {
01158       return Names::BaseVariableType;
01159     }
01160     else if ( id == ObjectId::BaseDataVariableType )
01161     {
01162       return Names::BaseDataVariableType;
01163     }
01164     else if ( id == ObjectId::PropertyType )
01165     {
01166       return Names::PropertyType;
01167     }
01168     else if ( id == ObjectId::BaseObjectType )
01169     {
01170       return Names::BaseObjectType;
01171     }
01172     else if (id == ObjectId::ModellingRule_Mandatory)
01173     {
01174       return Names::ModellingRule_Mandatory;
01175     }
01176     else if ( id == ObjectId::ServerType )
01177     {
01178       return Names::ServerType;
01179     }
01180     return "NoNameFound";
01181   }
01182 
01183 }


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Sat Jun 8 2019 18:24:39