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
26
namespace
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
cepgen::utils::Piper
External command piping utility.
Definition
Piper.h:29
cepgen::utils::Piper::execute
const Piper & execute(const Commands &cmds) const
Execute a chain of commands.
Definition
Piper.h:58
cepgen::utils::Piper::Piper
Piper(const std::string &command)
Start a piped command.
Definition
Piper.h:33
cepgen
Common namespace for this Monte Carlo generator.
Definition
CommandLineHandler.cpp:36
cepgen::utils::Piper::Commands
A collection of commands to pipe to the session.
Definition
Piper.h:36
cepgen::utils::Piper::Commands::operator+=
Commands & operator+=(const std::string &str)
Append a command at the end of the commands block.
Definition
Piper.h:44
cepgen::utils::Piper::Commands::operator+=
Commands & operator+=(const std::vector< std::string > &oth)
Append a set of commands to the end of the commands block.
Definition
Piper.h:39
cepgen::utils::Piper::Commands::operator<<
friend std::ostream & operator<<(std::ostream &os, const Commands &cmds)
Commands printout utility.
Definition
Piper.h:49
CepGen
Utils
Piper.h
Generated on Mon Jul 29 2024 for CepGen by
1.9.7