Micro-optimization to avoid creating temporary path
authorJonathan Wakely <jwakely@redhat.com>
Tue, 18 Dec 2018 15:52:37 +0000 (15:52 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 18 Dec 2018 15:52:37 +0000 (15:52 +0000)
Now that path::operator/=(basic_string_view<value_type>) works directly
from the string argument, instead of constructing a temporary path from
the string, it's potentially more efficient to do 'path(x) /= s' instead
of 'x / s'. This changes the only relevant place in the library.

* src/filesystem/std-dir.cc (filesystem::_Dir::advance): Append
string to lvalue to avoid creating temporary path.

From-SVN: r267236

libstdc++-v3/ChangeLog
libstdc++-v3/src/filesystem/std-dir.cc

index d61d4ccad4de766b239da51e2844ef262fe501d5..eefc953f5ca488d9582fab8f72cf95d4436d1cea 100644 (file)
@@ -1,5 +1,8 @@
 2018-12-18  Jonathan Wakely  <jwakely@redhat.com>
 
+       * src/filesystem/std-dir.cc (filesystem::_Dir::advance): Append
+       string to lvalue to avoid creating temporary path.
+
        * include/bits/fs_path.h (path::compare(const string_type&))
        (path::compare(const value_type*)): Add noexcept and construct a
        string view to compare to instead of a path.
index 038f635a712adb9472b16112acba51ff64a049ff..216182a2e56c906e3294e09ecb5c87050b36cd57 100644 (file)
@@ -61,7 +61,9 @@ struct fs::_Dir : _Dir_base
   {
     if (const auto entp = _Dir_base::advance(skip_permission_denied, ec))
       {
-       entry = fs::directory_entry{path / entp->d_name, get_file_type(*entp)};
+       auto name = path;
+       name /= entp->d_name;
+       entry = fs::directory_entry{name, get_file_type(*entp)};
        return true;
       }
     else if (!ec)