summaryrefslogtreecommitdiffhomepage
path: root/StarsEx
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-04-10 22:54:31 +0200
committerAki <please@ignore.pl>2022-04-10 23:03:50 +0200
commite21edf8b0b2b3bfd054f34664d8425bcd64adb78 (patch)
tree6a1edf645da75bcfa069e2ba33baa1c334e79f31 /StarsEx
parent94ca59386cb94877ea15856a3c17c116c756a16d (diff)
downloadstarshatter-e21edf8b0b2b3bfd054f34664d8425bcd64adb78.zip
starshatter-e21edf8b0b2b3bfd054f34664d8425bcd64adb78.tar.gz
starshatter-e21edf8b0b2b3bfd054f34664d8425bcd64adb78.tar.bz2
Added groups for data sources
Diffstat (limited to 'StarsEx')
-rw-r--r--StarsEx/DataLoader.cpp10
-rw-r--r--StarsEx/DataLoader.h4
-rw-r--r--StarsEx/DataSource.cpp24
-rw-r--r--StarsEx/DataSource.h17
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;