Rewrite options handling in an object oriented fashion

Big rewrite and about 100 lines removed.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2010-11-04 08:03:27 +01:00
parent fb50e16cdd
commit bacb645939
9 changed files with 181 additions and 280 deletions

View File

@@ -17,25 +17,51 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(UCIOPTION_H_INCLUDED)
#define UCIOPTION_H_INCLUDED
////
//// Includes
////
#include <cassert>
#include <cstdlib>
#include <map>
#include <string>
////
//// Prototypes
////
class Option {
public:
Option(); // To allow insertion in a std::map
Option(const char* defaultValue, std::string type = "string");
Option(bool defaultValue, std::string type = "check");
Option(int defaultValue, int minValue, int maxValue);
void set_value(const std::string& value);
template<typename T> T value() const;
private:
friend void init_uci_options();
friend void print_uci_options();
std::string defaultValue, currentValue, type;
size_t idx;
int minValue, maxValue;
};
template<typename T>
inline T Option::value() const {
assert(type != "UNDEFINED");
return T(atoi(currentValue.c_str()));
}
template<>
inline std::string Option::value<std::string>() const {
assert(type != "UNDEFINED");
return currentValue;
}
typedef std::map<std::string, Option> OptionsMap;
extern OptionsMap Options;
extern void init_uci_options();
extern void print_uci_options();
extern bool get_option_value_bool(const std::string& optionName);
extern int get_option_value_int(const std::string& optionName);
extern std::string get_option_value_string(const std::string& optionName);
extern void set_option_value(const std::string& optionName,const std::string& newValue);
#endif // !defined(UCIOPTION_H_INCLUDED)