summaryrefslogtreecommitdiff
path: root/src/support/command-line.h
diff options
context:
space:
mode:
authorJF Bastien <github@jfbastien.com>2016-01-04 10:46:28 -0800
committerJF Bastien <github@jfbastien.com>2016-01-04 10:46:28 -0800
commit7e6e3c78074101931bca83d9f7383fde55d6f380 (patch)
treecf80fffefea4d192e57f759a7ab37063ed431808 /src/support/command-line.h
parent2410eccb2a4bc7bbda87b299a6cd6fc434c77c01 (diff)
parentec87a4d54110965a2145349c697764a06db6bf21 (diff)
downloadbinaryen-7e6e3c78074101931bca83d9f7383fde55d6f380.tar.gz
binaryen-7e6e3c78074101931bca83d9f7383fde55d6f380.tar.bz2
binaryen-7e6e3c78074101931bca83d9f7383fde55d6f380.zip
Merge pull request #58 from WebAssembly/command-line
Generalize command-line parsing more.
Diffstat (limited to 'src/support/command-line.h')
-rw-r--r--src/support/command-line.h50
1 files changed, 40 insertions, 10 deletions
diff --git a/src/support/command-line.h b/src/support/command-line.h
index f57929b6b..14dbce57f 100644
--- a/src/support/command-line.h
+++ b/src/support/command-line.h
@@ -21,22 +21,52 @@
#ifndef wasm_support_command_line_h
#define wasm_support_command_line_h
+#include <functional>
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+
#include "wasm.h"
+
namespace wasm {
-struct Options {
- // standard options
+class Options {
+ public:
+ typedef std::function<void(Options *, const std::string &)> Action;
+ enum class Arguments { Zero, One, N };
+
bool debug;
- std::string infile;
- std::string outfile;
- // extra options
- std::map<std::string, const char *> extra;
- Options() : debug(false) {}
-};
+ std::map<std::string, std::string> extra;
-void processCommandLine(int argc, const char *argv[], Options *options,
- const char *help);
+ Options(const std::string &command, const std::string &description);
+ ~Options();
+ Options &add(const std::string &longName, const std::string &shortName,
+ const std::string &description, Arguments arguments,
+ const Action &action);
+ Options &add_positional(const std::string &name, Arguments arguments,
+ const Action &action);
+ void parse(int argc, const char *argv[]);
+
+ private:
+ Options() = delete;
+ Options(const Options &) = delete;
+ Options &operator=(const Options &) = delete;
+
+ struct Option {
+ std::string longName;
+ std::string shortName;
+ std::string description;
+ Arguments arguments;
+ Action action;
+ size_t seen;
+ };
+ std::vector<Option> options;
+ Arguments positional;
+ std::string positionalName;
+ Action positionalAction;
+};
} // namespace wasm