diff options
author | 2017-01-18 00:32:12 +0100 | |
---|---|---|
committer | 2017-01-20 22:20:36 +0100 | |
commit | 1ae3e29ea3fd90e5df31d52c5d3860fde7f3cbac (patch) | |
tree | e32ddf77ae8408a1aea8d7abb15f5048bba3ed81 /src/lib/netlist/plib/pstring.cpp | |
parent | d0b6742563ac7f9ed626a89ebd022d09c64dfa4d (diff) |
Assume string literals are UTF8 in netlist code.
At the same time, any char pointer has to be explicitly converted to
pstring by specifying an encoding. Not yet optimal, but certainly better
than what was there before.
Removed unneeded methods from pstring. (nw)
Diffstat (limited to 'src/lib/netlist/plib/pstring.cpp')
-rw-r--r-- | src/lib/netlist/plib/pstring.cpp | 57 |
1 files changed, 19 insertions, 38 deletions
diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp index 2506357c9a5..2325e8b08c2 100644 --- a/src/lib/netlist/plib/pstring.cpp +++ b/src/lib/netlist/plib/pstring.cpp @@ -97,14 +97,15 @@ const pstring_t<F> pstring_t<F>::substr(const iterator start, const iterator end return ret; } - template<typename F> const pstring_t<F> pstring_t<F>::ucase() const { - pstring_t ret = *this; - ret.pcopy(c_str(), blen()); - for (std::size_t i=0; i<ret.len(); i++) - ret.m_ptr->str()[i] = static_cast<char>(toupper(static_cast<int>(ret.m_ptr->str()[i]))); + pstring_t ret = ""; + for (auto c : *this) + if (c >= 'a' && c <= 'z') + ret += (c - 'a' + 'A'); + else + ret += c; return ret; } @@ -151,7 +152,7 @@ typename pstring_t<F>::iterator pstring_t<F>::find_last_not_of(const pstring_t & } template<typename F> -typename pstring_t<F>::iterator pstring_t<F>::find(const pstring_t &search, iterator start) const +typename pstring_t<F>::iterator pstring_t<F>::find(const pstring_t search, iterator start) const { for (; start != end(); ++start) { @@ -169,6 +170,15 @@ typename pstring_t<F>::iterator pstring_t<F>::find(const pstring_t &search, iter } template<typename F> +typename pstring_t<F>::iterator pstring_t<F>::find(const code_t search, iterator start) const +{ + mem_t buf[traits::MAXCODELEN+1] = { 0 }; + traits::encode(search, buf); + return find(pstring_t(&buf[0], UTF8), start); +} + + +template<typename F> pstring_t<F> pstring_t<F>::replace(const pstring_t &search, const pstring_t &replace) const { pstring_t ret(""); @@ -188,13 +198,13 @@ pstring_t<F> pstring_t<F>::replace(const pstring_t &search, const pstring_t &rep } template<typename F> -const pstring_t<F> pstring_t<F>::ltrim(const pstring_t &ws) const +const pstring_t<F> pstring_t<F>::ltrim(const pstring_t ws) const { return substr(find_first_not_of(ws), end()); } template<typename F> -const pstring_t<F> pstring_t<F>::rtrim(const pstring_t &ws) const +const pstring_t<F> pstring_t<F>::rtrim(const pstring_t ws) const { auto f = find_last_not_of(ws); if (f==end()) @@ -256,24 +266,6 @@ long pstring_t<F>::as_long(bool *error) const } template<typename F> -typename pstring_t<F>::iterator pstring_t<F>::find(const mem_t *search, iterator start) const -{ - for (; start != end(); ++start) - { - iterator itc(start); - iterator cmp(search); - while (itc != end() && *cmp != 0 && *itc == *cmp) - { - ++itc; - ++cmp; - } - if (*cmp == 0) - return start; - } - return end(); -} - -template<typename F> bool pstring_t<F>::startsWith(const pstring_t &arg) const { if (arg.blen() > blen()) @@ -291,17 +283,6 @@ bool pstring_t<F>::endsWith(const pstring_t &arg) const return (memcmp(c_str()+this->blen()-arg.blen(), arg.c_str(), arg.blen()) == 0); } - -template<typename F> -bool pstring_t<F>::startsWith(const mem_t *arg) const -{ - std::size_t alen = strlen(arg); - if (alen > blen()) - return false; - else - return (memcmp(arg, c_str(), alen) == 0); -} - template<typename F> int pstring_t<F>::pcmp(const mem_t *right) const { @@ -501,7 +482,7 @@ void pstring_t<F>::sfree(pstr_t *s) } template<typename F> -pstr_t *pstring_t<F>::salloc(int n) +pstr_t *pstring_t<F>::salloc(std::size_t n) { int size = sizeof(pstr_t) + n + 1; pstr_t *p = (pstr_t *) plib::palloc_array<char>(size); |