1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00
Beef/BeefySysLib/util/FileEnumerator.cpp

89 lines
1.8 KiB
C++
Raw Normal View History

2019-08-23 11:56:54 -07:00
#include "FileEnumerator.h"
USING_NS_BF;
String FileEnumeratorEntry::GetFilePath() const
{
char outName[4096];
int outSize = 4096;
BfpFindFileData_GetFileName(mFindData, outName, &outSize, NULL);
return mDirPath + "/" + outName;
}
String FileEnumeratorEntry::GetFileName() const
{
char outName[4096];
int outSize = 4096;
BfpFindFileData_GetFileName(mFindData, outName, &outSize, NULL);
return outName;
}
const FileEnumerator::Iterator& FileEnumerator::Iterator::operator++()
{
BF_ASSERT(mIdx == mFileEnumerator->mIdx);
mFileEnumerator->Next();
mIdx = mFileEnumerator->mIdx;
return *this;
}
bool FileEnumerator::Iterator::operator==(const FileEnumerator::Iterator& rhs)
{
return
(rhs.mFileEnumerator == mFileEnumerator) &&
(rhs.mIdx == mIdx);
}
bool FileEnumerator::Iterator::operator!=(const FileEnumerator::Iterator& rhs)
{
return
(rhs.mFileEnumerator != mFileEnumerator) ||
(rhs.mIdx != mIdx);
}
const FileEnumerator::FileEnumeratorEntry& FileEnumerator::Iterator::operator*()
{
return *mFileEnumerator;
}
FileEnumerator::FileEnumerator(const String& dirPath, Flags flags)
{
mDirPath = dirPath;
mFindData = BfpFindFileData_FindFirstFile((dirPath + "/*.*").c_str(), (BfpFindFileFlags)flags, NULL);
mFlags = flags;
if (mFindData != NULL)
mIdx = 0;
else
mIdx = -1;
}
FileEnumerator::~FileEnumerator()
{
if (mFindData != NULL)
BfpFindFileData_Release(mFindData);
}
bool FileEnumerator::Next()
{
if (BfpFindFileData_FindNextFile(mFindData))
mIdx++;
else
mIdx = -1;
return mIdx != -1;
}
FileEnumerator::Iterator FileEnumerator::begin()
{
Iterator itr;
itr.mFileEnumerator = this;
itr.mIdx = mIdx;
return itr;
}
FileEnumerator::Iterator FileEnumerator::end()
{
Iterator itr;
itr.mFileEnumerator = this;
itr.mIdx = -1;
return itr;
}