diff options
author | Aki <please@ignore.pl> | 2022-04-10 22:54:31 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2022-04-10 23:03:50 +0200 |
commit | e21edf8b0b2b3bfd054f34664d8425bcd64adb78 (patch) | |
tree | 6a1edf645da75bcfa069e2ba33baa1c334e79f31 /StarsEx | |
parent | 94ca59386cb94877ea15856a3c17c116c756a16d (diff) | |
download | starshatter-e21edf8b0b2b3bfd054f34664d8425bcd64adb78.zip starshatter-e21edf8b0b2b3bfd054f34664d8425bcd64adb78.tar.gz starshatter-e21edf8b0b2b3bfd054f34664d8425bcd64adb78.tar.bz2 |
Added groups for data sources
Diffstat (limited to 'StarsEx')
-rw-r--r-- | StarsEx/DataLoader.cpp | 10 | ||||
-rw-r--r-- | StarsEx/DataLoader.h | 4 | ||||
-rw-r--r-- | StarsEx/DataSource.cpp | 24 | ||||
-rw-r--r-- | StarsEx/DataSource.h | 17 |
4 files changed, 40 insertions, 15 deletions
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<DataSource> 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<Text>& 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; |