12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #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;
- }
|