winamp/Src/Wasabi/bfc/file/recursedir.cpp

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