PolyBasicFileProvider.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "polycode/core/PolyBasicFileProvider.h"
  2. using namespace Polycode;
  3. BasicFileProvider::BasicFileProvider() : CoreFileProvider() {
  4. type = "folder";
  5. }
  6. void BasicFileProvider::addSource(const String &source) {
  7. sourceFolders.push_back(source);
  8. }
  9. void BasicFileProvider::removeSource(const String &source) {
  10. for(int i=0; i < sourceFolders.size(); i++) {
  11. if(sourceFolders[i] == source) {
  12. sourceFolders.erase(sourceFolders.begin()+i);
  13. return;
  14. }
  15. }
  16. }
  17. Polycode::CoreFile *BasicFileProvider::openFile(const String &fileName, const String &opts) {
  18. FILE *file = NULL;
  19. for(int i=0; i < sourceFolders.size(); i++) {
  20. file = fopen((sourceFolders[i]+"/"+fileName).c_str(), opts.c_str());
  21. if(file) {
  22. break;
  23. }
  24. }
  25. if(!file) {
  26. file = fopen(fileName.c_str(), opts.c_str());
  27. }
  28. if(file) {
  29. BasicFile *retFile = NULL;
  30. retFile = new BasicFile();
  31. retFile->file = file;
  32. return retFile;
  33. }
  34. return NULL;
  35. }
  36. void BasicFileProvider::closeFile(Polycode::CoreFile *file) {
  37. BasicFile *basicFile = (BasicFile*) file;
  38. fclose(basicFile->file);
  39. delete basicFile;
  40. }
  41. long BasicFile::read( void * ptr, size_t size, size_t count) {
  42. return fread(ptr, size, count, file);
  43. }
  44. long BasicFile::write( const void * ptr, size_t size, size_t count) {
  45. return fwrite(ptr, size, count, file);
  46. }
  47. int BasicFile::seek(long int offset, int origin) {
  48. return fseek(file, offset, origin);
  49. }
  50. long BasicFile::tell() {
  51. return ftell(file);
  52. }