Fill in gpio-util functionality

Process the command line arguments to know which GPIO
to set and what to set it to. Then create the GPIO
object and call the appropriate functions on it.

Change-Id: Ib8da78e5ae92e5ae0716901aa71243226668be10
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/gpio-util/argument.hpp b/gpio-util/argument.hpp
new file mode 100644
index 0000000..a6cccc7
--- /dev/null
+++ b/gpio-util/argument.hpp
@@ -0,0 +1,64 @@
+#pragma once
+
+#include <getopt.h>
+#include <map>
+#include <string>
+
+namespace phosphor
+{
+namespace gpio
+{
+/** @brief Class - Encapsulates parsing command line options and
+ *                 populating arguments
+ */
+class ArgumentParser
+{
+    public:
+        ArgumentParser() = delete;
+        ~ArgumentParser() = default;
+        ArgumentParser(const ArgumentParser&) = delete;
+        ArgumentParser& operator=(const ArgumentParser&) = delete;
+        ArgumentParser(ArgumentParser&&) = default;
+        ArgumentParser& operator=(ArgumentParser&&) = default;
+
+        /** @brief Contructs Argument object
+         *
+         *  @param argc - the main function's argc passed as is
+         *  @param argv - the main function's argv passed as is
+         *  @return Object constructed
+         */
+        ArgumentParser(int argc, char** argv);
+
+        /** @brief Given an option, returns its argument(optarg)
+         *
+         *  @param opt - command line option string
+         *
+         *  @return argument which is a standard optarg
+         */
+        const std::string& operator[](const std::string& opt);
+
+        /** @brief Displays usage
+         *
+         *  @param argv - the main function's argv passed as is
+         */
+        static void usage(char** argv);
+
+        /** @brief Set to 'true' when an option is passed */
+        static const std::string trueString;
+
+        /** @brief Set to '' when an option is not passed */
+        static const std::string emptyString;
+
+    private:
+        /** @brief Option to argument mapping */
+        std::map<const std::string, std::string> arguments;
+
+        /** @brief Array of struct options as needed by getopt_long */
+        static const option options[];
+
+        /** @brief optstring as needed by getopt_long */
+        static const char* optionStr;
+};
+
+} // namespace gpio
+} // namespace phosphor