int pstring_t<F>::pcmp(const pstring_t &right) const { std::size_t l = std::min(blen(), right.blen()); if (l == 0) { if (blen() == 0 && right.blen() == 0) return 0; else if (right.blen() == 0) return 1; else return -1; } auto si = this->begin(); auto ri = right.begin(); while (si != this->end() && *si == *ri) { ri++; si++; } int ret = (si == this->end() ? 0 : *si - *ri); if (ret == 0) { if (this->blen() > right.blen()) ret = 1; else if (this->blen() < right.blen()) ret = -1; } return ret; }
typename pstring_t<F>::iterator pstring_t<F>::find(const pstring_t search, iterator start) const { for (; start != end(); ++start) { iterator itc(start); auto cmp = search.begin(); while (itc != end() && cmp != search.end() && *itc == *cmp) { ++itc; ++cmp; } if (cmp == search.end()) return start; } return end(); }