浏览代码

Core: More intuitive ordering of GUID node ids

melkorb 4 年之前
父节点
当前提交
f7e5c24125
共有 1 个文件被更改,包括 18 次插入10 次删除
  1. 18 10
      src/ua_types.c

+ 18 - 10
src/ua_types.c

@@ -309,18 +309,26 @@ UA_NodeId_order(const UA_NodeId *n1, const UA_NodeId *n2) {
             return UA_ORDER_MORE;
         break;
     case UA_NODEIDTYPE_GUID:
-        if(n1->identifier.guid.data1 < n2->identifier.guid.data1 ||
-           n1->identifier.guid.data2 < n2->identifier.guid.data2 ||
-           n1->identifier.guid.data3 < n2->identifier.guid.data3 ||
-           strncmp((const char*)n1->identifier.guid.data4,
-                   (const char*)n2->identifier.guid.data4, 8) < 0)
+        if(n1->identifier.guid.data1 < n2->identifier.guid.data1) {
             return UA_ORDER_LESS;
-        if(n1->identifier.guid.data1 > n2->identifier.guid.data1 ||
-           n1->identifier.guid.data2 > n2->identifier.guid.data2 ||
-           n1->identifier.guid.data3 > n2->identifier.guid.data3 ||
-           strncmp((const char*)n1->identifier.guid.data4,
-                   (const char*)n2->identifier.guid.data4, 8) > 0)
+        } else if(n1->identifier.guid.data1 > n2->identifier.guid.data1) {
             return UA_ORDER_MORE;
+        } else if(n1->identifier.guid.data2 < n2->identifier.guid.data2) {
+            return UA_ORDER_LESS;
+        } else if(n1->identifier.guid.data2 > n2->identifier.guid.data2) {
+            return UA_ORDER_MORE;
+        } else if(n1->identifier.guid.data3 < n2->identifier.guid.data3) {
+            return UA_ORDER_LESS;
+        } else if(n1->identifier.guid.data3 > n2->identifier.guid.data3) {
+            return UA_ORDER_MORE;
+        } else {
+            int cmp = memcmp(n1->identifier.guid.data4, n2->identifier.guid.data4, 8);
+
+            if(cmp < 0) return UA_ORDER_LESS;
+            if(cmp > 0) return UA_ORDER_MORE;
+
+        }
+
         break;
     case UA_NODEIDTYPE_STRING:
     case UA_NODEIDTYPE_BYTESTRING: {