Mercurial > octave
changeset 23813:ccc4e85762ac
Overhaul vectorize() to use C++11 string functions.
* ov-fcn-inline.cc (Fvectorize): Overhaul function to use C++11 string
functions.
author | Rik <rik@octave.org> |
---|---|
date | Sun, 30 Jul 2017 14:08:02 -0700 |
parents | 057a894914df |
children | 3ac5d3d01cad |
files | libinterp/octave-value/ov-fcn-inline.cc |
diffstat | 1 files changed, 15 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/octave-value/ov-fcn-inline.cc Sun Jul 30 09:21:58 2017 -0700 +++ b/libinterp/octave-value/ov-fcn-inline.cc Sun Jul 30 14:08:02 2017 -0700 @@ -943,36 +943,37 @@ old_func = args(0).string_value (); else { - old = args(0).fcn_inline_value (true); func_is_string = false; - if (old) - old_func = old->fcn_text (); - else + old = args(0).fcn_inline_value (true); + if (! old) error ("vectorize: FUN must be a string or inline function"); + + old_func = old->fcn_text (); } + size_t len = old_func.length (); std::string new_func; + new_func.reserve (len + 10); + size_t i = 0; - - while (i < old_func.length ()) + while (i < len) { - std::string t1 = old_func.substr (i, 1); + char t1 = old_func[i]; - if (t1 == "*" || t1 == "/" || t1 == "\\" || t1 == "^") + if (t1 == '*' || t1 == '/' || t1 == '\\' || t1 == '^') { - if (i && old_func.substr (i-1, 1) != ".") - new_func += '.'; + if (i && old_func[i-1] != '.') + new_func.push_back ('.'); // Special case for ** operator. - if (t1 == "*" && i < (old_func.length () - 1) - && old_func.substr (i+1, 1) == "*") + if (t1 == '*' && i < (len - 1) && old_func[i+1] == '*') { - new_func += '*'; + new_func.push_back ('*'); i++; } } - new_func.append (t1); + new_func.push_back (t1); i++; }