diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2025-01-25 12:57:24 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2025-01-25 12:57:24 +0100 |
commit | 5d268488b2861ce73db233d71bdb527f89001a4e (patch) | |
tree | dd7ebe2a9a4f9e66d7e8d869a13187211aa93a84 /src | |
parent | 6628a2d8b18030dd3ebc714f65e7af90bd0b711a (diff) |
Add PointerList class for working with, and propagating, argc/argvpointerlist
Diffstat (limited to 'src')
-rw-r--r-- | src/pointerlist.cc | 28 | ||||
-rw-r--r-- | src/pointerlist.h | 26 |
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; +}; |