$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Rob Stewart (stewart_at_[hidden])
Date: 2004-10-04 11:24:02
From: Angus Leeming <angus.leeming_at_[hidden]>
> Rob Stewart wrote:
> >> This is, in essence, what I am proposing. I have now reworked the
> >> interface following Gennadiy's suggestion. Here's a glob_iterator that
> >> can recurse down directories:
[snipped code]
> > I think you misunderstood what Gennadiy meant.  (If not, I think
> > this is a good idea, anyway.)  Your function should accept an
> > output iterator through which you save the results.  That enables
> > the caller to decide where the results go instead of you deciding
> > that they go into a list which then must be iterated.  Thus, I'm
> > proposing something like this:
> > 
> > template <typename OutIt, typename Char>
> > OutIt
> > glob(OutIt & out, std::basic_string<Char> const & pattern,
> >    filesystem::path const & pathname, glob_flags flags);
> > 
> > Appropriate output iterators can forward the matches to a
> > collection, to a GUI control, to a file, etc.
> 
> As for the output iterator idea, I don't see how to use it. For example,
> with my suggestion I could populate an STL container with:
> 
>         namespace fs = filesystem;
>         std::list<fs::path> const matches(
>             glob_iterator("*.cpp", fs::path("."), glob_brace),
>             glob_iterator());
> 
> How do I do that with your idea? Once you've explained it, can you tell me
> why it's better than glob_iterator, above?
Gennadiy already weighed in on my interpretation of his
statement.  As to what I've suggested, you already had code that
built a std::list -- your original version, IIRC.  Where you
appended to the list, you would assign to the dereferenced output
iterator.  That deref/assignment can be coded to do many things
by the author of the output iterator, including appending to a
std::list.
-- Rob Stewart stewart_at_[hidden] Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;