/** * @file ProgramWithArguments.cpp * * @date Aug 27, 2014 * @author Hubert Degaudenzi * * @copyright 2012-2020 Euclid Science Ground Segment * * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General * Public License as published by the Free Software Foundation; either version 3.0 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #include // for basic_ostream, operator<<, endl, cout #include // for map #include // for basic_string, char_traits, allocator, string, operator<<, operator< #include // for make_pair, pair #include // for vector #include // for value, options_description_easy_init, typed_value, variable_value #include "ElementsKernel/Main.h" // for MAIN_FOR #include "ElementsKernel/Program.h" // for Program #include "ElementsKernel/Unused.h" // for ELEMENTS_UNUSED using std::map; using std::string; using std::vector; using boost::program_options::value; namespace Elements::Examples { /** * @class ProgramWithArguments * @brief * Example of an Elements program * @details * This class is an example of a program based on the ElementsProgram class. It can be copied/pasted * conveniently to write a new program. */ class ProgramWithArguments final : public Program { public: /** * @brief * The "main" method. * @details * This method is the entry point to the program. In this sense, it is similar to a main * (and it is why it is called mainMethod()). The code below provides only example stuff * which should be replaced by real code in any program. * * See the ElementsProgram documentation for more details. * */ ExitCode mainMethod(ELEMENTS_UNUSED map& args) override { // Get logger and log the entry into the mainMethod const auto log = Logging::getLogger(); log.info("This Works"); using std::cout; using std::endl; cout << "This Works too!" << endl; if (args.count("input-files") > 0) { const auto files = args["input-files"].as>(); for (const string& file : files) { cout << "Input file " << file << endl; } } return ExitCode::OK; } std::pair defineProgramArguments() override { OptionsDescription desc{}; auto add = desc.add_options(); add("input-files", value>(), "Input files"); PositionalOptionsDescription pos_desc; pos_desc.add("input-files", -1); return std::make_pair(desc, pos_desc); } }; } // namespace Elements::Examples MAIN_FOR(Elements::Examples::ProgramWithArguments)