Optimize filesystem::path::parent_path()
Parsing a complete string is more efficient than appending each component one-by-one. * src/c++17/fs_path.cc (path::parent_path()): Create whole path at once instead of building it iteratively. From-SVN: r271754
This commit is contained in:
parent
e800d6dc2c
commit
e5ccb10ad0
|
@ -1,5 +1,8 @@
|
|||
2019-05-29 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* src/c++17/fs_path.cc (path::parent_path()): Create whole path at
|
||||
once instead of building it iteratively.
|
||||
|
||||
* testsuite/util/testsuite_api.h: Remove names of unused parameters.
|
||||
|
||||
PR libstdc++/85494 use rdseed and rand_s in std::random_device
|
||||
|
|
|
@ -1523,11 +1523,9 @@ path::parent_path() const
|
|||
__ret = *this;
|
||||
else if (_M_cmpts.size() >= 2)
|
||||
{
|
||||
for (auto __it = _M_cmpts.begin(), __end = std::prev(_M_cmpts.end());
|
||||
__it != __end; ++__it)
|
||||
{
|
||||
__ret /= *__it;
|
||||
}
|
||||
const auto parent = std::prev(_M_cmpts.end(), 2);
|
||||
const auto len = parent->_M_pos + parent->_M_pathname.length();
|
||||
__ret.assign(_M_pathname.substr(0, len));
|
||||
}
|
||||
return __ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue