CFilesystemLoader.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "StdInc.h"
  2. #include "CFilesystemLoader.h"
  3. #include "CFileInfo.h"
  4. #include "CFileInputStream.h"
  5. CFilesystemLoader::CFilesystemLoader()
  6. {
  7. }
  8. CFilesystemLoader::CFilesystemLoader(const std::string & baseDirectory)
  9. {
  10. open(baseDirectory);
  11. }
  12. CFilesystemLoader::CFilesystemLoader(const CFileInfo & baseDirectory)
  13. {
  14. open(baseDirectory);
  15. }
  16. void CFilesystemLoader::open(const std::string & baseDirectory)
  17. {
  18. // Indexes all files in the directory and store them
  19. this->baseDirectory = baseDirectory;
  20. CFileInfo directory(baseDirectory);
  21. std::unique_ptr<std::list<CFileInfo> > fileList = directory.listFiles();
  22. if(fileList == nullptr)
  23. {
  24. throw std::runtime_error("Directory " + baseDirectory + " not available.");
  25. }
  26. this->fileList = std::move(*fileList);
  27. }
  28. void CFilesystemLoader::open(const CFileInfo & baseDirectory)
  29. {
  30. open(baseDirectory.getName());
  31. }
  32. std::unique_ptr<CInputStream> CFilesystemLoader::load(const std::string & resourceName) const
  33. {
  34. std::unique_ptr<CInputStream> stream(new CFileInputStream(resourceName));
  35. return stream;
  36. }
  37. bool CFilesystemLoader::existsEntry(const std::string & resourceName) const
  38. {
  39. for(auto it = fileList.begin(); it != fileList.end(); ++it)
  40. {
  41. if((*it).getName() == resourceName)
  42. {
  43. return true;
  44. }
  45. }
  46. return false;
  47. }
  48. std::list<std::string> CFilesystemLoader::getEntries() const
  49. {
  50. std::list<std::string> retList;
  51. for(auto it = fileList.begin(); it != fileList.end(); ++it)
  52. {
  53. retList.push_back(it->getName());
  54. }
  55. return std::move(retList);
  56. }