Sfoglia il codice sorgente

refactor(server): use ziptree macros in UA_Node_copy

Andranik Simonian 5 anni fa
parent
commit
c35a083bd0
1 ha cambiato i file con 18 aggiunte e 17 eliminazioni
  1. 18 17
      src/server/ua_nodes.c

+ 18 - 17
src/server/ua_nodes.c

@@ -205,24 +205,25 @@ UA_Node_copy(const UA_Node *src, UA_Node *dst) {
             }
             uintptr_t arraydiff = (uintptr_t)drefs->refTargets - (uintptr_t)srefs->refTargets;
             for(size_t j = 0; j < srefs->refTargetsSize; j++) {
-                retval |= UA_ExpandedNodeId_copy(&srefs->refTargets[j].target,
-                                                 &drefs->refTargets[j].target);
-                drefs->refTargets[j].targetHash = srefs->refTargets[j].targetHash;
-                drefs->refTargets[j].zipfields.zip_right = NULL;
-                if(srefs->refTargets[j].zipfields.zip_right)
-                    *(uintptr_t*)&drefs->refTargets[j].zipfields.zip_right =
-                        (uintptr_t)srefs->refTargets[j].zipfields.zip_right + arraydiff;
-                drefs->refTargets[j].zipfields.zip_left = NULL;
-                if(srefs->refTargets[j].zipfields.zip_left)
-                    *(uintptr_t*)&drefs->refTargets[j].zipfields.zip_left =
-                        (uintptr_t)srefs->refTargets[j].zipfields.zip_left + arraydiff;
-                drefs->refTargets[j].zipfields.rank = srefs->refTargets[j].zipfields.rank;
+                UA_ReferenceTarget *srefTarget = &srefs->refTargets[j];
+                UA_ReferenceTarget *drefTarget = &drefs->refTargets[j];
+                retval |= UA_ExpandedNodeId_copy(&srefTarget->target, &drefTarget->target);
+                drefTarget->targetHash = srefTarget->targetHash;
+                ZIP_RIGHT(drefTarget, zipfields) = NULL;
+                if(ZIP_RIGHT(srefTarget, zipfields))
+                    *(uintptr_t*)&ZIP_RIGHT(drefTarget, zipfields) =
+                        (uintptr_t)ZIP_RIGHT(srefTarget, zipfields) + arraydiff;
+                ZIP_LEFT(drefTarget, zipfields) = NULL;
+                if(ZIP_LEFT(srefTarget, zipfields))
+                    *(uintptr_t*)&ZIP_LEFT(drefTarget, zipfields) =
+                        (uintptr_t)ZIP_LEFT(srefTarget, zipfields) + arraydiff;
+                ZIP_RANK(drefTarget, zipfields) = ZIP_RANK(srefTarget, zipfields);
             }
-            drefs->refTargetsTree.zip_root = NULL;
-            if(srefs->refTargetsTree.zip_root)
-                *(uintptr_t*)&drefs->refTargetsTree.zip_root =
-                    (uintptr_t)srefs->refTargetsTree.zip_root + arraydiff;
-            drefs->refTargetsSize= srefs->refTargetsSize;
+            ZIP_ROOT(&drefs->refTargetsTree) = NULL;
+            if(ZIP_ROOT(&srefs->refTargetsTree))
+                *(uintptr_t*)&ZIP_ROOT(&drefs->refTargetsTree) =
+                    (uintptr_t)ZIP_ROOT(&srefs->refTargetsTree) + arraydiff;
+            drefs->refTargetsSize = srefs->refTargetsSize;
             if(retval != UA_STATUSCODE_GOOD)
                 break;
         }