]> git.stg.codes - stg.git/blobdiff - projects/stargazer/store_loader.h
Add subscriptions (to replace notifiers).
[stg.git] / projects / stargazer / store_loader.h
index a5066926df0831a0800be45cd3b9f1f2de1bcdb1..c187b540670658e63aeda62deed9263bbe4e1744 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-/*
- $Revision: 1.3 $
- $Date: 2010/03/04 12:24:19 $
- $Author: faust $
- */
+#pragma once
 
-/*
- *  Header file for RAII store plugin loader
- */
-
-#ifndef __STORE_LOADER_H__
-#define __STORE_LOADER_H__
+#include "stg/module_settings.h"
 
 #include <string>
 
-#include "base_store.h"
-#include "base_settings.h"
-#include "settings.h"
-#include "noncopyable.h"
-
-class STORE_LOADER : private NONCOPYABLE
+namespace STG
 {
-public:
-    STORE_LOADER(const SETTINGS & settings);
-    ~STORE_LOADER();
-
-    bool Load();
-    bool Unload();
-
-    BASE_STORE * GetStore() { return plugin; };
-
-    const std::string & GetStrError() const { return errorStr; };
-private:
-    bool isLoaded;
-    void * handle;
-    BASE_STORE * plugin;
-    std::string errorStr;
-    MODULE_SETTINGS storeSettings;
-    std::string pluginFileName;
+
+struct Store;
+class SettingsImpl;
+
+class StoreLoader {
+    public:
+        explicit StoreLoader(const SettingsImpl& settings) noexcept;
+        ~StoreLoader();
+
+        StoreLoader(const StoreLoader&) = delete;
+        StoreLoader& operator=(const StoreLoader&) = delete;
+
+        bool load() noexcept;
+        bool unload() noexcept;
+
+        Store& get() noexcept { return *plugin; }
+
+        const std::string& GetStrError() const noexcept { return errorStr; }
+
+    private:
+        bool isLoaded;
+        void* handle;
+        Store* plugin;
+        std::string errorStr;
+        ModuleSettings storeSettings;
+        std::string pluginFileName;
 };
 
-#endif
+}