From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Wasabi/bfc/file/recursedir.cpp | 67 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Src/Wasabi/bfc/file/recursedir.cpp (limited to 'Src/Wasabi/bfc/file/recursedir.cpp') diff --git a/Src/Wasabi/bfc/file/recursedir.cpp b/Src/Wasabi/bfc/file/recursedir.cpp new file mode 100644 index 00000000..ca836a28 --- /dev/null +++ b/Src/Wasabi/bfc/file/recursedir.cpp @@ -0,0 +1,67 @@ +#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; +} -- cgit