better comments in PathUtilities.cpp
This commit is contained in:
parent
1734e6d7f6
commit
42a8f69050
|
@ -15,6 +15,19 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
These functions cover the vast majority of cases for different paths across
|
||||||
|
windows and unixes. They are not, however, fullproof and probably don't cover
|
||||||
|
fringe cases very well. The library below might be used as an alternative if
|
||||||
|
these implementations prove to be insufficient. As the library's readme states
|
||||||
|
it is simply a temporary band-aid until std::filesystem is integrated (C++17
|
||||||
|
has it in std::experimental) and this class should also be treated as such.
|
||||||
|
|
||||||
|
https://github.com/wjakob/filesystem/
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
#include "PathUtilities.h"
|
#include "PathUtilities.h"
|
||||||
|
|
||||||
// keep the default platform delimiter as the first in the list
|
// keep the default platform delimiter as the first in the list
|
||||||
|
@ -41,22 +54,22 @@ std::string PathUtilities::concat(const std::string& left, const std::string& ri
|
||||||
++leftEnd;
|
++leftEnd;
|
||||||
auto rightStart = right.find_first_not_of(Delimiters, 0);
|
auto rightStart = right.find_first_not_of(Delimiters, 0);
|
||||||
if (rightStart == std::string::npos) {
|
if (rightStart == std::string::npos) {
|
||||||
// l/r empty
|
// both left/right are empty
|
||||||
if (left.size() == 0 && right.size() == 0)
|
if (left.size() == 0 && right.size() == 0)
|
||||||
return "";
|
return "";
|
||||||
// r useless, l okay
|
// right is full of delims, left is okay
|
||||||
if (leftEnd > 0)
|
if (leftEnd > 0)
|
||||||
return left.substr(0, leftEnd);
|
return left.substr(0, leftEnd);
|
||||||
// both useless but one has a delim
|
// both left/right useless but at least one has delims
|
||||||
return std::string(1, DefaultDelimiter);
|
return std::string(1, DefaultDelimiter);
|
||||||
}
|
}
|
||||||
if (leftEnd == 0) {
|
if (leftEnd == 0) {
|
||||||
// r okay and not prefixed with delims, l empty
|
// right is okay and not prefixed with delims, left is empty
|
||||||
if (left.size() == 0 && rightStart == 0)
|
if (left.size() == 0 && rightStart == 0)
|
||||||
return right.substr(rightStart);
|
return right.substr(rightStart);
|
||||||
// r okay and prefixed with delims OR l full of delims
|
// (right is okay and prefixed with delims) OR left is full of delims
|
||||||
return DefaultDelimiter + right.substr(rightStart);
|
return DefaultDelimiter + right.substr(rightStart);
|
||||||
}
|
}
|
||||||
// normal concatenation
|
// concatenation using both left and right
|
||||||
return left.substr(0, leftEnd) + DefaultDelimiter + right.substr(rightStart);
|
return left.substr(0, leftEnd) + DefaultDelimiter + right.substr(rightStart);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue