From c5fe88455146ca948b28f85b39b1554d99529b20 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Sun, 5 Feb 2023 01:33:46 +0100 Subject: Cursor comparison bugfix with empty cursors (and null values). --- .../main/java/tools/refinery/store/map/internal/MapCursor.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'subprojects/store') diff --git a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapCursor.java b/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapCursor.java index f874137b..50fcfcd3 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapCursor.java +++ b/subprojects/store/src/main/java/tools/refinery/store/map/internal/MapCursor.java @@ -117,7 +117,12 @@ public class MapCursor implements Cursor { * same position. */ public static int compare(MapCursor cursor1, MapCursor cursor2) { - // two cursors are equally deep + // Checking the state of the cursors + if(!cursor1.isTerminated() && cursor2.isTerminated()) return -1; + else if(cursor1.isTerminated() && !cursor2.isTerminated()) return 1; + else if(cursor1.isTerminated() && cursor2.isTerminated()) return 0; + + // If the state does not determine the order, then compare @nodeIndexStack. Iterator stack1 = cursor1.nodeIndexStack.descendingIterator(); Iterator stack2 = cursor2.nodeIndexStack.descendingIterator(); if (stack1.hasNext()) { @@ -137,6 +142,8 @@ public class MapCursor implements Cursor { // stack 2 has more element, thus stack 2 is deeper return 1; } + + // two cursors are equally deep decide by data index return Integer.compare(cursor1.dataIndex, cursor2.dataIndex); } } -- cgit v1.2.3-70-g09d2