CFilesystemLoader.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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, size_t depth)
  9. {
  10. open(baseDirectory, depth);
  11. }
  12. CFilesystemLoader::CFilesystemLoader(const CFileInfo & baseDirectory, size_t depth)
  13. {
  14. open(baseDirectory.getName(), depth);
  15. }
  16. void CFilesystemLoader::open(const std::string & baseDirectory, size_t depth)
  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(depth);
  22. if(fileList)
  23. {
  24. this->fileList = std::move(*fileList);
  25. }
  26. }
  27. std::unique_ptr<CInputStream> CFilesystemLoader::load(const std::string & resourceName) const
  28. {
  29. std::unique_ptr<CInputStream> stream(new CFileInputStream(getOrigin() + '/' + resourceName));
  30. return stream;
  31. }
  32. bool CFilesystemLoader::existsEntry(const std::string & resourceName) const
  33. {
  34. for(auto it = fileList.begin(); it != fileList.end(); ++it)
  35. {
  36. if(it->getName() == resourceName)
  37. {
  38. return true;
  39. }
  40. }
  41. return false;
  42. }
  43. std::list<std::string> CFilesystemLoader::getEntries() const
  44. {
  45. std::list<std::string> retList;
  46. for(auto it = fileList.begin(); it != fileList.end(); ++it)
  47. {
  48. retList.push_back(it->getName());
  49. }
  50. return std::move(retList);
  51. }
  52. std::string CFilesystemLoader::getOrigin() const
  53. {
  54. return baseDirectory;
  55. }