diff options
author | Alon Zakai <azakai@mozilla.com> | 2010-12-04 13:52:23 -0800 |
---|---|---|
committer | Alon Zakai <azakai@mozilla.com> | 2010-12-04 13:52:23 -0800 |
commit | 6b7bf0aa4ed04bbd30d9f69a12bb7a45e7f0c7a4 (patch) | |
tree | be26fd25e2b5f94f83961512181840321457904a /src | |
parent | 1f70fe65a943f3867c12895986bfbc63190981de (diff) |
qsort
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/library.js b/src/library.js index fc5932d9..8b698623 100644 --- a/src/library.js +++ b/src/library.js @@ -142,6 +142,26 @@ var Library = { return ret; }, + qsort: function(base, num, size, comparator) { + // forward calls to the JavaScript sort method + // first, sort the items logically + comparator = FUNCTION_TABLE[comparator]; + var keys = []; + for (var i = 0; i < num; i++) keys.push(i); + keys.sort(function(a, b) { + return comparator(base+a*size, base+b*size); + }); + print("KEYS:" + keys) + // apply the sort + var temp = _malloc(num*size); + _memcpy(temp, base, num*size); + for (var i = 0; i < num; i++) { + if (keys[i] == i) continue; // already in place + _memcpy(base+i*size, temp+keys[i]*size, size); + } + _free(temp); + }, + // string.h strspn: function(pstr, pset) { |