aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-20 10:16:46 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-20 10:16:46 -0700
commitabd9d7207f1481b384672ba4be821cd7a8d56fcd (patch)
tree6a2c1c745e7bf66d69e8d5a0e63f79f325efbeb5
parent5c54c33359246ee82ec7c62249bf7664beaab9fb (diff)
optimize strspn and strcspn
-rw-r--r--src/library.js36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/library.js b/src/library.js
index 7a46a68f..cead2bf8 100644
--- a/src/library.js
+++ b/src/library.js
@@ -3956,19 +3956,35 @@ LibraryManager.library = {
},
strspn: function(pstr, pset) {
- var str = String_copy(pstr, true);
- var set = String_copy(pset);
- var i = 0;
- while (set.indexOf(str[i]) != -1) i++; // Must halt, as 0 is in str but not set
- return i;
+ var str = pstr, set, strcurr, setcurr;
+ while (1) {
+ strcurr = {{{ makeGetValue('str', '0', 'i8') }}};
+ if (!strcurr) return str - pstr;
+ set = pset;
+ while (1) {
+ setcurr = {{{ makeGetValue('set', '0', 'i8') }}};
+ if (!setcurr || setcurr == strcurr) break;
+ set++;
+ }
+ if (!setcurr) return str - pstr;
+ str++;
+ }
},
strcspn: function(pstr, pset) {
- var str = String_copy(pstr, true);
- var set = String_copy(pset, true);
- var i = 0;
- while (set.indexOf(str[i]) == -1) i++; // Must halt, as 0 is in both
- return i;
+ var str = pstr, set, strcurr, setcurr;
+ while (1) {
+ strcurr = {{{ makeGetValue('str', '0', 'i8') }}};
+ if (!strcurr) return str - pstr;
+ set = pset;
+ while (1) {
+ setcurr = {{{ makeGetValue('set', '0', 'i8') }}};
+ if (!setcurr || setcurr == strcurr) break;
+ set++;
+ }
+ if (setcurr) return str - pstr;
+ str++;
+ }
},
strcpy: function(pdest, psrc) {