Provide more complex example and describe more usage.
authorRafał Długołęcki <rafal@dlugolecki.net.pl>
Wed, 20 May 2015 22:32:25 +0000 (00:32 +0200)
committerRafał Długołęcki <rafal@dlugolecki.net.pl>
Wed, 20 May 2015 22:32:25 +0000 (00:32 +0200)
README
README.md

diff --git a/README b/README
index b7121a20c33e0573c0eb3ae193b5892344af8db6..cb2c84fe1fa129c03a1e2e1ec894623a3658bf39 100644 (file)
--- a/README
+++ b/README
@@ -54,6 +54,99 @@ Now program can be compiled & run using following commands:
     $ ./a.out -h
     Help information
 
+### Possible classes to use:
+
+Arguments are non-named program parameters. They must have some description and
+function handling when argument is passed:
+
+    new Argument<bool>("Bool argument", [](bool value) { });
+
+Options are named program parameters. Option need name (e.g.: "i"), description,
+and function.
+
+    new Option<int>("name", "Integer option", [](int value) { });
+
+Options could also be set as containing no value. In that case they become just
+a simple switches (some kind of mix between Argument and Option). They are used
+just to invoke some function if specific name was passed:
+
+    new Option<void>("v", "Verbose mode of program", [](void) { });
+
+### Behaviours
+
+Parameters (Options and Arguments) can also be wrapped in Behaviours.
+
+Required behaviour - if specific parameter was not passed and is required,
+exception is thrown (missingRequiredParameter):
+
+    new Required(
+        new Argument<bool>("Bool argument", [](bool value) { })
+    );
+
+MultiValue behaviour - given parameter can handle more than one value. Values are
+separated by given separator. For each value passed function is invoked:
+
+    new MultiValue(",",
+        new Option<std::string>("input", "Input file", [](std::string value) { })
+    )
+
+More complex example:
+    (...)
+    void argument_function(bool a) {
+        std::cout << "Argument: " << a << std::endl;
+    }
+
+    void option_function(std::string a) {
+        std::cout << "Option function " << a << std::endl;
+    }
+
+    void void_function(void) {
+        std::cout << "Void function " << std::endl;
+    }
+
+    Command command(argc, argv, {
+        new Required(
+            new MultiValue("-",
+                new Argument<bool>("Input values", argument_function)
+            )
+        ),
+        new MultiValue(",",
+            new Option<std::string>("f", "Optional file", option_function)
+        )
+        new Option<void>("h", "Help", void_function)
+    });
+    (...)
+
+Above code allows us to:
+
+Parameters wrapped in Required class, have validator which checks if argument 
+    $ ./a.out
+    *Input values* is required
+
+    $ ./a.out 1
+    Argument: 1
+
+    $ ./a.out 0
+    Argument: 0
+
+    $ ./command 0 f
+    Option: f requires value to be specified after equal sign, but no equal sign was found
+
+    $ ./command 0 f=
+    Option: f failed value conversion to the required type
+
+For MultiValue Parameters each value is passed to the given function:
+    $ ./a.out 1-0-1
+    Argument: 1
+    Argument: 0
+    Argument: 1
+
+    $ ./command 0 f=one,two,three
+    Argument: 0
+    Option function one
+    Option function two
+    Option function three
+
 ## Documentation
 
 Current documentation can be found at:
index b7121a20c33e0573c0eb3ae193b5892344af8db6..cb2c84fe1fa129c03a1e2e1ec894623a3658bf39 100644 (file)
--- a/README.md
+++ b/README.md
@@ -54,6 +54,99 @@ Now program can be compiled & run using following commands:
     $ ./a.out -h
     Help information
 
+### Possible classes to use:
+
+Arguments are non-named program parameters. They must have some description and
+function handling when argument is passed:
+
+    new Argument<bool>("Bool argument", [](bool value) { });
+
+Options are named program parameters. Option need name (e.g.: "i"), description,
+and function.
+
+    new Option<int>("name", "Integer option", [](int value) { });
+
+Options could also be set as containing no value. In that case they become just
+a simple switches (some kind of mix between Argument and Option). They are used
+just to invoke some function if specific name was passed:
+
+    new Option<void>("v", "Verbose mode of program", [](void) { });
+
+### Behaviours
+
+Parameters (Options and Arguments) can also be wrapped in Behaviours.
+
+Required behaviour - if specific parameter was not passed and is required,
+exception is thrown (missingRequiredParameter):
+
+    new Required(
+        new Argument<bool>("Bool argument", [](bool value) { })
+    );
+
+MultiValue behaviour - given parameter can handle more than one value. Values are
+separated by given separator. For each value passed function is invoked:
+
+    new MultiValue(",",
+        new Option<std::string>("input", "Input file", [](std::string value) { })
+    )
+
+More complex example:
+    (...)
+    void argument_function(bool a) {
+        std::cout << "Argument: " << a << std::endl;
+    }
+
+    void option_function(std::string a) {
+        std::cout << "Option function " << a << std::endl;
+    }
+
+    void void_function(void) {
+        std::cout << "Void function " << std::endl;
+    }
+
+    Command command(argc, argv, {
+        new Required(
+            new MultiValue("-",
+                new Argument<bool>("Input values", argument_function)
+            )
+        ),
+        new MultiValue(",",
+            new Option<std::string>("f", "Optional file", option_function)
+        )
+        new Option<void>("h", "Help", void_function)
+    });
+    (...)
+
+Above code allows us to:
+
+Parameters wrapped in Required class, have validator which checks if argument 
+    $ ./a.out
+    *Input values* is required
+
+    $ ./a.out 1
+    Argument: 1
+
+    $ ./a.out 0
+    Argument: 0
+
+    $ ./command 0 f
+    Option: f requires value to be specified after equal sign, but no equal sign was found
+
+    $ ./command 0 f=
+    Option: f failed value conversion to the required type
+
+For MultiValue Parameters each value is passed to the given function:
+    $ ./a.out 1-0-1
+    Argument: 1
+    Argument: 0
+    Argument: 1
+
+    $ ./command 0 f=one,two,three
+    Argument: 0
+    Option function one
+    Option function two
+    Option function three
+
 ## Documentation
 
 Current documentation can be found at: