const pstring_t<F> pstring_t<F>::rpad(const pstring_t &ws, const size_type cnt) const { // FIXME: pstringbuffer ret(*this); pstring_t ret(*this); size_type wsl = ws.len(); for (auto i = ret.len(); i < cnt; i+=wsl) ret += ws; return ret; }
pstring_t<F> pstring_t<F>::replace(const pstring_t &search, const pstring_t &replace) const { pstring_t ret(""); const size_type slen = search.len(); auto last_s = begin(); auto s = find(search, last_s); while (s != end()) { ret += substr(last_s, s); ret += replace; last_s = s + slen; s = find(search, last_s); } ret += substr(last_s, end()); return ret; }
int pstring_t<F>::find_first_not_of(const pstring_t &no) const { char *t = m_ptr->str(); unsigned nolen = no.len(); unsigned tlen = len(); for (unsigned i=0; i < tlen; i++) { char *n = no.m_ptr->str(); bool f = true; for (unsigned j=0; j < nolen; j++) { if (F::code(t) == F::code(n)) f = false; n += F::codelen(t); } if (f) return i; t += F::codelen(t); } return -1; }