
From: Angus Leeming <angus.leeming@btopenworld.com>
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:
class BOOST_GLOB_DECL glob_iterator : public iterator_facade< glob_iterator // Derived type , filesystem::path const // value_type , single_pass_traversal_tag > { public: glob_iterator() {} glob_iterator(std::string const & pattern, filesystem::path const & wd, glob_flags flags); private: ... };
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.
It works, but is considerably slower than the function returning a list. No doubt profiling will help track down what I'm doing inefficiiently.
No doubt. -- Rob Stewart stewart@sig.com Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;