const_iterator find()

in fatal/string/rope.h [1481:1506]


  const_iterator find(char c, const_iterator offset) const {
    if (offset == cend()) {
      return offset;
    }

    auto const pieces = pieces_.size();
    auto piece_offset = offset.offset();

    for (auto i = offset.index(); i < pieces; ++i, piece_offset = 0) {
      auto const &piece = pieces_[i];
      auto const ref = piece.ref();
      auto const j = std::find(
        std::next(ref.begin(), static_cast<difference_type>(piece_offset)),
        ref.end(),
        c
      );

      if (j != ref.end()) {
        assert(i < pieces);
        auto const off = static_cast<size_type>(std::distance(ref.begin(), j));
        return const_iterator(this, std::addressof(pieces_[i]), i, off);
      }
    };

    return cend();
  }