aboutsummaryrefslogtreecommitdiff
path: root/primedev/plugins/interfaces/interface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'primedev/plugins/interfaces/interface.cpp')
-rw-r--r--primedev/plugins/interfaces/interface.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/primedev/plugins/interfaces/interface.cpp b/primedev/plugins/interfaces/interface.cpp
new file mode 100644
index 00000000..4c006f2c
--- /dev/null
+++ b/primedev/plugins/interfaces/interface.cpp
@@ -0,0 +1,36 @@
+#include <string.h>
+#include "interface.h"
+
+InterfaceReg* s_pInterfaceRegs;
+
+InterfaceReg::InterfaceReg(InstantiateInterfaceFn fn, const char* pName) : m_pName(pName)
+{
+ m_CreateFn = fn;
+ m_pNext = s_pInterfaceRegs;
+ s_pInterfaceRegs = this;
+}
+
+void* CreateInterface(const char* pName, InterfaceStatus* pReturnCode)
+{
+ for (InterfaceReg* pCur = s_pInterfaceRegs; pCur; pCur = pCur->m_pNext)
+ {
+ if (strcmp(pCur->m_pName, pName) == 0)
+ {
+ if (pReturnCode)
+ {
+ *pReturnCode = InterfaceStatus::IFACE_OK;
+ }
+
+ NS::log::PLUGINSYS->info("creating interface {}", pName);
+ return pCur->m_CreateFn();
+ }
+ }
+
+ if (pReturnCode)
+ {
+ *pReturnCode = InterfaceStatus::IFACE_FAILED;
+ }
+
+ NS::log::PLUGINSYS->error("could not find interface {}", pName);
+ return NULL;
+}