/* Starshatter: The Open Source Project Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. */ #ifndef DataSource_h #define DataSource_h #include #include #include "List.h" #include "Text.h" class DataSource { public: static const char* TYPENAME() { return "DataSource"; } DataSource(); virtual ~DataSource(); int Id() const; virtual bool Find(const Text& prefix, const char* name) const = 0; virtual int ListFiles(const Text& prefix, Text filter, List& items, bool recurse=false) const = 0; virtual int Load(const Text& prefix, const char* name, std::uint8_t*& buf, bool null_terminate=false) const = 0; protected: const int m_id; static int s_next_id; }; class ArchiveDataSource : public DataSource { public: explicit ArchiveDataSource(const char* name); explicit ArchiveDataSource(ArchiveEx::Archive* archive); ~ArchiveDataSource() override; bool Find(const Text& prefix, const char* name) const override; int ListFiles(const Text& prefix, Text filter, List& items, bool recurse=false) const override; int Load(const Text& prefix, const char* name, std::uint8_t*& buf, bool null_terminate=false) const override; protected: ArchiveEx::Archive* m_archive; }; class FileSystemDataSource : public DataSource { public: explicit FileSystemDataSource(const char* path="."); ~FileSystemDataSource() override; bool Find(const Text& prefix, const char* name) const override; int ListFiles(const Text& prefix, Text filter, List& items, bool recurse=false) const override; int Load(const Text& prefix, const char* name, std::uint8_t*& buf, bool null_terminate=false) const override; protected: const char* m_path; }; #endif // DataSource_h