Browse Source

creating an "IS_BUILTIN" macro

Stasik0 10 years ago
parent
commit
b8f57b1cdf
3 changed files with 5 additions and 3 deletions
  1. 2 0
      include/ua_types.h
  2. 1 1
      src/server/ua_server.c
  3. 2 2
      src/ua_types_encoding_binary.c

+ 2 - 0
include/ua_types.h

@@ -449,6 +449,8 @@ UA_StatusCode UA_EXPORT UA_Variant_copySetArray(UA_Variant *v, const void *array
 # define UA_BITFIELD(SIZE)
 #endif
 
+#define UA_IS_BUILTIN(ID) (ID <= UA_TYPES_DIAGNOSTICINFO)
+
 typedef struct {
     UA_UInt16 memberTypeIndex UA_BITFIELD(9); ///< Index of the member in the datatypetable
     UA_Boolean namespaceZero UA_BITFIELD(1); /**< The type of the member is defined in namespace

+ 1 - 1
src/server/ua_server.c

@@ -726,7 +726,7 @@ UA_Server * UA_Server_new(void) {
 		   UA_EXPANDEDNODEID_STATIC(0, UA_NS0ID_FOLDERTYPE));
 
    UA_UInt32 id = 1000; //running id in namespace 1
-   for(UA_UInt32 type = 0; type <= UA_TYPES_DIAGNOSTICINFO; type++) {
+   for(UA_UInt32 type = 0; UA_IS_BUILTIN(type); type++) {
        if(type == UA_TYPES_VARIANT || type == UA_TYPES_DIAGNOSTICINFO)
            continue;
 	   //add a scalar node for every built-in type

+ 2 - 2
src/ua_types_encoding_binary.c

@@ -692,7 +692,7 @@ size_t UA_Variant_calcSizeBinary(UA_Variant const *p) {
         length += UA_Array_calcSizeBinary(p->dataPtr, arrayLength, p->type);
         
     // if the type is not builtin, we encode it as an extensionobject
-    if(p->type->typeIndex > UA_TYPES_DIAGNOSTICINFO || !p->type->namespaceZero)
+    if(!UA_IS_BUILTIN(p->type->typeIndex) || !p->type->namespaceZero)
         length += 9 * arrayLength;  // overhead for extensionobjects: 4 byte nodeid + 1 byte
                                     // encoding + 4 byte bytestring length
     if(arrayLength != 1 && p->arrayDimensions != UA_NULL)
@@ -705,7 +705,7 @@ UA_StatusCode UA_Variant_encodeBinary(UA_Variant const *src, UA_ByteString *dst,
     UA_Byte encodingByte = 0;
     UA_Boolean isArray = src->arrayLength != 1;  // a single element is not an array
     UA_Boolean hasDimensions = isArray && src->arrayDimensions != UA_NULL;
-    UA_Boolean isBuiltin = src->type->namespaceZero && src->type->typeIndex <= UA_TYPES_DIAGNOSTICINFO;
+    UA_Boolean isBuiltin = src->type->namespaceZero && UA_IS_BUILTIN(src->type->typeIndex);
 
     if(isArray) {
         encodingByte |= UA_VARIANT_ENCODINGMASKTYPE_ARRAY;