From e21edf8b0b2b3bfd054f34664d8425bcd64adb78 Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 10 Apr 2022 22:54:31 +0200 Subject: Added groups for data sources --- StarsEx/DataLoader.cpp | 10 +++++++--- StarsEx/DataLoader.h | 4 +++- StarsEx/DataSource.cpp | 24 ++++++++++++++++++------ StarsEx/DataSource.h | 17 ++++++++++++----- 4 files changed, 40 insertions(+), 15 deletions(-) (limited to 'StarsEx') diff --git a/StarsEx/DataLoader.cpp b/StarsEx/DataLoader.cpp index 024a9b3..c5ad9bd 100644 --- a/StarsEx/DataLoader.cpp +++ b/StarsEx/DataLoader.cpp @@ -96,7 +96,7 @@ DataLoader::EnableMedia(bool enable) // +--------------------------------------------------------------------+ int -DataLoader::InsertDatafile(const char* name, int pos) +DataLoader::InsertDatafile(const char* name, Group group, int pos) { FILE* f = fopen(name, "rb"); if (!f) { @@ -110,7 +110,7 @@ DataLoader::InsertDatafile(const char* name, int pos) if (archive) delete archive; return DATAFILE_INVALID; } - DataSource* source = new ArchiveDataSource(archive); + DataSource* source = new ArchiveDataSource(archive, group); if (pos < 0) sources.append(source); else @@ -121,7 +121,11 @@ DataLoader::InsertDatafile(const char* name, int pos) void DataLoader::ClearSources() { - sources.destroy(); + ListIter iter = sources; + while (++iter) { + if (iter.value()->GetGroup() != Group::BASE) + delete iter.removeItem(); + } } // +--------------------------------------------------------------------+ diff --git a/StarsEx/DataLoader.h b/StarsEx/DataLoader.h index af8b3d5..92cdd11 100644 --- a/StarsEx/DataLoader.h +++ b/StarsEx/DataLoader.h @@ -27,6 +27,8 @@ class Video; class DataLoader { public: + using Group = DataSource::Group; + static const char* TYPENAME() { return "DataLoader"; } enum { DATAFILE_OK, DATAFILE_INVALID, DATAFILE_NOTEXIST }; @@ -43,7 +45,7 @@ public: void UseVideo(Video* v); void EnableMedia(bool enable=true); - int InsertDatafile(const char* name, int pos=-1); + int InsertDatafile(const char* name, Group group=Group::DEFAULT, int pos=-1); void ClearSources(); int EnableDatafile(const char* name); diff --git a/StarsEx/DataSource.cpp b/StarsEx/DataSource.cpp index f352e05..06c7658 100644 --- a/StarsEx/DataSource.cpp +++ b/StarsEx/DataSource.cpp @@ -15,9 +15,12 @@ #include "Text.h" #include "Utils.h" +using Group = DataSource::Group; -DataSource::DataSource() : - m_prefix {""} + +DataSource::DataSource(Group group) : + m_prefix {""}, + m_group {group} { } @@ -27,6 +30,13 @@ DataSource::~DataSource() } +Group +DataSource::GetGroup() const +{ + return m_group; +} + + void DataSource::SetPrefix(const char* prefix) { @@ -37,13 +47,14 @@ DataSource::SetPrefix(const char* prefix) } -ArchiveDataSource::ArchiveDataSource(const char* name) : - ArchiveDataSource(new DataArchive(name)) +ArchiveDataSource::ArchiveDataSource(const char* name, Group group) : + ArchiveDataSource(new DataArchive(name), group) { } -ArchiveDataSource::ArchiveDataSource(DataArchive* archive) : +ArchiveDataSource::ArchiveDataSource(DataArchive* archive, Group group) : + DataSource(group), m_archive {archive} { } @@ -94,7 +105,8 @@ ArchiveDataSource::Load(const char* name, std::uint8_t*& buf, bool null_terminat } -FileSystemDataSource::FileSystemDataSource(const char* path) : +FileSystemDataSource::FileSystemDataSource(const char* path, Group group) : + DataSource(group), m_path {path} { } diff --git a/StarsEx/DataSource.h b/StarsEx/DataSource.h index 3c4a84d..5dbc1d7 100644 --- a/StarsEx/DataSource.h +++ b/StarsEx/DataSource.h @@ -17,24 +17,31 @@ class DataSource { public: - DataSource(); + static const char* TYPENAME() { return "DataSource"; } + + enum class Group { DEFAULT, BASE, MOD }; + + explicit DataSource(Group group=Group::DEFAULT); virtual ~DataSource(); - virtual void SetPrefix(const char* prefix=nullptr); + Group GetGroup() const; + void SetPrefix(const char* prefix=nullptr); + virtual bool Find(const char* name) const = 0; virtual int ListFiles(Text filter, List& items, bool recurse=false) const = 0; virtual int Load(const char* name, std::uint8_t*& buf, bool null_terminate=false) const = 0; protected: Text m_prefix; + Group m_group; }; class ArchiveDataSource : public DataSource { public: - explicit ArchiveDataSource(const char* name); - explicit ArchiveDataSource(DataArchive* archive); + explicit ArchiveDataSource(const char* name, Group group=Group::DEFAULT); + explicit ArchiveDataSource(DataArchive* archive, Group group=Group::DEFAULT); ~ArchiveDataSource() override; bool Find(const char* name) const override; @@ -49,7 +56,7 @@ protected: class FileSystemDataSource : public DataSource { public: - explicit FileSystemDataSource(const char* path="."); + explicit FileSystemDataSource(const char* path=".", Group group=Group::DEFAULT); ~FileSystemDataSource() override; bool Find(const char* name) const override; -- cgit v1.1