aboutsummaryrefslogtreecommitdiff
path: root/src/library.js
diff options
context:
space:
mode:
authorAlon Zakai <azakai@mozilla.com>2010-12-04 13:52:23 -0800
committerAlon Zakai <azakai@mozilla.com>2010-12-04 13:52:23 -0800
commit6b7bf0aa4ed04bbd30d9f69a12bb7a45e7f0c7a4 (patch)
treebe26fd25e2b5f94f83961512181840321457904a /src/library.js
parent1f70fe65a943f3867c12895986bfbc63190981de (diff)
qsort
Diffstat (limited to 'src/library.js')
-rw-r--r--src/library.js20
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) {