VirtualC64 v5.0 beta
Commodore 64 Emulator
Loading...
Searching...
No Matches
Option.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2// This file is part of VirtualC64
3//
4// Copyright (C) Dirk W. Hoffmann. www.dirkwhoffmann.de
5// This FILE is dual-licensed. You are free to choose between:
6//
7// - The GNU General Public License v3 (or any later version)
8// - The Mozilla Public License v2
9//
10// SPDX-License-Identifier: GPL-3.0-or-later OR MPL-2.0
11// -----------------------------------------------------------------------------
13
14#pragma once
15
16#include "OptionTypes.h"
17#include "Parser.h"
18#include <memory>
19
20namespace vc64 {
21
22class OptionParser {
23
24public:
25
26 virtual ~OptionParser() = default;
27
28protected:
29
30 Option opt;
31 i64 arg;
32 string unit;
33
34 OptionParser(Option opt) : opt(opt), arg(0) { };
35 OptionParser(Option opt, const string &unit) : opt(opt), arg(0), unit(unit) { };
36 OptionParser(Option opt, i64 arg) : opt(opt), arg(arg) { };
37 OptionParser(Option opt, i64 arg, const string &unit) : opt(opt), arg(arg), unit(unit) { };
38
39 // Factory method for creating the proper parser instance for an option
40 static std::unique_ptr<OptionParser> create(Option opt, i64 arg = 0);
41
42 // Parses an argument provides as string
43 virtual i64 parse(const string &arg) { return 0; }
44
45 // Data providers
46 virtual string asPlainString() { return asString(); }
47 virtual string asString() = 0;
48 virtual string keyList() = 0;
49 virtual string argList() = 0;
50
51public:
52
53 static i64 parse(Option opt, const string &arg);
54 static string asPlainString(Option opt, i64 arg);
55 static string asString(Option opt, i64 arg);
56 static string keyList(Option opt);
57 static string argList(Option opt);
58};
59
60class BoolParser : public OptionParser {
61
62public:
63
64 using OptionParser::OptionParser;
65
66 virtual i64 parse(const string &s) override { arg = util::parseBool(s); return arg; }
67 virtual string asString() override { return arg ? "true" : "false"; }
68 virtual string keyList() override { return "true, false"; }
69 virtual string argList() override { return "{ true | false }"; }
70};
71
72class NumParser : public OptionParser {
73
74public:
75
76 using OptionParser::OptionParser;
77
78 virtual i64 parse(const string &s) override { arg = util::parseNum(s); return arg; }
79 virtual string asPlainString() override { return std::to_string(arg); }
80 virtual string asString() override { return asPlainString() + unit; }
81 virtual string keyList() override { return "<value>"; }
82 virtual string argList() override { return "<value>"; }
83};
84
85class HexParser : public OptionParser {
86
87public:
88
89 using OptionParser::OptionParser;
90
91 virtual i64 parse(const string &s) override { arg = util::parseNum(s); return arg; }
92 virtual string asPlainString() override;
93 virtual string asString() override { return asPlainString() + unit; }
94 virtual string keyList() override { return "<value>"; }
95 virtual string argList() override { return "<value>"; }
96};
97
98template <typename T>
99class EnumParser : public OptionParser {
100
101 using OptionParser::OptionParser;
102
103 virtual i64 parse(const string &s) override { return (arg = util::parseEnum<T>(s)); }
104 virtual string asPlainString() override { return T::plainkey(isize(arg)); }
105 virtual string asString() override { return T::key(isize(arg)); }
106 virtual string keyList() override { return T::keyList(); }
107 virtual string argList() override { return T::argList(); }
108};
109
110}
VirtualC64 project namespace.
Definition CmdQueue.cpp:16