path(&p),
iter(e ? path->separators.end() : path->separators.begin()),
end(e || path->path.empty())
-{ }
+{
+ update();
+}
Path::Iterator &Path::Iterator::operator++()
{
if(path->path.size()==1 && path->separators.size()==1)
end = true;
}
+ update();
return *this;
}
}
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())
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