119 lines
2.5 KiB
Dart
119 lines
2.5 KiB
Dart
import 'package:libac_dart/argparse/types/Bool.dart';
|
|
import 'package:libac_dart/argparse/types/Integers.dart';
|
|
import 'package:libac_dart/argparse/types/String.dart';
|
|
|
|
abstract class Argument<T> {
|
|
String name;
|
|
|
|
String description;
|
|
|
|
Argument({required this.name, this.description = ""});
|
|
|
|
T getValue() {
|
|
throw new UnimplementedError("This argument type has no value");
|
|
}
|
|
|
|
Argument<T> clone() {
|
|
Argument<T> arg;
|
|
switch (getType()) {
|
|
case ArgumentType.BOOL:
|
|
{
|
|
arg = new BoolArgument(name: name) as Argument<T>;
|
|
break;
|
|
}
|
|
case ArgumentType.STRING:
|
|
{
|
|
arg = new StringArgument(name: name, value: getValue() as String)
|
|
as Argument<T>;
|
|
break;
|
|
}
|
|
case ArgumentType.INTEGER:
|
|
{
|
|
arg = new IntegerArgument(name: name, value: getValue() as int)
|
|
as Argument<T>;
|
|
break;
|
|
}
|
|
case ArgumentType.DOUBLE:
|
|
{
|
|
arg = new DoubleArgument(name: name, value: getValue() as double)
|
|
as Argument<T>;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return arg;
|
|
}
|
|
|
|
ArgumentType getType();
|
|
|
|
bool hasValue();
|
|
}
|
|
|
|
enum ArgumentType { STRING, BOOL, INTEGER, DOUBLE }
|
|
|
|
class Arguments {
|
|
Map<String, Argument> args = {};
|
|
|
|
void setArg(Argument arg) {
|
|
args[arg.name] = arg;
|
|
}
|
|
|
|
int get count => args.length;
|
|
|
|
List<String> getArgNames() {
|
|
List<String> argsx = [];
|
|
for (MapEntry<String, Argument> entry in args.entries) {
|
|
argsx.add(entry.key);
|
|
}
|
|
|
|
return argsx;
|
|
}
|
|
|
|
/// Removes the argument if present. Otherwise does nothing.
|
|
///
|
|
/// Returns true if the argument was present and removed. False otherwise.
|
|
bool removeArg(String name) {
|
|
if (args.containsKey(name)) {
|
|
args.remove(name);
|
|
return true;
|
|
} else
|
|
return false;
|
|
}
|
|
|
|
Argument? getArg(String name) {
|
|
if (hasArg(name))
|
|
return args[name];
|
|
else
|
|
return null;
|
|
}
|
|
|
|
bool hasArg(String name) {
|
|
return args.containsKey(name);
|
|
}
|
|
|
|
bool argHasValue(String name) {
|
|
if (hasArg(name)) {
|
|
Argument arg = getArg(name)!;
|
|
return arg.hasValue();
|
|
} else
|
|
throw new Exception("Warning: No such argument");
|
|
}
|
|
|
|
Arguments clone() {
|
|
Arguments argsx = Arguments();
|
|
for (MapEntry<String, Argument> entry in args.entries) {
|
|
argsx.setArg(entry.value.clone());
|
|
}
|
|
|
|
return argsx;
|
|
}
|
|
|
|
List<Argument> getArgumentsList() {
|
|
List<Argument> argsx = [];
|
|
for (var entry in args.entries) {
|
|
argsx.add(entry.value);
|
|
}
|
|
|
|
return argsx;
|
|
}
|
|
}
|