diff options
author | David Yip <yipdw@member.fsf.org> | 2011-12-08 13:44:30 -0600 |
---|---|---|
committer | David Yip <yipdw@member.fsf.org> | 2011-12-21 01:10:42 -0600 |
commit | d3420a1866a45a296ea9782fc8a35b08966277d6 (patch) | |
tree | 1fd419390e4af221e81a0913899aada9ee3803a0 /src | |
parent | bae448ef2619fffb90021c96546cbccadc39ed20 (diff) |
An implementation of bsearch(3).
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/library.js b/src/library.js index a665fc8f..1971ab66 100644 --- a/src/library.js +++ b/src/library.js @@ -3201,6 +3201,29 @@ LibraryManager.library = { throw 'ABORT: ' + code + ', at ' + (new Error().stack); }, + bsearch: function(key, base, num, size, compar) { + var cmp = FUNCTION_TABLE[compar]; + var left = 0; + var right = num; + var mid, test, addr; + + while (left < right) { + mid = (left + right) >>> 1; + addr = base + (mid * size); + test = cmp(key, addr); + + if (test < 0) { + right = mid; + } else if (test > 0) { + left = mid + 1; + } else { + return addr; + } + } + + return 0; + }, + realloc__deps: ['memcpy'], realloc: function(ptr, size) { // Very simple, inefficient implementation - if you use a real malloc, best to use |