From 002a7b20fd7a847dde00ffcd15b505e7d75aed9a Mon Sep 17 00:00:00 2001 From: Mario Dominguez Date: Thu, 5 Dec 2024 08:45:00 +0100 Subject: [PATCH] Refs #22427: SystemCommandBuilder class Signed-off-by: Mario Dominguez --- src/cpp/utils/SystemCommandBuilder.hpp | 75 ++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/cpp/utils/SystemCommandBuilder.hpp diff --git a/src/cpp/utils/SystemCommandBuilder.hpp b/src/cpp/utils/SystemCommandBuilder.hpp new file mode 100644 index 00000000000..24c6d27884d --- /dev/null +++ b/src/cpp/utils/SystemCommandBuilder.hpp @@ -0,0 +1,75 @@ +// Copyright 2024 Proyectos y Sistemas de Mantenimiento SL (eProsima). +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef UTILS__SYSTEMCOMMANDBUILDER_HPP_ +#define UTILS__SYSTEMCOMMANDBUILDER_HPP_ + +#include +#include + +namespace eprosima { + +namespace fastdds { + +/** + * @brief Class to build and execute system commands. + */ +class SystemCommandBuilder +{ +public: + + SystemCommandBuilder() = default; + + SystemCommandBuilder& executable( + const std::string& executable) + { + command_ << executable; + return *this; + } + + SystemCommandBuilder& verb( + const std::string& verb) + { + command_ << " " << verb; + return *this; + } + + SystemCommandBuilder& arg( + const std::string& arg) + { + command_ << " " << arg; + return *this; + } + + SystemCommandBuilder& value( + const std::string& value) + { + command_ << " " << value; + return *this; + } + + int build_and_call() + { + return std::system(command_.str().c_str()); + } + +private: + + std::stringstream command_; +}; + +} // namespace fastdds +} // namespace eprosima + +#endif // UTILS__SYSTEMCOMMANDBUILDER_HPP_