
On 20-04-2012 14:35, Beman Dawes wrote:
On Fri, Apr 20, 2012 at 5:24 AM, Thorsten Ottosen
boost::iterator_range<...> boost::directory_range( const boost::path&, const boost::regex& toExclude )
is even better:-)
Especially for recursive iteration, it is useful to skip entire directories.
Mind-blowing! Your suggestion is getting very close to a solution for the general directory search problem I've wrestled with for years.
What we would really like is to be able to apply a series of filters, some of which apply to directories, some to files. Examples are your include|exclude regex filters, applicable to directories|files|both. Another filter might be a file filter<=|>= a given size. Dates and permissions filters would also be useful. Perhaps user supplied filters. And how about filters applied to the contents of files?
I can see those would be useful.
Remark: such support is probably most naturally added to the underying iterator classes by storing some boost::optional<> variables.
I'll need to think about that - it will take me a while to digest this.
Just one remark: The filesystem library may invent its own | syntax for filter which need not be compatiable with e.g. Boost.Range's adaptors. In a sence, we could just be allowed to write boost::directory_range( some_path, directory_filter( "..." ) | filename_filter( "..." ) | filestamp_filter( "..." ) | filesize_filter( "..." ) | custom_filter( ... ) ); Then all the metaprogramming logic can be done internally in boost.filesystem, detecting logical errors and rearranging the filters such that the most beneficial one is run first etc. just my two cents -Thorsten