aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Yip <yipdw@member.fsf.org>2011-12-08 13:44:30 -0600
committerDavid Yip <yipdw@member.fsf.org>2011-12-21 01:10:42 -0600
commitd3420a1866a45a296ea9782fc8a35b08966277d6 (patch)
tree1fd419390e4af221e81a0913899aada9ee3803a0 /src
parentbae448ef2619fffb90021c96546cbccadc39ed20 (diff)
An implementation of bsearch(3).
Diffstat (limited to 'src')
-rw-r--r--src/library.js23
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