COSC-3P93-Project/Step 3/include/engine/util/parser.h

50 lines
1.9 KiB
C++

/*
* Created by Brett Terpstra 6920201 on 14/10/22.
* Copyright (c) Brett Terpstra 2022 All Rights Reserved
*/
#ifndef STEP_2_PARSER_H
#define STEP_2_PARSER_H
#include "std.h"
namespace Raytracing {
/**
* The parser class is used to parse incoming values from the commandline.
* It is not required that you use it for provided values
* and in fact should work for values provided via stdin
* however they must be provided in single line SSV char* form.
*/
class Parser {
private:
std::unordered_map<std::string, std::string> raw_values;
std::unordered_map<std::string, std::string> defaultValues;
std::vector<std::string> descriptions;
public:
Parser();
// Adds an option (or options) with default values.
// default value defaults to an empty string and will not be added
// useful if you want to add a description to the help menu.
void addOption(const std::string& option, const std::string& description, const std::string& defaultValue = "");
void addOption(const std::vector<std::string>& options, const std::string& description, const std::string& defaultValue = "");
// returns true if the option provided is different from the default option.
bool hasOptionChanged(const std::string& option);
// checks if the option has been provided to the parser
bool hasOption(const std::string& option);
// check if any of the options exist, only use for checking options that lead to the same path
// as this will return true at first option.
bool hasOption(const std::vector<std::string>& options);
// does not check to see if the option exists.
std::string getOptionValue(const std::string& option);
// parse the options from args
int parse(char** args, int argc);
void printDifferenceInInfo();
void printAllInInfo();
};
}
#endif //STEP_2_PARSER_H