diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-04-20 10:16:46 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-04-20 10:16:46 -0700 |
commit | abd9d7207f1481b384672ba4be821cd7a8d56fcd (patch) | |
tree | 6a2c1c745e7bf66d69e8d5a0e63f79f325efbeb5 | |
parent | 5c54c33359246ee82ec7c62249bf7664beaab9fb (diff) |
optimize strspn and strcspn
-rw-r--r-- | src/library.js | 36 |
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) { |