/* * Application.h * * Created on: 13 Jul 2017 * Author: wentzelc */ #ifndef REDACORE_APPLICATIONCORE_H_ #define REDACORE_APPLICATIONCORE_H_ // Standard C/C++ Libraries /* none */ // redA Libraries #include "SignalCore.h" #include "TimingCore.h" #include "LogCore.h" #include "DataTreeCore.h" #include "JSONparseCore.h" #include "FunctionCore.h" #include "SelectableCore.h" //--------------------------------------------------------------------------- // Preview typedef struct SFunctionType TFunctionType; typedef struct SFunctionItem TFunctionItem; typedef CFunctionCore * (*FFuncConstructor)( const char * Name ); class Application; //--------------------------------------------------------------------------- struct SFunctionType { char * Name = NULL; FFuncConstructor Constructor = NULL; TFunctionType * Next = NULL; }; //--------------------------------------------------------------------------- struct SFunctionItem { CFunctionCore * Function = NULL; SFunctionItem * Next = NULL; }; //--------------------------------------------------------------------------- class CApplication { protected: // Variables used for configuration char * ConfigFile = NULL; char * DefinitionFile = NULL; char * AddressFile = NULL; char * BackupFolder = NULL; // Configuration CDataMember * DataTree = NULL; CJSONparse * JSONparser = NULL; // List TFunctionType * FirstFunctionType = NULL; TFunctionItem * FirstFunction = NULL; // Output int LogBufSize = 0; EDebugLevel LogLevel = dlNone; int LogOutput = loNone; public: // Public function vars CLogCore * Log = NULL; CSelect * Selector = NULL; // Configuration CDataMember * Config = NULL; CDataMember * Definition = NULL; CDataMember * AddressList = NULL; // Life Cycle CApplication( EDebugLevel pDebugLevel ); virtual ~CApplication(); // Manage Config File bool ReadParam( int argc, char *argv[] ); void GetProcessName( char ** ProcessName, char * pFilePath ); bool LoadConfig(); bool SaveConfig(); // Manually set configuration bool SetLogParam( int pLogBufferSize, EDebugLevel pDebugLevel, int pOutputDisplay ); inline void WriteToScreen( const char * BasePath, const int Indent = 2 ) { JSONparser->WriteToScreen( BasePath, Indent ); }; // Init application bool InitApplication(); bool InitFunctions(); bool InitFunction( CFunctionCore * Function ); bool InitFunctionLinks(); // Manage Functions bool AddFunctionType( const char * Type, FFuncConstructor Constructor ); CFunctionCore * AddFunction( const char * Type, const char * Name ); CFunctionCore * GetFunction( const char * Name ); CDataMember * GetAddress( const char * SearchAddress ); // Run Application bool Run( bool TerminateOnError ); }; //--------------------------------------------------------------------------- #endif /* REDACORE_APPLICATIONCORE_H_ */