aboutsummaryrefslogtreecommitdiff
path: root/backends/factories/fs-factory-maker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/factories/fs-factory-maker.cpp')
-rw-r--r--backends/factories/fs-factory-maker.cpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/backends/factories/fs-factory-maker.cpp b/backends/factories/fs-factory-maker.cpp
new file mode 100644
index 0000000000..8bef982f37
--- /dev/null
+++ b/backends/factories/fs-factory-maker.cpp
@@ -0,0 +1,113 @@
+#include "backends/factories/abstract-fs-factory.h"
+
+/*
+ * All the following includes choose, at compile time, which specific backend will be used
+ * during the execution of the ScummVM.
+ *
+ * It has to be done this way because not all the necessary libraries will be available in
+ * all build environments. Additionally, this results in smaller binaries.
+ */
+#if defined(__amigaos4__)
+ #include "backends/factories/amigaos4/amigaos4-fs-factory.cpp"
+#endif
+
+#if defined(__DC__)
+ #include "backends/factories/dc/ronincd-fs-factory.cpp"
+#endif
+
+#if defined(__DS__)
+ #include "backends/factories/ds/ds-fs-factory.cpp"
+#endif
+
+#if defined(__GP32__)
+ #include "backends/factories/gp32/gp32-fs-factory.cpp"
+#endif
+
+#if defined(__MORPHOS__)
+ #include "backends/factories/morphos/abox-fs-factory.cpp"
+#endif
+
+#if defined(PALMOS_MODE)
+ #include "backends/factories/palmos/palmos-fs-factory.cpp"
+#endif
+
+#if defined(__PLAYSTATION2__)
+ #include "backends/factories/ps2/ps2-fs-factory.cpp"
+#endif
+
+#if defined(__PSP__)
+ #include "backends/factories/psp/psp-fs-factory.cpp"
+#endif
+
+#if defined(__SYMBIAN32__)
+ #include "backends/factories/symbian/symbian-fs-factory.cpp"
+#endif
+
+#if defined(UNIX)
+ #include "backends/factories/posix/posix-fs-factory.cpp"
+#endif
+
+#if defined(WIN32)
+ #include "backends/factories/windows/windows-fs-factory.cpp"
+#endif
+
+/**
+ * Creates concrete FilesystemFactory and FileFactory objects depending on the current architecture.
+ */
+class FilesystemFactoryMaker {
+public:
+
+ /**
+ * Returns the correct concrete filesystem factory depending on the current build architecture.
+ */
+ static AbstractFilesystemFactory *makeFactory();
+
+protected:
+ FilesystemFactoryMaker() {}; // avoid instances of this class
+};
+
+AbstractFilesystemFactory *FilesystemFactoryMaker::makeFactory(){
+ #if defined(__amigaos4__)
+ return &AmigaOSFilesystemFactory::instance();
+ #endif
+
+ #if defined(__DC__)
+ return &RoninCDFilesystemFactory::instance();
+ #endif
+
+ #if defined(__DS__)
+ return &DSFilesystemFactory::instance();
+ #endif
+
+ #if defined(__GP32__)
+ return &GP32FilesystemFactory::instance();
+ #endif
+
+ #if defined(__MORPHOS__)
+ return &ABoxFilesystemFactory::instance();
+ #endif
+
+ #if defined(PALMOS_MODE)
+ return &PalmOSFilesystemFactory::instance();
+ #endif
+
+ #if defined(__PLAYSTATION2__)
+ return &Ps2FilesystemFactory::instance();
+ #endif
+
+ #if defined(__PSP__)
+ return &PSPFilesystemFactory::instance();
+ #endif
+
+ #if defined(__SYMBIAN32__)
+ return &SymbianFilesystemFactory::instance();
+ #endif
+
+ #if defined(UNIX)
+ return &POSIXFilesystemFactory::instance();
+ #endif
+
+ #if defined(WIN32)
+ return &WindowsFilesystemFactory::instance();
+ #endif
+}