1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#pragma once
#include "imodule.h"
#include "iradiant.h"
#include "os/fs.h"
#define SYMBOL_CREATE_RADIANT CreateRadiant
#define SYMBOL_DESTROY_RADIANT DestroyRadiant
#define Q(x) #x
#define QUOTE(x) Q(x)
namespace module
{
class DynamicLibrary;
class CoreModule
{
private:
typedef radiant::IRadiant* (*CreateRadiantFunc)(IApplicationContext& context);
typedef void (*DestroyRadiantFunc)(radiant::IRadiant* radiant);
radiant::IRadiant* _instance;
std::unique_ptr<DynamicLibrary> _coreModuleLibrary;
public:
class FailureException :
public std::runtime_error
{
public:
FailureException(const std::string& msg) :
std::runtime_error(msg)
{}
};
CoreModule(IApplicationContext& context);
~CoreModule();
radiant::IRadiant* get();
// Returns the name of the shared library containing the core module
static std::string Filename();
private:
std::string findCoreModule(IApplicationContext& context);
void destroy();
};
}
|