std::vector<plFileName> plStreamSource::GetListOfNames(const plFileName& dir, const plString& ext) { plFileName sDir = dir.Normalize('/'); hsAssert(ext.CharAt(0) != '.', "Don't add a dot"); std::lock_guard<std::mutex> lock(fMutex); // loop through all the file data records, and create the list std::vector<plFileName> retVal; for (auto curData = fFileData.begin(); curData != fFileData.end(); curData++) { if ((curData->second.fDir.AsString().CompareI(sDir.AsString()) == 0) && (curData->second.fExt.CompareI(ext) == 0)) retVal.push_back(curData->second.fFilename); } #ifndef PLASMA_EXTERNAL_RELEASE // in internal releases, we can use on-disk files if they exist // Build the search string as "dir/*.ext" std::vector<plFileName> files = plFileSystem::ListDir(sDir, ("*." + ext).c_str()); for (auto iter = files.begin(); iter != files.end(); ++iter) { plFileName norm = iter->Normalize('/'); if (fFileData.find(norm) == fFileData.end()) // we haven't added it yet retVal.push_back(norm); } #endif // PLASMA_EXTERNAL_RELEASE return retVal; }
bool plStreamSource::InsertFile(const plFileName& filename, hsStream* stream) { plFileName sFilename = filename.Normalize('/'); std::lock_guard<std::mutex> lock(fMutex); if (fFileData.find(sFilename) != fFileData.end()) return false; // duplicate entry, return failure // copy the data over (takes ownership of the stream!) fFileData[sFilename].fFilename = sFilename; fFileData[sFilename].fDir = sFilename.StripFileName(); fFileData[sFilename].fExt = sFilename.GetFileExt(); fFileData[sFilename].fStream = stream; return true; }