cepgen is hosted by Hepforge, IPPP Durham
CepGen 1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
Piper.h
Go to the documentation of this file.
1/*
2 * CepGen: a central exclusive processes event generator
3 * Copyright (C) 2022 Laurent Forthomme
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef CepGen_Utils_Piper_h
20#define CepGen_Utils_Piper_h
21
22#include <memory>
23#include <string>
24#include <vector>
25
26namespace cepgen {
27 namespace utils {
29 class Piper {
30 public:
33 explicit Piper(const std::string& command) : file_(popen(command.c_str(), "w"), pclose) {}
34
36 struct Commands : std::vector<std::string> {
37 using std::vector<std::string>::vector;
39 Commands& operator+=(const std::vector<std::string>& oth) {
40 std::copy(oth.begin(), oth.end(), std::back_inserter(*this));
41 return *this;
42 }
44 Commands& operator+=(const std::string& str) {
45 emplace_back(str);
46 return *this;
47 }
49 friend std::ostream& operator<<(std::ostream& os, const Commands& cmds) {
50 std::string sep;
51 os << "{";
52 for (const auto& cmd : cmds)
53 os << sep << cmd, sep = "\n";
54 return os << "}";
55 }
56 };
58 const Piper& execute(const Commands& cmds) const {
59 for (const auto& cmd : cmds)
60 fputs((cmd + "\n").c_str(), file_.get());
61 return *this;
62 }
63
64 private:
65 std::unique_ptr<FILE, decltype(&pclose)> file_;
66 };
67 } // namespace utils
68} // namespace cepgen
69
70#endif
External command piping utility.
Definition Piper.h:29
const Piper & execute(const Commands &cmds) const
Execute a chain of commands.
Definition Piper.h:58
Piper(const std::string &command)
Start a piped command.
Definition Piper.h:33
Common namespace for this Monte Carlo generator.
A collection of commands to pipe to the session.
Definition Piper.h:36
Commands & operator+=(const std::string &str)
Append a command at the end of the commands block.
Definition Piper.h:44
Commands & operator+=(const std::vector< std::string > &oth)
Append a set of commands to the end of the commands block.
Definition Piper.h:39
friend std::ostream & operator<<(std::ostream &os, const Commands &cmds)
Commands printout utility.
Definition Piper.h:49