#include "precomp_wasabi_bfc.h" #include "recursedir.h" RecurseDir::RecurseDir( const wchar_t *_path, const wchar_t *_match ) : path( _path ), match( _match ) { if ( match.isempty() ) match = Wasabi::Std::matchAllFiles(); curdir = new ReadDir( path, match ); } RecurseDir::~RecurseDir() { dirstack.deleteAll(); } int RecurseDir::next() { for ( ;;) { if ( curdir == NULL ) { // pop one off the stack curdir = dirstack.getLast(); if ( curdir == NULL ) return 0; // done dirstack.removeLastItem(); } int r = curdir->next(); if ( r <= 0 ) { delete curdir; curdir = NULL; continue; // get another one } // ok, we have a file to look at if ( curdir->isDir() ) { // descend into it StringW newpath = curdir->getPath(); newpath.AppendPath( curdir->getFilename() ); dirstack.addItem( curdir ); // push the old one curdir = new ReadDir( newpath, match ); // start new one continue; } return r; } } const wchar_t *RecurseDir::getPath() { if ( curdir == NULL ) return NULL; return curdir->getPath(); } const wchar_t *RecurseDir::getFilename() { if ( curdir == NULL ) return NULL; return curdir->getFilename(); } const wchar_t *RecurseDir::getOriginalPath() { return path; }