mirror of
https://github.com/futurepress/epub.js.git
synced 2025-10-03 14:59:18 +02:00
New continuos render
This commit is contained in:
parent
0013cf417d
commit
03aef89037
13 changed files with 2027 additions and 120 deletions
|
@ -353,3 +353,73 @@ EPUBJS.core.defaults = function(obj) {
|
|||
}
|
||||
return obj;
|
||||
};
|
||||
|
||||
// Fast quicksort insert for sorted array -- based on:
|
||||
// http://stackoverflow.com/questions/1344500/efficient-way-to-insert-a-number-into-a-sorted-array-of-numbers
|
||||
EPUBJS.core.insert = function(item, array, compareFunction) {
|
||||
var location = EPUBJS.core.locationOf(item, array, compareFunction);
|
||||
array.splice(location, 0, item);
|
||||
|
||||
return location;
|
||||
};
|
||||
// Returns where something would fit in
|
||||
EPUBJS.core.locationOf = function(item, array, compareFunction, _start, _end) {
|
||||
var start = _start || 0;
|
||||
var end = _end || array.length;
|
||||
var pivot = parseInt(start + (end - start) / 2);
|
||||
var compared;
|
||||
if(!compareFunction){
|
||||
compareFunction = function(a, b) {
|
||||
if(a > b) return 1;
|
||||
if(a < b) return -1;
|
||||
if(a = b) return 0;
|
||||
};
|
||||
}
|
||||
if(end-start <= 0) {
|
||||
return pivot;
|
||||
}
|
||||
|
||||
compared = compareFunction(array[pivot], item);
|
||||
if(end-start === 1) {
|
||||
return compared > 0 ? pivot : pivot + 1;
|
||||
}
|
||||
|
||||
if(compared === 0) {
|
||||
return pivot;
|
||||
}
|
||||
if(compared === -1) {
|
||||
return EPUBJS.core.locationOf(item, array, compareFunction, pivot, end);
|
||||
} else{
|
||||
return EPUBJS.core.locationOf(item, array, compareFunction, start, pivot);
|
||||
}
|
||||
};
|
||||
// Returns -1 of mpt found
|
||||
EPUBJS.core.indexOfSorted = function(item, array, compareFunction, _start, _end) {
|
||||
var start = _start || 0;
|
||||
var end = _end || array.length;
|
||||
var pivot = parseInt(start + (end - start) / 2);
|
||||
var compared;
|
||||
if(!compareFunction){
|
||||
compareFunction = function(a, b) {
|
||||
if(a > b) return 1;
|
||||
if(a < b) return -1;
|
||||
if(a = b) return 0;
|
||||
};
|
||||
}
|
||||
if(end-start <= 0) {
|
||||
return -1; // Not found
|
||||
}
|
||||
|
||||
compared = compareFunction(array[pivot], item);
|
||||
if(end-start === 1) {
|
||||
return compared === 0 ? pivot : -1;
|
||||
}
|
||||
if(compared === 0) {
|
||||
return pivot; // Found
|
||||
}
|
||||
if(compared === -1) {
|
||||
return EPUBJS.core.indexOfSorted(item, array, compareFunction, pivot, end);
|
||||
} else{
|
||||
return EPUBJS.core.indexOfSorted(item, array, compareFunction, start, pivot);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue