MultiDirCollection::MultiDirCollection(const Files::PathContainer& directories, const std::string& extension, bool foldCase) : mFiles (NameLess (!foldCase)) { NameEqual equal (!foldCase); for (PathContainer::const_iterator iter = directories.begin(); iter!=directories.end(); ++iter) { if (!boost::filesystem::is_directory(*iter)) { std::cout << "Skipping invalid directory: " << (*iter).string() << std::endl; continue; } for (boost::filesystem::directory_iterator dirIter(*iter); dirIter != boost::filesystem::directory_iterator(); ++dirIter) { boost::filesystem::path path = *dirIter; if (!equal (extension, path.extension().string())) continue; std::string filename = path.filename().string(); TIter result = mFiles.find (filename); if (result==mFiles.end()) { mFiles.insert (std::make_pair (filename, path)); } else if (result->first==filename) { mFiles[filename] = path; } else { // handle case folding mFiles.erase (result->first); mFiles.insert (std::make_pair (filename, path)); } } } }
int NameGreater (char *name1, char *name2) { return !NameLess(name1, name2); }