[PATCH] Micro-optimization to avoid creating temporary path
Jonathan Wakely
jwakely@redhat.com
Tue Dec 18 15:52:00 GMT 2018
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.
Tested x86_64-linux, committed to trunk.
-------------- next part --------------
commit e48b1b71c76d12f999d9cf4a12239845281a26e4
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Tue Dec 18 15:39:12 2018 +0000
Micro-optimization to avoid creating temporary path
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.
diff --git a/libstdc++-v3/src/filesystem/std-dir.cc b/libstdc++-v3/src/filesystem/std-dir.cc
index 038f635a712..216182a2e56 100644
--- a/libstdc++-v3/src/filesystem/std-dir.cc
+++ b/libstdc++-v3/src/filesystem/std-dir.cc
@@ -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)
More information about the Libstdc++
mailing list