68 lines
1.4 KiB
C++
68 lines
1.4 KiB
C++
|
#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;
|
||
|
}
|