interval-tree-1d
Advanced tools
Comparing version 1.0.2 to 1.0.3
@@ -192,10 +192,23 @@ "use strict" | ||
function compareXBegin(x, y) { | ||
return x[0] - y | ||
function reportLeftRange(arr, hi, cb) { | ||
for(var i=0; i<arr.length && arr[i][0] <= hi; ++i) { | ||
var r = cb(arr[i]) | ||
if(r) { return r } | ||
} | ||
} | ||
function compareXEnd(x, y) { | ||
return x[1] - y | ||
function reportRightRange(arr, lo, cb) { | ||
for(var i=arr.length-1; i>=0 && arr[i][1] >= lo; --i) { | ||
var r = cb(arr[i]) | ||
if(r) { return r } | ||
} | ||
} | ||
function reportRange(arr, cb) { | ||
for(var i=0; i<arr.length; ++i) { | ||
var r = cb(arr[i]) | ||
if(r) { return r } | ||
} | ||
} | ||
proto.queryPoint = function(x, cb) { | ||
@@ -207,13 +220,4 @@ if(x < this.mid) { | ||
} | ||
var i = bounds.le(this.leftPoints, x, compareXBegin) | ||
for(; i>=0; --i) { | ||
var r = cb(this.leftPoints[i]) | ||
if(r) { return r } | ||
} | ||
return reportLeftRange(this.leftPoints, x, cb) | ||
} else if(x > this.mid) { | ||
var i = bounds.ge(this.rightPoints, x, compareXEnd) | ||
for(; i<this.rightPoints.length; ++i) { | ||
var r = cb(this.rightPoints[i]) | ||
if(r) { return r} | ||
} | ||
if(this.right) { | ||
@@ -223,27 +227,8 @@ var r = this.right.queryPoint(x, cb) | ||
} | ||
return reportRightRange(this.rightPoints, x, cb) | ||
} else { | ||
for(var i=0; i<this.leftPoints.length; ++i) { | ||
var r = cb(this.leftPoints[i]) | ||
if(r) { return r } | ||
} | ||
return reportRange(this.leftPoints, cb) | ||
} | ||
} | ||
function reportLeftRange(arr, lo, hi, cb) { | ||
var b = bounds.gt(arr, hi, compareXBegin) | ||
for(var i=0; i<b; ++i) { | ||
var r = cb(arr[i]) | ||
if(r) { return r } | ||
} | ||
} | ||
function reportRightRange(arr, lo, hi, cb) { | ||
var a = bounds.ge(arr, lo, compareXEnd) | ||
var b = arr.length | ||
for(var i=a; i<b; ++i) { | ||
var r = cb(arr[i]) | ||
if(r) { return r } | ||
} | ||
} | ||
proto.queryInterval = function(lo, hi, cb) { | ||
@@ -259,12 +244,7 @@ if(lo < this.mid && this.left) { | ||
if(hi < this.mid) { | ||
var r = reportLeftRange(this.leftPoints, lo, hi, cb) | ||
if(r) { return r } | ||
return reportLeftRange(this.leftPoints, hi, cb) | ||
} else if(lo > this.mid) { | ||
var r = reportRightRange(this.rightPoints, lo, hi, cb) | ||
if(r) { return r } | ||
return reportRightRange(this.rightPoints, lo, cb) | ||
} else { | ||
for(var i=0; i<this.leftPoints.length; ++i) { | ||
var r = cb(this.leftPoints[i]) | ||
if(r) { return r } | ||
} | ||
return reportRange(this.leftPoints, cb) | ||
} | ||
@@ -271,0 +251,0 @@ } |
{ | ||
"name": "interval-tree-1d", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "1D interval tree data structure", | ||
@@ -5,0 +5,0 @@ "main": "interval-tree.js", |
17364
510