jenkins-bot has submitted this change and it was merged.

Change subject: [BREAKING CHANGE] Generalize ve.compareOffsetPaths() to 
ve.compareTuples()
......................................................................


[BREAKING CHANGE] Generalize ve.compareOffsetPaths() to ve.compareTuples()

ve.compareOffsetPaths() was essentially a generic tuple comparator
already. This commit makes its behavior for tuples of different
lengths more useful and renames it to ve.compareTuples().

Change-Id: I693129cfbdb061099a9fa14779c07b8b9d2d7363
---
M src/ve.utils.js
1 file changed, 24 insertions(+), 11 deletions(-)

Approvals:
  Krinkle: Looks good to me, approved
  Jforrester: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/src/ve.utils.js b/src/ve.utils.js
index cf63d0e..a95443d 100644
--- a/src/ve.utils.js
+++ b/src/ve.utils.js
@@ -1234,20 +1234,34 @@
 };
 
 /**
- * Compare two offset paths for position in document
+ * Compare two tuples in lexicographical order.
  *
- * @param {number[]} path1 First offset path
- * @param {number[]} path2 Second offset path
- * @return {number} negative, zero or positive number
+ * This function first compares `a[0]` with `b[0]`, then `a[1]` with `b[1]`, 
etc.
+ * until it encounters a pair where `a[k] != b[k]`; then returns `a[k] - b[k]`.
+ *
+ * If `a[k] == b[k]` for every `k`, this function returns 0.
+ *
+ * If a and b are of unequal length, but `a[k] == b[k]` for all `k` that exist 
in both a and b, then
+ * this function returns `Infinity` (if a is longer) or `-Infinity` (if b is 
longer).
+ *
+ * @param {number[]} a First tuple
+ * @param {number[]} b Second tuple
+ * @return {number} `a[k] - b[k]` where k is the lowest k such that `a[k] != 
b[k]`
  */
-ve.compareOffsetPaths = function ( path1, path2 ) {
+ve.compareTuples = function ( a, b ) {
        var i, len;
-       for ( i = 0, len = Math.min( path1.length, path2.length ); i < len; i++ 
) {
-               if ( path1[ i ] !== path2[ i ] ) {
-                       return path1[ i ] - path2[ i ];
+       for ( i = 0, len = Math.min( a.length, b.length ); i < len; i++ ) {
+               if ( a[i] !== b[i] ) {
+                       return a[i] - b[i];
                }
        }
-       return path1.length - path2.length;
+       if ( a.length > b.length ) {
+               return Infinity;
+       }
+       if ( a.length < b.length ) {
+               return -Infinity;
+       }
+       return 0;
 };
 
 /**
@@ -1260,12 +1274,11 @@
  * @return {number} negative, zero or positive number
  */
 ve.compareDocumentOrder = function ( node1, offset1, node2, offset2 ) {
-
        var commonAncestor = ve.getCommonAncestor( node1, node2 );
        if ( commonAncestor === null ) {
                throw new Error( 'No common ancestor' );
        }
-       return ve.compareOffsetPaths(
+       return ve.compareTuples(
                ve.getOffsetPath( commonAncestor, node1, offset1 ),
                ve.getOffsetPath( commonAncestor, node2, offset2 )
        );

-- 
To view, visit https://gerrit.wikimedia.org/r/203473
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I693129cfbdb061099a9fa14779c07b8b9d2d7363
Gerrit-PatchSet: 3
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Catrope <roan.katt...@gmail.com>
Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org>
Gerrit-Reviewer: Krinkle <krinklem...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to