X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Fpath.cpp;h=0fe95d65df943a9f0b4b1b4bf006035a4e7dccee;hp=241b2f8aeb938493f006d735f36a9f8f4c41e6ec;hb=eca23d70c9e2c0519125f2fd92c212d3c94f7736;hpb=a0d162e53034a6ef2ef8cfc310a3ee18a6a3872e diff --git a/source/fs/path.cpp b/source/fs/path.cpp index 241b2f8..0fe95d6 100644 --- a/source/fs/path.cpp +++ b/source/fs/path.cpp @@ -39,7 +39,7 @@ void Path::init(const string &p) { string::size_type slash = p.find_first_of("/\\", start); if(slash>start || start==0) - add_component(p.substr(start, max(slash-start, 1U))); + add_component(p.substr(start, max(slash-start, 1U))); if(slash==string::npos) break; start = slash+1; @@ -89,7 +89,7 @@ Path Path::operator/(const Path &p) const Path &Path::operator/=(const Path &p) { if(p.is_absolute()) - path = p.path; + *this = p; else { for(Iterator i=p.begin(); i!=p.end(); ++i) @@ -100,7 +100,7 @@ Path &Path::operator/=(const Path &p) void Path::add_component(const string &comp) { - if(comp.size()==1 && comp[0]==DIRSEP) + if(comp.size()==1 && (comp[0]=='/' || comp[0]=='\\')) { // Replace the path with the root directory #ifdef WIN32 @@ -113,7 +113,7 @@ void Path::add_component(const string &comp) else #endif { - path = comp; + path.assign(1, DIRSEP); separators.clear(); separators.push_back(0); } @@ -222,7 +222,9 @@ Path::Iterator::Iterator(const Path &p, bool e): path(&p), iter(e ? path->separators.end() : path->separators.begin()), end(e || path->path.empty()) -{ } +{ + update(); +} Path::Iterator &Path::Iterator::operator++() { @@ -234,6 +236,7 @@ Path::Iterator &Path::Iterator::operator++() if(path->path.size()==1 && path->separators.size()==1) end = true; } + update(); return *this; } @@ -247,13 +250,17 @@ Path::Iterator &Path::Iterator::operator--() } else if(iter!=path->separators.begin()) --iter; + update(); return *this; } -string Path::Iterator::operator*() const +void Path::Iterator::update() { if(end) - throw logic_error("Path::Iterator::operator*"); + { + current.clear(); + return; + } string::size_type start = 0; if(iter!=path->separators.begin()) @@ -267,8 +274,9 @@ string Path::Iterator::operator*() const slash = *iter; if(slash==0) - return path->path.substr(start, 1); - return path->path.substr(start, slash-start); + current = path->path.substr(start, 1); + else + current = path->path.substr(start, slash-start); } } // namespace FS