Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions Input/include/ParseParams.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

#include <string>
#include "ParamsCarrier.hpp"
#include "CLI/App.hpp"
#include "CLI/Option.hpp"

/**
* @brief ParseParams is responsible for parsing arguments from CLI.
Expand Down Expand Up @@ -61,6 +63,109 @@ class ParseParams
* @return Path where Geliosphere is located
*/
std::string getApplicationPath(char **argv);

/**
* @brief Parse state enumeration for state machine pattern.
*/
enum class ParseState {
SETUP,
PARSING,
VALIDATION,
PROCESSING,
COMPLETE,
ERROR
};

/**
* @brief Configuration structure to hold parsing parameters.
*/
struct ParseConfig {
std::string inputFile;
std::string pathToLogFile;
float newDt, newK0, newV;
int month, year;
std::string newDestination, settings, customModelString;
int numberOfTestParticles;
std::string currentApplicationPath;
};

/**
* @brief Setup CLI options for the application.
*
* @param app CLI::App instance to setup options on
* @param config Configuration structure containing all parsing parameters
*/
void setupCliOptions(CLI::App& app, ParseConfig& config);

/**
* @brief Setup option relationships (excludes, requires).
*/
void setupOptionRelationships();

/**
* @brief Execute state machine transition.
*
* @param currentState Current parsing state
* @param config Configuration structure
* @param app CLI app instance
* @param argc Argument count
* @param argv Argument values
* @return Next state
*/
ParseState executeState(ParseState currentState, ParseConfig& config, CLI::App& app, int argc, char** argv);

/**
* @brief Setup state handler.
*
* @param config Configuration structure
* @param app CLI app instance
* @return Next state
*/
ParseState handleSetupState(ParseConfig& config, CLI::App& app);

/**
* @brief Parsing state handler.
*
* @param app CLI app instance
* @param argc Argument count
* @param argv Argument values
* @return Next state
*/
ParseState handleParsingState(CLI::App& app, int argc, char** argv);

/**
* @brief Validation state handler.
*
* @return Next state
*/
ParseState handleValidationState();

/**
* @brief Processing state handler.
*
* @param config Configuration structure
* @return Next state
*/
ParseState handleProcessingState(const ParseConfig& config);

// CLI option pointers - stored as class members to be accessible across functions
CLI::Option *forwardModel;
CLI::Option *backwardModel;
CLI::Option *solarPropLikeModel;
CLI::Option *geliosphereModel;
CLI::Option *csv;
CLI::Option *run_simulation;
CLI::Option *cpuOnly;
CLI::Option *batchRun;
CLI::Option *dtset;
CLI::Option *kset;
CLI::Option *vset;
CLI::Option *destination;
CLI::Option *setNumberOfTestParticles;
CLI::Option *monthOption;
CLI::Option *yearOption;
CLI::Option *settingsOption;
CLI::Option *customModel;
};

#endif
2 changes: 0 additions & 2 deletions Input/src/InputValidation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
#include <unistd.h>
#include <vector>

#include "CLI/App.hpp"
#include "CLI/Option.hpp"
#include "spdlog/spdlog.h"

#include "MeasureValuesTransformation.hpp"
Expand Down
Loading