summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pointerlist.cc28
-rw-r--r--src/pointerlist.h26
2 files changed, 54 insertions, 0 deletions
diff --git a/src/pointerlist.cc b/src/pointerlist.cc
new file mode 100644
index 0000000..e642075
--- /dev/null
+++ b/src/pointerlist.cc
@@ -0,0 +1,28 @@
+// -*- c++ -*-
+// Distributed under the BSD 2-Clause License.
+// See accompanying file LICENSE for details.
+#include "pointerlist.h"
+
+PointerList::PointerList(int argc, const char* argv[])
+{
+ for(int i = 0; i < argc; ++i)
+ {
+ push_back(argv[i]);
+ }
+}
+
+std::pair<int, const char**> PointerList::get()
+{
+ argptrs.clear();
+ for(const auto& arg : *this)
+ {
+ argptrs.push_back(arg.data());
+ }
+
+ if(argptrs.size() == 0)
+ {
+ return {0, nullptr};
+ }
+
+ return {argptrs.size(), argptrs.data()};
+}
diff --git a/src/pointerlist.h b/src/pointerlist.h
new file mode 100644
index 0000000..7c51ca6
--- /dev/null
+++ b/src/pointerlist.h
@@ -0,0 +1,26 @@
+// -*- c++ -*-
+// Distributed under the BSD 2-Clause License.
+// See accompanying file LICENSE for details.
+
+#include <string>
+#include <vector>
+#include <deque>
+#include <utility>
+
+// Maintains an (owning) list of string args and converts them to argc/argv
+// compatible arguments on request.
+// The returned pointers are guaranteed to be valid as long as the PointerList
+// object lifetime is not exceeded.
+class PointerList :
+ public std::deque<std::string>
+{
+public:
+ PointerList() = default;
+ PointerList(int argc, const char* argv[]);
+
+ //! Returns argc/argv pair from the current list of args
+ std::pair<int, const char**> get();
+
+private:
+ std::vector<const char*> argptrs;
+};