Skip to content
Snippets Groups Projects
Select Git revision
  • a30db92df31428962f1fef6b625e72a3998d9a5e
  • master default protected
  • develop
  • timing
  • feature/linux
  • feature/deviceName
  • feature/MatlabBackup
  • feature/MatlabWrapper
  • v2.02
  • v2.01
  • v2.0
  • Release_1.0
  • HIP_name_chnage
  • deletedOld
  • v1.0.2
  • PaperRelease
  • Release-0.0.6b
  • Release-0.0.5b
  • Release-0.0.4b
  • Release-0.0.3a
  • Release-0.0.2a
  • Release-0.0.1a
22 results

HydraConfig.h

Blame
  • HydraConfig.h 1.69 KiB
    #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>
    
    #include "ScopedProcessMutex.h"
    #include "ScriptIncludes.h"
    
    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;
    		}
    	}
    
    	// TODO: MRW HACK - this is a pretty nasty way to get config info to user
    	static void checkConfig(HydraConfig* pInst)
    	{
    		if ( pInst->bUseProcessMutex && !SUPPORT_PROCESS_MUTEX() )
    			Script::warnMsg("HYDRA_ENABLE_MUTEX set to TRUE but Hydra was compiled without USE_PROCESS_MUTEX flag!\n");
    	}
    
    	static HydraConfig* initConfig()
    	{
    		HydraConfig* pInst = new HydraConfig();
    
    		HydraConfig::loadConfig(pInst);
    		HydraConfig::checkConfig(pInst);
    
    		return pInst;
    	}
    
    private:
    	bool bUseProcessMutex;
    
    	static HydraConfig* m_staticInst;
    };
    
    #define HYDRA_CONFIG_MODULE() HydraConfig* HydraConfig::m_staticInst = HydraConfig::initConfig()