Skip to content
Snippets Groups Projects
Commit 7ac0c043 authored by Mark Winter's avatar Mark Winter
Browse files

Static global script-configuration class for loading settings from environment variable

parent 4e151d3b
No related branches found
No related tags found
No related merge requests found
......@@ -127,6 +127,7 @@ copy $(OutDir)CudaMex.dll "$(ProjectDir)Mex.mexw64"</Command>
<ClInclude Include="ScriptCmds\Commands\ScrCmdVarFilter.h" />
<ClInclude Include="ScriptCmds\Commands\ScrCmdWienerFilter.h" />
<ClInclude Include="ScriptCmds\GenCommands.h" />
<ClInclude Include="ScriptCmds\HydraConfig.h" />
<ClInclude Include="ScriptCmds\ScopedProcessMutex.h" />
<ClInclude Include="ScriptCmds\ScriptCommand.h" />
<ClInclude Include="ScriptCmds\ScriptCommandDefines.h" />
......
......@@ -156,6 +156,9 @@
<ClInclude Include="ScriptCmds\ScopedProcessMutex.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ScriptCmds\HydraConfig.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Mex\CudaMex.cpp">
......
......@@ -57,6 +57,7 @@
<ClInclude Include="ScriptCmds\Commands\ScrCmdVarFilter.h" />
<ClInclude Include="ScriptCmds\Commands\ScrCmdWienerFilter.h" />
<ClInclude Include="ScriptCmds\GenCommands.h" />
<ClInclude Include="ScriptCmds\HydraConfig.h" />
<ClInclude Include="ScriptCmds\ScopedProcessMutex.h" />
<ClInclude Include="ScriptCmds\ScriptCommand.h" />
<ClInclude Include="ScriptCmds\ScriptCommandDefines.h" />
......
......@@ -167,5 +167,8 @@
<ClInclude Include="ScriptCmds\ScopedProcessMutex.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ScriptCmds\HydraConfig.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
......@@ -5,7 +5,9 @@
#define DLL_EXPORT_SYM __attribute__((visibility("default")))
#endif
#include "MexIncludes.h"
#include "ScriptCmds/ScriptIncludes.h"
HYDRA_CONFIG_MODULE();
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
......
#include "ScriptCmds/HydraConfig.h"
#include "ScriptCmds/ScriptCommandModule.h"
#include "ScriptCmds/HydraConfig.h"
#include "ScriptCmds/ScriptCommandModule.h"
......@@ -4,6 +4,8 @@
#define NUMPY_IMPORT_MODULE
#include "ScriptCmds/ScriptIncludes.h"
HYDRA_CONFIG_MODULE();
// Make this a unique pointer just in case init can be run more than once
static std::unique_ptr<PyMethodDef[]> hip_methods = nullptr;
static std::unique_ptr<std::string[]> hip_docstrs = nullptr;
......
#pragma once
// HydraConfig - Provides a simple environment-variable based config loader to allow some
// configuration of the Hyrda library (e.g. enabling process-level mutex)
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
class HydraConfig
{
public:
static bool validConfig()
{
return m_staticInst;
}
static bool useProcessMutex()
{
if (!m_staticInst)
return false;
return m_staticInst->bUseProcessMutex;
}
private:
HydraConfig()
{
defaultConfig(this);
}
static void defaultConfig(HydraConfig* pInst)
{
pInst->bUseProcessMutex = false;
}
// TODO: Use env-variable to find a config file instead of env-variables for direct configuration
static void loadConfig(HydraConfig* pInst)
{
char* envUPM = std::getenv("HYDRA_ENABLE_MUTEX");
if ( envUPM )
{
std::string envStr(envUPM);
std::transform(envStr.begin(), envStr.end(), envStr.begin(), ::toupper);
if ( envStr == "TRUE" || envStr == "1" )
pInst->bUseProcessMutex = true;
}
}
static HydraConfig* initConfig()
{
HydraConfig* pInst = new HydraConfig();
HydraConfig::loadConfig(pInst);
return pInst;
}
private:
bool bUseProcessMutex;
static HydraConfig* m_staticInst;
};
#define HYDRA_CONFIG_MODULE() HydraConfig* HydraConfig::m_staticInst = HydraConfig::initConfig()
......@@ -11,5 +11,7 @@
#undef max
#undef min
#include "ScriptCmds/HydraConfig.h"
#include "ScriptCmds/ScriptHelpers.h"
#include "ScriptCmds/ScriptCommand.h"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment