On Wed, Oct 13, 2021 at 5:56 PM Gavin Lambert via Boost
part of the point of splitting paths into subcomponents is so that you don't have to think about the path separators.
Yeah.
Some URI libraries will also explicitly iterate "" or "/" as the first component (by itself) to indicate the difference between absolute and relative URIs, although that could be indicated another way instead.
Currently this is done with // returns true if the path has a leading slash ('/') bool segments_view::is_absolute() const noexcept;
In which case it might be best to render the absolute path as: ... { "/", "path", "to", "file.txt" }
The problem comes with defining the mutation API. How does the user put a URL into the state above using the segments container interface?
I would imagine if u.segments() == { "my", "download", "folder", "" } before the push_back then after == { "my", "download", "folder", "index.htm" }.
But that would be a special case only when the trailing component is empty.
I didn't even think of this, but that's yet another wrinkle.. lol
The app would have to subsequently push_back("") if it was intending to leave a trailing final slash (or just push_back the next component if it wasn't finished yet). But either way it's the app's responsibilty to explicitly indicate whether the URL has a trailing slash or not; they are semantically different and a library cannot decide that for it.
Given the current container-like interface for modifiable encoded segments: https://master.url.cpp.al/url/ref/boost__urls__segments_encoded.html What might that API look like that allows the caller to indicate where the slashes are? Thanks