loleaflet/src/layer/tile/CalcTileLayer.js |   68 +++++++-----------------------
 1 file changed, 18 insertions(+), 50 deletions(-)

New commits:
commit 36b7efc1ee79c54e7294fdb5f78f76adf20c4456
Author:     Dennis Francis <dennis.fran...@collabora.com>
AuthorDate: Sat May 16 14:12:10 2020 +0530
Commit:     Dennis Francis <dennis.fran...@collabora.com>
CommitDate: Sun Jul 5 10:02:19 2020 +0200

    Reuse binarySearch routine in L.SpanList search functions
    
    Change-Id: I2f5411ef4da6b236978c08e3ea03ee05f9c8dabc
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/97949
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Dennis Francis <dennis.fran...@collabora.com>

diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js 
b/loleaflet/src/layer/tile/CalcTileLayer.js
index 0b540acdf..b7b122ae3 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -1259,61 +1259,29 @@ L.SpanList = L.Class.extend({
 
        _searchByIndex: function (index) {
 
-               if (index < 0 || index > this._spanlist[this._spanlist.length - 
1].index) {
-                       return -1;
-               }
-
-               var start = 0;
-               var end = this._spanlist.length - 1;
-               var mid = -1;
-               while (start <= end) {
-                       mid = Math.round((start + end) / 2);
-                       var spanstart = mid ? this._spanlist[mid - 1].index + 1 
: 0;
-                       var spanend = this._spanlist[mid].index;
-                       if (spanstart <= index && index <= spanend) {
-                               break;
-                       }
-
-                       if (index < spanstart) {
-                               end = mid - 1;
-                       }
-                       else { // spanend < index
-                               start = mid + 1;
-                       }
-               }
-
-               return mid;
+               return binarySearch(this._spanlist, index,
+                       function directionProvider(testIndex, prevSpan, 
curSpan) {
+                               var spanStart = prevSpan ?
+                                       prevSpan.index + 1 : 0;
+                               var spanEnd = curSpan.index;
+                               return (testIndex < spanStart) ? -1 :
+                                       (spanEnd < testIndex) ? 1 : 0;
+                       });
        },
 
        _searchByCustomDataField: function (value, fieldName) {
 
-               // All custom searchable data values are assumed to start from 
0 at the start of first span.
-               var maxValue = this._spanlist[this._spanlist.length - 
1].data[fieldName];
-               if (value < 0 || value > maxValue) {
-                       return -1;
-               }
+               // All custom searchable data values are assumed to start
+               // from 0 at the start of first span and are in non-decreasing 
order.
 
-               var start = 0;
-               var end = this._spanlist.length - 1;
-               var mid = -1;
-               while (start <= end) {
-                       mid = Math.round((start + end) / 2);
-                       var valuestart = mid ? this._spanlist[mid - 
1].data[fieldName] + 1 : 0;
-                       var valueend = this._spanlist[mid].data[fieldName];
-                       if (valuestart <= value && value <= valueend) {
-                               break;
-                       }
-
-                       if (value < valuestart) {
-                               end = mid - 1;
-                       }
-                       else { // valueend < value
-                               start = mid + 1;
-                       }
-               }
-
-               // may fail for custom data ?
-               return (start <= end) ? mid : -1;
+               return binarySearch(this._spanlist, value,
+                       function directionProvider(testValue, prevSpan, 
curSpan) {
+                               var valueStart = prevSpan ?
+                                       prevSpan.data[fieldName] + 1 : 0;
+                               var valueEnd = curSpan.data[fieldName];
+                               return (testValue < valueStart) ? -1 :
+                                       (valueEnd < testValue) ? 1 : 0;
+                       });
        }
 
 });
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to