From: Ruslan Manaev Date: Wed, 7 Oct 2020 18:39:50 +0000 (+0500) Subject: Improve FilePath::Normalize method X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=113ca75c30b010eb4c5df1a8e3794966a2e1437a;p=googletest.git Improve FilePath::Normalize method --- diff --git a/googletest/src/gtest-filepath.cc b/googletest/src/gtest-filepath.cc index 062b95b..af29768 100644 --- a/googletest/src/gtest-filepath.cc +++ b/googletest/src/gtest-filepath.cc @@ -349,21 +349,19 @@ FilePath FilePath::RemoveTrailingPathSeparator() const { // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". void FilePath::Normalize() { - std::string normalized_pathname; - normalized_pathname.reserve(pathname_.length()); + auto out = pathname_.begin(); for (const char character : pathname_) { if (!IsPathSeparator(character)) { - normalized_pathname.push_back(character); - } else if (normalized_pathname.empty() || - normalized_pathname.back() != kPathSeparator) { - normalized_pathname.push_back(kPathSeparator); + *(out++) = character; + } else if (out == pathname_.begin() || *std::prev(out) != kPathSeparator) { + *(out++) = kPathSeparator; } else { continue; } } - pathname_ = normalized_pathname; + pathname_.erase(out, pathname_.end()); } } // namespace internal