MFString MFString::GetExtension() const { int dot = FindCharReverse('.'); if(dot > FindCharReverse('/') && dot > FindCharReverse('\\')) return SubStr(dot); return MFString(); }
MFString operator+(const char *pString, const MFString &string) { if(string.IsEmpty()) return MFString(pString); if(!pString || *pString == 0) return string; return MFString::Static(pString) + string; }
MFArray<MFString>& MFString::Split(MFArray<MFString> &output, const char *pDelimiters) { output.clear(); if(!pData) return output; const char *pText = pData->pMemory; while(*pText) { const char *pEnd = MFSeekDelimiter(pText, pDelimiters); output.push(MFString(pText, (size_t)(pEnd - pText))); pText = MFSkipDelimiters(pEnd, pDelimiters); } return output; }
MFString MFString::operator+(const char *pString) const { if(!pString || *pString == 0) return *this; if(IsEmpty()) return MFString(pString); size_t bytes = pData->bytes + MFString_Length(pString); MFString t; t.Reserve(bytes + 1); MFString_CopyCat(t.pData->pMemory, pData->pMemory, pString); t.pData->bytes = bytes; return t; }
void Scan(MFString path) { MFFindData fd; MFFind *pFind = MFFileSystem_FindFirst(MFStr("%s*", path.CStr()), &fd); if(pFind) { do { if(fd.attributes & MFFA_Directory) { Scan(MFString::Format("%s%s/", path.CStr(), fd.pFilename).CStr()); } else { MFString ext = MFString(fd.pFilename).GetExtension(); if(ext.Enumerate(ppFormats, sizeof(ppFormats) / sizeof(ppFormats[0])) > -1) models.push(MFString::Format("%s%s", path.CStr(), fd.pFilename)); } } while(MFFileSystem_FindNext(pFind, &fd)); MFFileSystem_FindClose(pFind); } }