romfs.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. #include <stdint.h>
  3. class ROMFS_Stream;
  4. class ROMFS {
  5. public:
  6. static bool exists(const char *fname);
  7. static ROMFS_Stream *find_stream(const char *fname);
  8. struct embedded_file {
  9. const char *filename;
  10. uint32_t size;
  11. const uint8_t *contents;
  12. };
  13. private:
  14. static const struct embedded_file *find(const char *fname);
  15. static const struct embedded_file files[];
  16. };
  17. class ROMFS_Stream : public Stream
  18. {
  19. public:
  20. ROMFS_Stream(const ROMFS::embedded_file &_f) :
  21. f(_f) {}
  22. size_t write(const uint8_t *buffer, size_t size) override { return 0; }
  23. size_t write(uint8_t data) override { return 0; }
  24. size_t size(void) const;
  25. const char *name(void) const;
  26. int available() override;
  27. int read() override;
  28. int peek() override;
  29. void flush() override {}
  30. size_t readBytes(char *buffer, size_t length) override {
  31. return read((uint8_t*)buffer, length);
  32. }
  33. private:
  34. size_t read(uint8_t* buf, size_t size);
  35. const ROMFS::embedded_file &f;
  36. uint32_t offset = 0;
  37. };