Geant4-11
G4MulticoutDestination.hh
Go to the documentation of this file.
1// ********************************************************************
2// * License and Disclaimer *
3// * *
4// * The Geant4 software is copyright of the Copyright Holders of *
5// * the Geant4 Collaboration. It is provided under the terms and *
6// * conditions of the Geant4 Software License, included in the file *
7// * LICENSE and available at http://cern.ch/geant4/license . These *
8// * include a list of copyright holders. *
9// * *
10// * Neither the authors of this software system, nor their employing *
11// * institutes,nor the agencies providing financial support for this *
12// * work make any representation or warranty, express or implied, *
13// * regarding this software system or assume any liability for its *
14// * use. Please see the license in the file LICENSE and URL above *
15// * for the full disclaimer and the limitation of liability. *
16// * *
17// * This code implementation is the result of the scientific and *
18// * technical work of the GEANT4 collaboration. *
19// * By using, copying, modifying or distributing the software (or *
20// * any work based on the software) you agree to acknowledge its *
21// * use in resulting scientific publications, and indicate your *
22// * acceptance of all terms of the Geant4 Software license. *
23// ********************************************************************
24//
25// G4MulticoutDestination
26//
27// Class description:
28//
29// Extends G4coutDestination and allows multiple G4coutDestination objects
30// to be chained in the same job.
31// Note that formatters can be attached to this destination that will apply
32// them before passing over the message to the child destination.
33//
34// Usage:
35// User should create and set-up G4coutDestination objects the usual way
36// these should then be added to an instance of this container class
37// this class should then be added to the streaming. E.g.
38// class MyCout1 : public G4coutDestination {};
39// class MyCout2 : public G4coutDestination {};
40// auto multi = new G4MulticoutDestination();
41// multi->push_back( G4coutDestinationUPtr( new MyCout1 ) );
42// multi->push_back( G4coutDestinationUPtr( new MyCout2 ) );
43// G4coutbuf.SetDestination( multi ); // or G4cerrbuf
44
45// ---------------- G4MulticoutDestination ----------------
46//
47// Author: A.Dotti (SLAC), April 2017
48// --------------------------------------------------------------------
49#ifndef G4MULTICOUTDESTINATION_HH
50#define G4MULTICOUTDESTINATION_HH
51
52#include <memory>
53#include <vector>
54
55#include "G4coutDestination.hh"
56
57using G4coutDestinationUPtr = std::unique_ptr<G4coutDestination>;
58using G4coutDestinationVector = std::vector<G4coutDestinationUPtr>;
59
61 : public G4coutDestination
63{
64 public:
67
68 // Forward call to contained destination. Note that the message may have
69 // been modified by formatters attached to this
70 virtual G4int ReceiveG4cout(const G4String& msg) override
71 {
72 G4bool result = true;
73 std::for_each(begin(), end(), [&](G4coutDestinationUPtr& e) {
74 result &= (e->ReceiveG4cout_(msg) == 0);
75 });
76 return (result ? 0 : -1);
77 }
78
79 virtual G4int ReceiveG4cerr(const G4String& msg) override
80 {
81 G4bool result = true;
82 std::for_each(begin(), end(), [&](G4coutDestinationUPtr& e) {
83 result &= (e->ReceiveG4cerr_(msg) == 0);
84 });
85 return (result ? 0 : -1);
86 }
87};
88
89#endif
std::unique_ptr< G4coutDestination > G4coutDestinationUPtr
std::vector< G4coutDestinationUPtr > G4coutDestinationVector
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
virtual G4int ReceiveG4cout(const G4String &msg) override
G4MulticoutDestination()=default
virtual G4int ReceiveG4cerr(const G4String &msg) override