Boost logo

Boost :

From: Beman Dawes (bdawes_at_[hidden])
Date: 2002-07-19 19:40:27


At 07:39 AM 7/18/2002, Thomas Witt wrote:

>On Monday 15 July 2002 18:30, Beman Dawes wrote:
>> The Filesystem Library has been updated in the Boost sandbox CVS.
>
>I just had a look aat the docs. Something that seems to be error prone
>to me is that bool empty(path const&) and bool path::empty() have
>different semantics.
>
>I barely manage to keep in mind whether release is a member or not for
the
>smart pointer of the day.

Good point.

The underlying problem is that a path is conceptually a container. A very
limited one, to be sure, but none the less a path conceptually contains a
sequence of str::strings representing the names of the directories and file
(if any). I always think of a path as containing a
std::vector<std::string>, but any sequence will do. Implementations may
really maintain the internal state as a string, but conceptually it is
still a sequence of strings.

This conceptual model of a path, not tied to any particular format for
representation as a single string, is what ensures portability even in the
face of extreme operating system idioscynrocies.

Mostly users aren't overly concerned with getting at the path contents as a
sequence of strings, except may the last one (see path::leaf()). But there
will be applications that want to iterate over the strings. You can't just
say "well, parse the generic_path() output string into sub-strings" because
there may be no unambiguous parse. That's a fact of life for operating
systems that allow slashes in directory or file names.

(There is the possibility of providing an escape for slashes; that would
make the potential ambiguity to a bit less likely.)

That's a long way of saying that class path really needs some standard
library container-like functions, or maybe a way to export a
container. The path::empty() function came about because I got tired of
writing (for path foo):

    if ( foo.generic_path().empty() ) ...

And wanted to write instead:

    if ( foo.empty() ) ...

The name "empty" came from the same function in standard library
containers.

Anyhow, it may be easier to know what to do about path::empty() once the
question of how to provide a container-like (rather that the current
string-like) views of the contents of a path.

--Beman


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk