From 1ae3e29ea3fd90e5df31d52c5d3860fde7f3cbac Mon Sep 17 00:00:00 2001 From: couriersud Date: Wed, 18 Jan 2017 00:32:12 +0100 Subject: 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) --- src/lib/netlist/plib/pstring.cpp | 57 ++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 38 deletions(-) (limited to 'src/lib/netlist/plib/pstring.cpp') 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 pstring_t::substr(const iterator start, const iterator end return ret; } - template const pstring_t pstring_t::ucase() const { - pstring_t ret = *this; - ret.pcopy(c_str(), blen()); - for (std::size_t i=0; istr()[i] = static_cast(toupper(static_cast(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::iterator pstring_t::find_last_not_of(const pstring_t & } template -typename pstring_t::iterator pstring_t::find(const pstring_t &search, iterator start) const +typename pstring_t::iterator pstring_t::find(const pstring_t search, iterator start) const { for (; start != end(); ++start) { @@ -168,6 +169,15 @@ typename pstring_t::iterator pstring_t::find(const pstring_t &search, iter return end(); } +template +typename pstring_t::iterator pstring_t::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 pstring_t pstring_t::replace(const pstring_t &search, const pstring_t &replace) const { @@ -188,13 +198,13 @@ pstring_t pstring_t::replace(const pstring_t &search, const pstring_t &rep } template -const pstring_t pstring_t::ltrim(const pstring_t &ws) const +const pstring_t pstring_t::ltrim(const pstring_t ws) const { return substr(find_first_not_of(ws), end()); } template -const pstring_t pstring_t::rtrim(const pstring_t &ws) const +const pstring_t pstring_t::rtrim(const pstring_t ws) const { auto f = find_last_not_of(ws); if (f==end()) @@ -255,24 +265,6 @@ long pstring_t::as_long(bool *error) const return ret; } -template -typename pstring_t::iterator pstring_t::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 bool pstring_t::startsWith(const pstring_t &arg) const { @@ -291,17 +283,6 @@ bool pstring_t::endsWith(const pstring_t &arg) const return (memcmp(c_str()+this->blen()-arg.blen(), arg.c_str(), arg.blen()) == 0); } - -template -bool pstring_t::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 int pstring_t::pcmp(const mem_t *right) const { @@ -501,7 +482,7 @@ void pstring_t::sfree(pstr_t *s) } template -pstr_t *pstring_t::salloc(int n) +pstr_t *pstring_t::salloc(std::size_t n) { int size = sizeof(pstr_t) + n + 1; pstr_t *p = (pstr_t *) plib::palloc_array(size); -- cgit v1.2.3-70-g09d2