The Gaudi Framework  master (37c0b60a)
MakeAndConsume.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2024 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #include <Gaudi/Accumulators.h>
19 #include <GaudiKernel/AlgTool.h>
20 #include <GaudiKernel/IAlgTool.h>
21 #include <GaudiKernel/IBinder.h>
24 #include <cmath>
25 #include <numeric>
26 #include <optional>
27 
28 namespace Gaudi::TestSuite {
29 
30  struct IMyTool : extend_interfaces<IAlgTool> {
32  virtual void operator()() const = 0;
33  };
34 
35  struct MyExampleTool : extends<AlgTool, IMyTool> {
36  using extends::extends;
37  void operator()() const override { always() << m_message.value() << endmsg; }
38  Gaudi::Property<std::string> m_message{ this, "Message", "Boring Default Message" };
39  };
40  DECLARE_COMPONENT( MyExampleTool )
41 
42  struct MyConsumerTool final : Gaudi::Functional::ToolBinder<Gaudi::Interface::Bind::Box<IMyTool>( const int& )> {
44  : ToolBinder{ std::move( type ), std::move( name ), parent, KeyValue{ "MyInt", "/Event/MyInt" },
45  construct<BoundInstance>( this ) } {}
46 
47  class BoundInstance final : public Gaudi::Interface::Bind::Stub<IMyTool> {
49  int i;
50 
51  public:
52  BoundInstance( MyConsumerTool const* parent, const int& i ) : parent{ parent }, i{ i } {}
53  void operator()() const override {
54  parent->always() << "BoundInstance - got: " << i << " from " << parent->inputLocation<int>() << endmsg;
55  }
56  };
57  };
58  DECLARE_COMPONENT( MyConsumerTool )
59 
60  using BaseClass_t = Gaudi::Functional::Traits::BaseClass_t<Gaudi::Algorithm>;
61 
62  struct ToolConsumer final : Gaudi::Functional::Consumer<void( IMyTool const& ), BaseClass_t> {
64  : Consumer( name, svcLoc, KeyValue{ "MyTool", "MyExampleTool" } ) {}
65 
66  void operator()( IMyTool const& tool ) const override { tool(); }
67  };
68  DECLARE_COMPONENT( ToolConsumer )
69 
70  struct CountingConsumer final : Gaudi::Functional::Consumer<void(), BaseClass_t> {
72  mutable Gaudi::Accumulators::MsgCounter<MSG::ERROR> m_err{ this, "This is not an error...", 3 };
73  mutable Gaudi::Accumulators::MsgCounter<MSG::WARNING> m_warn{ this, "This is not a warning...", 2 };
74  mutable Gaudi::Accumulators::MsgCounter<MSG::INFO> m_info{ this, "This is not info...", 1 };
75 
76  void operator()() const override {
77  always() << "CountingConsumer: incrementing \"This is not an error\" twice" << endmsg;
78  ++m_err;
79  m_err += true;
80  m_err += false; // should do nothing...
81  always() << "CountingConsumer: incrementing \"This is not a warning\" twice" << endmsg;
82  ++m_warn;
83  m_warn += true;
84  m_warn += false; // should do nothing...
85  always() << "CountingConsumer: incrementing \"This is not info\" twice" << endmsg;
86  ++m_info;
87  m_info += true;
88  m_info += false; // should do nothing...
89  }
90  };
91  DECLARE_COMPONENT( CountingConsumer )
92 
93  struct IntDataProducer final : Gaudi::Functional::Producer<int(), BaseClass_t> {
94 
96  : Producer( name, svcLoc, KeyValue( "OutputLocation", "/Event/MyInt" ) ) {}
97 
98  int operator()() const override {
99  info() << "executing IntDataProducer, storing " << m_value.value() << " into " << outputLocation() << endmsg;
100  return m_value;
101  }
102 
103  Gaudi::Property<int> m_value{ this, "Value", 7, "The integer value to produce." };
104  };
105 
106  DECLARE_COMPONENT( IntDataProducer )
107 
108  struct VectorDataProducer final : Gaudi::Functional::Producer<std::vector<int>(), BaseClass_t> {
109 
110  Gaudi::Property<std::vector<int>> m_data{ this, "Data", { 3, 3, 3, 3 } };
111 
113  : Producer( name, svcLoc, KeyValue( "OutputLocation", "/Event/MyVector" ) ) {}
114 
115  std::vector<int> operator()() const override {
116  info() << "executing VectorDataProducer, storing " << m_data.value() << " into " << outputLocation() << endmsg;
117  return m_data;
118  }
119  };
120 
121  DECLARE_COMPONENT( VectorDataProducer )
122 
124  struct KeyedDataProducer final : Gaudi::Functional::Producer<int_container(), BaseClass_t> {
125 
127  : Producer( name, svcLoc, KeyValue( "OutputLocation", "/Event/MyKeyed" ) ) {}
128 
129  int_container operator()() const override {
130  int_container container;
131  auto a = new KeyedObject<int>{ 4 };
132  container.add( a );
133  auto b = new KeyedObject<int>{ 5 };
134  container.add( b );
135  info() << "executing KeyedDataProducer, storing [4,5] into " << outputLocation() << endmsg;
136  return container;
137  }
138  };
139 
140  DECLARE_COMPONENT( KeyedDataProducer )
141 
142  struct IntDataConsumer final : Gaudi::Functional::Consumer<void( const int& ), BaseClass_t> {
143 
145  : Consumer( name, svcLoc, KeyValue( "InputLocation", "/Event/MyInt" ) ) {}
146 
147  void operator()( const int& input ) const override {
148  info() << "executing IntDataConsumer, consuming " << input << " from " << inputLocation() << endmsg;
149  }
150  };
151 
152  DECLARE_COMPONENT( IntDataConsumer )
153 
154  struct IntToFloatData final : Gaudi::Functional::Transformer<float( const int& ), BaseClass_t> {
155 
157  : Transformer( name, svcLoc, KeyValue( "InputLocation", "/Event/MyInt" ),
158  KeyValue( "OutputLocation", "/Event/MyFloat" ) ) {}
159 
160  float operator()( const int& input ) const override {
161  info() << "Converting: " << input << " from " << inputLocation() << " and storing it into " << outputLocation()
162  << endmsg;
163  return input;
164  }
165  };
166 
167  DECLARE_COMPONENT( IntToFloatData )
168 
169  struct IntFloatToFloatData final : Gaudi::Functional::Transformer<float( const int&, const float& ), BaseClass_t> {
170 
172  : Transformer( name, svcLoc,
173  { KeyValue( "InputLocation", "/Event/MyInt" ), KeyValue{ "OtherInput", "/Event/MyOtherFloat" } },
174  KeyValue( "OutputLocation", "/Event/OtherFloat" ) ) {}
175 
176  float operator()( const int& in1, const float& in2 ) const override {
177  info() << "Converting: " << in1 << " from " << inputLocation<int>() << " and " << in2 << " from "
178  << inputLocation<float>() << " and storing it into " << outputLocation() << endmsg;
179  return in1 + in2;
180  }
181  };
182 
183  DECLARE_COMPONENT( IntFloatToFloatData )
184 
186  : Gaudi::Functional::MultiTransformer<std::tuple<float, float>( const int&, const int& ), BaseClass_t> {
188  : MultiTransformer( name, svcLoc,
189  { KeyValue( "InputLocation1", { "/Event/MyInt" } ),
190  KeyValue( "InputLocation2", { "/Event/MyOtherInt" } ) },
191  { KeyValue( "OutputLocation1", { "/Event/MyMultiFloat1" } ),
192  KeyValue( "OutputLocation2", { "/Event/MyMultiFloat2" } ) } ) {}
193 
194  std::tuple<float, float> operator()( const int& input1, const int& input2 ) const override {
195  info() << "Number of inputs : " << inputLocationSize() << ", number of outputs : " << outputLocationSize()
196  << endmsg;
197  info() << "Converting " << input1 << " from " << inputLocation<0>() << " and " << input2 << " from "
198  << inputLocation<1>() << endmsg;
199  info() << "Storing results into " << outputLocation<0>() << " and " << outputLocation<1>() << endmsg;
200  return std::tuple<float, float>{ input1, input2 };
201  }
202  };
203 
204  DECLARE_COMPONENT( IntIntToFloatFloatData )
205 
206 
209  : public Gaudi::Functional::MergingTransformer<
210  std::vector<int>( const Gaudi::Functional::vector_of_const_<std::vector<int>>& ), BaseClass_t> {
211 
213  : MergingTransformer( name, svcLoc, { "InputLocations", {} },
214  { "OutputLocation", "/Event/MyConcatenatedIntVector" } ) {}
215 
217  operator()( const Gaudi::Functional::vector_of_const_<std::vector<int>>& intVectors ) const override {
218  // Create a vector and pre-allocate enough space for the number of integers we have
219  auto nelements = std::accumulate( intVectors.begin(), intVectors.end(), 0,
220  []( const auto a, const auto b ) { return a + b.size(); } );
222  out.reserve( nelements );
223  // Concatenate the input vectors to form the output
224  for ( const auto& intVector : intVectors ) {
225  info() << "Concatening vector " << intVector << endmsg;
226  out.insert( out.end(), intVector.begin(), intVector.end() );
227  }
228  info() << "Storing output vector " << out << " to " << outputLocation() << endmsg;
229  return out;
230  }
231  };
232 
233  DECLARE_COMPONENT( IntVectorsToIntVector )
234 
235  struct FloatDataConsumer final : Gaudi::Functional::Consumer<void( const float& ), BaseClass_t> {
236 
238  : Consumer( name, svcLoc, KeyValue( "InputLocation", "/Event/MyFloat" ) ) {}
239 
240  void operator()( const float& input ) const override {
241  info() << "executing FloatDataConsumer: " << input << endmsg;
242  }
243  };
244 
245  DECLARE_COMPONENT( FloatDataConsumer )
246 
247  struct ContextConsumer final : Gaudi::Functional::Consumer<void( const EventContext& ), BaseClass_t> {
248 
250 
251  void operator()( const EventContext& ctx ) const override {
252  info() << "executing ContextConsumer, got " << ctx << endmsg;
253  }
254  };
255 
256  DECLARE_COMPONENT( ContextConsumer )
257 
258  struct ContextTransformer final : Gaudi::Functional::Transformer<int( const EventContext& ), BaseClass_t> {
259 
261  : Transformer( name, svcLoc, KeyValue{ "OutputLoc", "/Event/SomeOtherInt" } ) {}
262 
263  int operator()( const EventContext& ctx ) const override {
264  info() << "executing ContextConsumer, got " << ctx << endmsg;
265  return 9;
266  }
267  };
268 
269  DECLARE_COMPONENT( ContextTransformer )
270 
271  struct ContextIntConsumer final : Gaudi::Functional::Consumer<void( const EventContext&, const int& ), BaseClass_t> {
272 
274  : Consumer( name, svcLoc, KeyValue( "InputLocation", "/Event/MyInt" ) ) {}
275 
276  void operator()( const EventContext& ctx, const int& i ) const override {
277  info() << "executing ContextIntConsumer, got context = " << ctx << ", int = " << i << endmsg;
278  }
279  };
280 
281  DECLARE_COMPONENT( ContextIntConsumer )
282 
283  struct VectorDoubleProducer final : Gaudi::Functional::Producer<std::vector<double>(), BaseClass_t> {
284 
286  : Producer( name, svcLoc, KeyValue( "OutputLocation", "/Event/MyVectorOfDoubles" ) ) {}
287 
288  std::vector<double> operator()() const override {
289  info() << "storing vector<double> into " << outputLocation() << endmsg;
290  return { 12.34, 56.78, 90.12, 34.56, 78.90 };
291  }
292  };
293 
294  DECLARE_COMPONENT( VectorDoubleProducer )
295 
296  struct FrExpTransformer final
297  : Gaudi::Functional::MultiScalarTransformer<
298  FrExpTransformer, std::tuple<std::vector<double>, std::vector<int>>( const std::vector<double>& ),
299  BaseClass_t> {
301  : MultiScalarTransformer( name, svcLoc, KeyValue{ "InputDoubles", { "/Event/MyVectorOfDoubles" } },
302  { KeyValue{ "OutputFractions", { "/Event/MyVectorOfFractions" } },
303  KeyValue{ "OutputIntegers", { "/Event/MyVectorOfIntegers" } } } ) {}
304 
305  using MultiScalarTransformer::operator();
306 
307  std::tuple<double, int> operator()( const double& d ) const {
308  int i;
309  double frac = std::frexp( d, &i );
310  info() << "Converting " << d << " -> " << frac << ", " << i << endmsg;
311  return { frac, i };
312  }
313  };
314  DECLARE_COMPONENT( FrExpTransformer )
315 
316  struct OptFrExpTransformer final
317  : Gaudi::Functional::MultiScalarTransformer<
318  OptFrExpTransformer, std::tuple<std::vector<double>, std::vector<int>>( const std::vector<double>& ),
319  BaseClass_t> {
321  : MultiScalarTransformer( name, svcLoc, KeyValue{ "InputDoubles", { "/Event/MyVectorOfDoubles" } },
322  { KeyValue{ "OutputFractions", { "/Event/OptMyVectorOfFractions" } },
323  KeyValue{ "OutputIntegers", { "/Event/OptMyVectorOfIntegers" } } } ) {}
324 
325  using MultiScalarTransformer::operator();
326 
327  std::optional<std::tuple<double, int>> operator()( const double& d ) const {
328  if ( d < 30. ) {
329  info() << "Skipping " << d << endmsg;
330  return {};
331  }
332  int i;
333  double frac = std::frexp( d, &i );
334  info() << "Converting " << d << " -> " << frac << ", " << i << endmsg;
335  return std::make_tuple( frac, i );
336  }
337  };
338  DECLARE_COMPONENT( OptFrExpTransformer )
339 
340  struct LdExpTransformer final
341  : Gaudi::Functional::ScalarTransformer<
342  LdExpTransformer, std::vector<double>( const std::vector<double>&, const std::vector<int>& ), BaseClass_t> {
344  : ScalarTransformer( name, svcLoc,
345  { KeyValue{ "InputFractions", { "/Event/MyVectorOfFractions" } },
346  KeyValue{ "InputIntegers", { "/Event/MyVectorOfIntegers" } } },
347  { KeyValue{ "OutputDoubles", { "/Event/MyNewVectorOfDoubles" } } } ) {}
348 
349  using ScalarTransformer::operator();
350 
351  double operator()( double frac, int i ) const {
352  double d = std::ldexp( frac, i );
353  info() << "Converting " << i << ", " << frac << " -> " << d << endmsg;
354  return d;
355  }
356  };
357  DECLARE_COMPONENT( LdExpTransformer )
358 
359  struct OptLdExpTransformer final
360  : Gaudi::Functional::ScalarTransformer<OptLdExpTransformer,
361  std::vector<double>( const std::vector<double>&, const std::vector<int>& ),
362  BaseClass_t> {
364  : ScalarTransformer( name, svcLoc,
365  { KeyValue{ "InputFractions", { "/Event/MyVectorOfFractions" } },
366  KeyValue{ "InputIntegers", { "/Event/MyVectorOfIntegers" } } },
367  { KeyValue{ "OutputDoubles", { "/Event/MyOptVectorOfDoubles" } } } ) {}
368 
369  using ScalarTransformer::operator();
370 
371  std::optional<double> operator()( const double& frac, const int& i ) const {
372  double d = std::ldexp( frac, i );
373  if ( i > 6 ) {
374  info() << "Skipping " << d << endmsg;
375  return {};
376  }
377  info() << "Converting " << i << ", " << frac << " -> " << d << endmsg;
378  return d;
379  }
380  };
381  DECLARE_COMPONENT( OptLdExpTransformer )
382 
383  struct VoidConsumer final : Gaudi::Functional::Consumer<void(), BaseClass_t> {
384 
385  using Consumer::Consumer;
386 
387  void operator()() const override { info() << "executing VoidConsumer" << endmsg; }
388  };
389 
390  DECLARE_COMPONENT( VoidConsumer )
391 
392  struct S : public KeyedObject<int> {
394  int a;
398  };
399 
400  struct SDataProducer final : Gaudi::Functional::Producer<S::Container(), BaseClass_t> {
401 
403  : Producer( name, svcLoc, KeyValue( "OutputLocation", "/Event/MyS" ) ) {}
404 
405  S::Container operator()() const override {
406  S::Container out{};
407  for ( int i = 0; i < j; ++i ) out.insert( new S{} );
408  info() << "storing KeyedContainer of size " << out.size() << " into " << outputLocation() << endmsg;
409  return out;
410  }
411  Gaudi::Property<int> j{ this, "j", 5 };
412  };
413 
414  DECLARE_COMPONENT( SDataProducer )
415 
416  struct SRangesToIntVector final
417  : public Gaudi::Functional::MergingTransformer<
418  std::vector<int>( const Gaudi::Functional::vector_of_const_<Gaudi::Range_<std::vector<S const*>>>& ),
419  BaseClass_t> {
420 
422  : MergingTransformer( name, svcLoc, { "InputRanges", {} },
423  { "OutputLocation", "/Event/MyConcatenatedIntFromSVector" } ) {}
424 
426  const Gaudi::Functional::vector_of_const_<Gaudi::Range_<std::vector<S const*>>>& SVectors ) const override {
428  // Concatenate the input vectors to form the output
429  for ( const auto& SVector : SVectors ) {
430  info() << "Concatening range of size " << SVector.size() << endmsg;
431  for ( auto* s : SVector ) { out.push_back( s->a ); }
432  }
433  info() << "Storing output vector " << out << " to " << outputLocation() << endmsg;
434  return out;
435  }
436  };
437  DECLARE_COMPONENT( SRangesToIntVector )
438 
440  : public Gaudi::Functional::MergingTransformer<void( const Gaudi::Functional::vector_of_const_<
441  std::optional<Gaudi::NamedRange_<std::vector<S const*>>>>& ),
442  BaseClass_t> {
443 
445  : MergingTransformer( name, svcLoc, { "InputRanges", {} } ) {}
446 
447  void
449  OptSVectors ) const override {
450  // Loop over the optional ranges checking if the opt has a value
451  for ( const auto& OptSVector : OptSVectors ) {
452  if ( OptSVector.has_value() ) {
453  auto SVector = OptSVector.value();
454  info() << "Consuming vector of size: " << SVector.size() << endmsg;
455  } else {
456  info() << "Skipping empty optional range" << endmsg;
457  }
458  }
459  }
460  };
461  DECLARE_COMPONENT( OptionalSRangesMerger )
462 
463  struct IntVectorsMerger final
464  : public Gaudi::Functional::MergingTransformer<
465  void( const Gaudi::Functional::vector_of_const_<std::vector<int>>& ), BaseClass_t> {
466 
468  : MergingTransformer( name, svcLoc, { "InputLocations", {} } ) {}
469 
470  void operator()( const Gaudi::Functional::vector_of_const_<std::vector<int>>& intVectors ) const override {
471  // Create a vector and pre-allocate enough space for the number of integers we have
472  auto nelements = std::accumulate( intVectors.begin(), intVectors.end(), 0,
473  []( const auto a, const auto b ) { return a + b.size(); } );
474  info() << "sum of input sizes: " << nelements << endmsg;
475  // Concatenate the input vectors to form the output
476  for ( const auto& intVector : intVectors ) { info() << "Consuming vector " << intVector << endmsg; }
477  }
478  };
479 
480  DECLARE_COMPONENT( IntVectorsMerger )
481 
483  : public Gaudi::Functional::MergingConsumer<void( Gaudi::Functional::vector_of_const_<std::vector<int>> const& ),
484  BaseClass_t> {
485  using Base =
487  BaseClass_t>;
488 
490  : Base( name, svcLoc, { "InputLocations", {} } ) {}
491 
492  void operator()( Gaudi::Functional::vector_of_const_<std::vector<int>> const& intVectors ) const override {
493  // Create a vector and pre-allocate enough space for the number of integers we have
494  auto nelements = std::accumulate( intVectors.begin(), intVectors.end(), 0,
495  []( const auto a, const auto b ) { return a + b.size(); } );
496  info() << "sum of input sizes: " << nelements << endmsg;
497  // Concatenate the input vectors to form the output
498  for ( const auto& intVector : intVectors ) { info() << "Consuming vector " << intVector << endmsg; }
499  }
500  };
501 
502  DECLARE_COMPONENT( IntVectorsMergingConsumer )
503 
504  struct MyData {
506  };
508 
509  struct RangeProducer : Gaudi::Functional::Producer<MyDataRange()> {
510 
511  RangeProducer( const std::string& name, ISvcLocator* pSvcLocator )
512  : Producer( name, pSvcLocator, KeyValue{ "TrackLocation", "" } ){};
513 
514  MyDataRange operator()() const override { return {}; }
515  };
516  DECLARE_COMPONENT( RangeProducer )
517 
518 
520  struct TwoDMerger final : public Gaudi::Functional::MergingMultiTransformer<
521  std::tuple<std::vector<int>, std::vector<double>>(
522  const Gaudi::Functional::vector_of_const_<std::vector<int>>&,
523  const Gaudi::Functional::vector_of_const_<std::vector<double>>& ),
524  BaseClass_t> {
525 
527  : MergingMultiTransformer{ name,
528  svcLoc,
529  { KeyValues{ "InputInts", {} }, KeyValues{ "InputDoubles", {} } },
530  { KeyValue{ "OutputInts", "/Event/MySummedInts" },
531  KeyValue{ "OutputDoubles", "/Event/MySummedDoubles" } } } {}
532 
535  const Gaudi::Functional::vector_of_const_<std::vector<double>>& doubleVectors ) const override {
537  auto& [is, ds] = r;
538  std::transform( begin( intVectors ), end( intVectors ), std::back_inserter( is ),
539  []( const std::vector<int>& vi ) { return std::accumulate( begin( vi ), end( vi ), 0 ); } );
540  always() << " accumulated: " << is << endmsg;
541  std::transform( begin( doubleVectors ), end( doubleVectors ), std::back_inserter( ds ),
542  []( const std::vector<double>& vd ) { return std::accumulate( begin( vd ), end( vd ), 0. ); } );
543  always() << " accumulated: " << ds << endmsg;
544  return r;
545  }
546  };
547 
548  DECLARE_COMPONENT( TwoDMerger )
549 
550  struct Foo {
551  int i;
552 
553  Foo( int i ) : i{ i } {}
554  Foo( Foo&& ) = delete;
555  Foo& operator=( Foo&& ) = delete;
556  Foo( const Foo& ) = delete;
557  Foo& operator=( const Foo& ) = delete;
558  ~Foo(){};
559  };
560 
561  struct ShrdPtrProducer final : Gaudi::Functional::Producer<std::shared_ptr<Foo>(), BaseClass_t> {
562 
564  : Producer( name, svcLoc, KeyValue( "OutputLocation", "/Event/MySharedFoo" ) ) {}
565 
566  std::shared_ptr<Foo> operator()() const override {
567  auto foo = std::make_shared<Foo>( m_value.value() );
568  info() << "executing ShrdPtrProducer, storing shared_ptr<Foo> with payload at " << foo.get() << " and value "
569  << foo->i << " into " << outputLocation() << endmsg;
570  return foo;
571  }
572 
573  Gaudi::Property<int> m_value{ this, "Value", 7, "The integer value to produce." };
574  };
575 
576  DECLARE_COMPONENT( ShrdPtrProducer )
577 
578  struct ShrdPtrConsumer final : Gaudi::Functional::Consumer<void( std::shared_ptr<Foo> const& ), BaseClass_t> {
579 
581  : Consumer( name, svcLoc, KeyValue( "InputLocation", "/Event/MySharedFoo" ) ) {}
582 
583  void operator()( const std::shared_ptr<Foo>& foo ) const override {
584  info() << "executing ShrdPtrConsumer, got shared_ptr<Foo> with payload at " << foo.get() << " with value "
585  << foo->i << " from " << inputLocation() << endmsg;
586  }
587  };
588 
589  DECLARE_COMPONENT( ShrdPtrConsumer )
590 
591 
594  struct IntVectorsToInts final
595  : public Gaudi::Functional::SplittingMergingTransformer<
596  std::vector<int>( const Gaudi::Functional::vector_of_const_<std::vector<int>>& ), BaseClass_t> {
597 
598  Gaudi::Property<std::vector<std::pair<int, int>>> m_mapping{ this, "Mapping", {} };
599 
601  : SplittingMergingTransformer( name, svcLoc, { "InputLocations", {} }, { "OutputLocations", {} } ) {}
602 
604  operator()( const Gaudi::Functional::vector_of_const_<std::vector<int>>& intVectors ) const override {
605  int l = 0;
606  for ( const auto& iv : intVectors ) { info() << "loaded " << iv << " from " << inputLocation( l++ ) << endmsg; }
607  std::vector<int> out( outputLocationSize(), 0 );
608  for ( const auto& [l, r] : m_mapping.value() ) {
609  out[l] = std::accumulate( intVectors.at( r ).begin(), intVectors.at( r ).end(), out[l] );
610  }
611  l = 0;
612  for ( const auto& o : out ) { info() << "storing " << o << " in " << outputLocation( l++ ) << endmsg; }
613  return out;
614  }
615  };
616  DECLARE_COMPONENT( IntVectorsToInts )
617 
618  struct Eventually {
619  Gaudi::Algorithm const* parent = nullptr;
620  void ( *action )( Gaudi::Algorithm const* ) = nullptr;
621  Eventually( Gaudi::Algorithm const* p, void ( *a )( Gaudi::Algorithm const* ) ) : parent{ p }, action{ a } {}
622  Eventually( Eventually const& ) = delete;
623  Eventually& operator=( Eventually const& ) = delete;
625  : parent{ std::exchange( other.parent, nullptr ) }, action{ std::exchange( other.action, nullptr ) } {}
627  parent = std::exchange( other.parent, nullptr );
628  action = std::exchange( other.action, nullptr );
629  return *this;
630  }
632  if ( action ) action( parent );
633  }
634  };
635 
636  struct OpaqueProducer final
638  Eventually(),
639  Gaudi::Functional::Traits::use_<BaseClass_t, Gaudi::Functional::Traits::WriteOpaqueFor<Eventually>>> {
640 
642  : Producer( name, svcLoc, KeyValue( "OutputLocation", "/Event/Eventually" ) ) {}
643 
644  Eventually operator()() const override {
645  always() << "creating Eventually" << endmsg;
646  return Eventually{ this, []( Gaudi::Algorithm const* me ) {
647  me->always() << "My Eventually is about to be destroyed" << endmsg;
648  } };
649  }
650  };
651 
652  DECLARE_COMPONENT( OpaqueProducer )
653 
654 } // namespace Gaudi::TestSuite
655 
656 #ifndef TestSuite
657 // include ourself replacing "TestSuite" with "Examples"
658 # define TestSuite Examples
660 #endif
MakeAndConsume.cpp
Gaudi::TestSuite::RangeProducer::RangeProducer
RangeProducer(const std::string &name, ISvcLocator *pSvcLocator)
Definition: MakeAndConsume.cpp:511
Gaudi::TestSuite::LdExpTransformer::LdExpTransformer
LdExpTransformer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:343
Gaudi::TestSuite::IntVectorsMergingConsumer::IntVectorsMergingConsumer
IntVectorsMergingConsumer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:489
Gaudi::TestSuite::OpaqueProducer::OpaqueProducer
OpaqueProducer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:641
std::make_tuple
T make_tuple(T... args)
Gaudi::Functional::MergingTransformer
details::MergingTransformer< Signature, Traits_, details::isLegacy< Traits_ > > MergingTransformer
Definition: MergingTransformer.h:234
Gaudi::TestSuite::Eventually::~Eventually
~Eventually()
Definition: MakeAndConsume.cpp:631
Gaudi::Functional::Consumer
details::Consumer< Signature, Traits_, details::isLegacy< Traits_ > > Consumer
Definition: Consumer.h:69
Gaudi::TestSuite::IntVectorsToInts::operator()
std::vector< int > operator()(const Gaudi::Functional::vector_of_const_< std::vector< int >> &intVectors) const override
Definition: MakeAndConsume.cpp:604
Gaudi::TestSuite::VectorDataProducer::operator()
std::vector< int > operator()() const override
Definition: MakeAndConsume.cpp:115
std::string
STL class.
Gaudi::TestSuite::ContextTransformer::ContextTransformer
ContextTransformer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:260
std::shared_ptr
STL class.
Gaudi::TestSuite::CountingConsumer
Definition: MakeAndConsume.cpp:70
Gaudi::TestSuite::TwoDMerger::TwoDMerger
TwoDMerger(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:526
Gaudi::TestSuite::IMyTool::DeclareInterfaceID
DeclareInterfaceID(IMyTool, 1, 0)
Gaudi::TestSuite::KeyedDataProducer::KeyedDataProducer
KeyedDataProducer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:126
Gaudi::NamedRange_
Definition: NamedRange.h:52
std::move
T move(T... args)
Gaudi::TestSuite::VectorDoubleProducer::VectorDoubleProducer
VectorDoubleProducer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:285
Gaudi::TestSuite::IntToFloatData::IntToFloatData
IntToFloatData(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:156
Gaudi::TestSuite::IMyTool
Definition: MakeAndConsume.cpp:30
Gaudi::TestSuite::SRangesToIntVector::operator()
std::vector< int > operator()(const Gaudi::Functional::vector_of_const_< Gaudi::Range_< std::vector< S const * >>> &SVectors) const override
Definition: MakeAndConsume.cpp:425
Gaudi::TestSuite::IntDataProducer::IntDataProducer
IntDataProducer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:95
KeyedObject::KeyedObject
KeyedObject()=default
Standard Constructor. The object key is preset to the invalid value.
Gaudi::TestSuite::TwoDMerger::operator()
std::tuple< std::vector< int >, std::vector< double > > operator()(const Gaudi::Functional::vector_of_const_< std::vector< int >> &intVectors, const Gaudi::Functional::vector_of_const_< std::vector< double >> &doubleVectors) const override
Definition: MakeAndConsume.cpp:534
Gaudi::TestSuite::MyConsumerTool
Definition: MakeAndConsume.cpp:42
Gaudi::TestSuite::ShrdPtrConsumer::operator()
void operator()(const std::shared_ptr< Foo > &foo) const override
Definition: MakeAndConsume.cpp:583
Gaudi::TestSuite::IntVectorsMergingConsumer::operator()
void operator()(Gaudi::Functional::vector_of_const_< std::vector< int >> const &intVectors) const override
Definition: MakeAndConsume.cpp:492
gaudirun.s
string s
Definition: gaudirun.py:346
std::vector< int >
Gaudi::TestSuite::LdExpTransformer::operator()
double operator()(double frac, int i) const
Definition: MakeAndConsume.cpp:351
Gaudi::TestSuite::ShrdPtrConsumer
Definition: MakeAndConsume.cpp:578
Gaudi::TestSuite::IntVectorsToInts
transform a vector of vector of int to a vector of int, where the output vector of in is scattered in...
Definition: MakeAndConsume.cpp:596
ISvcLocator
Definition: ISvcLocator.h:46
std::back_inserter
T back_inserter(T... args)
Gaudi::TestSuite::MyConsumerTool::BoundInstance::operator()
void operator()() const override
Definition: MakeAndConsume.cpp:53
Gaudi::TestSuite::Eventually::Eventually
Eventually(Eventually const &)=delete
Gaudi::TestSuite::SDataProducer::j
Gaudi::Property< int > j
Definition: MakeAndConsume.cpp:411
Gaudi::TestSuite::FloatDataConsumer::FloatDataConsumer
FloatDataConsumer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:237
Gaudi::TestSuite::Foo::operator=
Foo & operator=(const Foo &)=delete
Gaudi::TestSuite::OptFrExpTransformer::operator()
std::optional< std::tuple< double, int > > operator()(const double &d) const
Definition: MakeAndConsume.cpp:327
Gaudi::TestSuite::ShrdPtrConsumer::ShrdPtrConsumer
ShrdPtrConsumer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:580
Gaudi::TestSuite::OptFrExpTransformer::OptFrExpTransformer
OptFrExpTransformer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:320
Gaudi::TestSuite::ContextConsumer
Definition: MakeAndConsume.cpp:247
Gaudi::TestSuite::VoidConsumer
Definition: MakeAndConsume.cpp:383
std::shared_ptr::get
T get(T... args)
Gaudi::TestSuite::OpaqueProducer::operator()
Eventually operator()() const override
Definition: MakeAndConsume.cpp:644
std::tuple
Containers
Containers namespace.
Definition: KeyedObjectManager.h:28
Gaudi::TestSuite::FrExpTransformer::FrExpTransformer
FrExpTransformer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:300
Gaudi::TestSuite::VoidConsumer::operator()
void operator()() const override
Definition: MakeAndConsume.cpp:387
Gaudi::Functional::details::vector_of_const_
Definition: details.h:296
Gaudi::TestSuite::MyConsumerTool::BoundInstance::i
int i
Definition: MakeAndConsume.cpp:49
extend_interfaces
Base class to be used to extend an interface.
Definition: extend_interfaces.h:15
KeyedContainer.h
Gaudi::TestSuite::Eventually::Eventually
Eventually(Gaudi::Algorithm const *p, void(*a)(Gaudi::Algorithm const *))
Definition: MakeAndConsume.cpp:621
Gaudi::Functional::MergingConsumer
details::MergingTransformer< Signature, Traits_, details::isLegacy< Traits_ > > MergingConsumer
Definition: MergingTransformer.h:239
Gaudi::TestSuite::MyConsumerTool::BoundInstance
Definition: MakeAndConsume.cpp:47
Gaudi::TestSuite::OptionalSRangesMerger::operator()
void operator()(const Gaudi::Functional::vector_of_const_< std::optional< Gaudi::NamedRange_< std::vector< S const * >>>> &OptSVectors) const override
Definition: MakeAndConsume.cpp:448
Gaudi::TestSuite::MyData
Definition: MakeAndConsume.cpp:504
Gaudi::Functional::details::Consumer
Definition: Consumer.h:24
Gaudi::Functional::ToolBinder
details::ToolBinder< Signature, Traits_ > ToolBinder
Definition: ToolBinder.h:83
Gaudi::TestSuite::FrExpTransformer::operator()
std::tuple< double, int > operator()(const double &d) const
Definition: MakeAndConsume.cpp:307
Gaudi::TestSuite::SDataProducer
Definition: MakeAndConsume.cpp:400
Gaudi::TestSuite::ShrdPtrProducer
Definition: MakeAndConsume.cpp:561
Gaudi::TestSuite::IntDataProducer
Definition: MakeAndConsume.cpp:93
std::frexp
T frexp(T... args)
ToolBinder.h
KeyedContainer::add
long add(ContainedObject *pObject) override
ObjectContainerBase overload: Add an object to the container.
Definition: KeyedContainer.h:594
Gaudi::TestSuite::VectorDataProducer::VectorDataProducer
VectorDataProducer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:112
Gaudi::TestSuite::IntIntToFloatFloatData::IntIntToFloatFloatData
IntIntToFloatFloatData(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:187
ScalarTransformer.h
Gaudi::TestSuite::IMyTool::operator()
virtual void operator()() const =0
bug_34121.tool
tool
Definition: bug_34121.py:18
Gaudi::Utils::begin
AttribStringParser::Iterator begin(const AttribStringParser &parser)
Definition: AttribStringParser.h:136
Gaudi::TestSuite::S::a
int a
Definition: MakeAndConsume.cpp:394
Gaudi::TestSuite::OpaqueProducer
Definition: MakeAndConsume.cpp:639
Gaudi::TestSuite::IntDataConsumer::operator()
void operator()(const int &input) const override
Definition: MakeAndConsume.cpp:147
GaudiPython.Pythonizations.ctx
ctx
Definition: Pythonizations.py:578
Gaudi::TestSuite::Foo
Definition: MakeAndConsume.cpp:550
Gaudi::Functional::details::MergingTransformer
Definition: MergingTransformer.h:48
Gaudi::TestSuite::OptionalSRangesMerger::OptionalSRangesMerger
OptionalSRangesMerger(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:444
Consumer.h
Gaudi::TestSuite::Eventually
Definition: MakeAndConsume.cpp:618
Gaudi::TestSuite::ToolConsumer
Definition: MakeAndConsume.cpp:62
Gaudi::TestSuite::OptLdExpTransformer::OptLdExpTransformer
OptLdExpTransformer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:363
Gaudi::Functional::Producer
details::Producer< Signature, Traits_, details::isLegacy< Traits_ > > Producer
Definition: Producer.h:37
Gaudi::TestSuite::OptFrExpTransformer
Definition: MakeAndConsume.cpp:319
Gaudi::TestSuite::Eventually::Eventually
Eventually(Eventually &&other)
Definition: MakeAndConsume.cpp:624
Gaudi::TestSuite::FrExpTransformer
Definition: MakeAndConsume.cpp:299
IAlgTool.h
Gaudi::Algorithm
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:90
Producer.h
Gaudi::TestSuite::IntVectorsToIntVector
Concatenates a list of input vectors into a single output vector.
Definition: MakeAndConsume.cpp:210
Gaudi::TestSuite::Eventually::operator=
Eventually & operator=(Eventually &&other)
Definition: MakeAndConsume.cpp:626
Gaudi::TestSuite::ContextTransformer::operator()
int operator()(const EventContext &ctx) const override
Definition: MakeAndConsume.cpp:263
Gaudi::Property::value
const ValueType & value() const
Definition: Property.h:237
Gaudi::TestSuite::FloatDataConsumer::operator()
void operator()(const float &input) const override
Definition: MakeAndConsume.cpp:240
Gaudi::TestSuite::IntVectorsMerger::IntVectorsMerger
IntVectorsMerger(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:467
Gaudi::TestSuite::IntFloatToFloatData::operator()
float operator()(const int &in1, const float &in2) const override
Definition: MakeAndConsume.cpp:176
Gaudi::TestSuite::IntDataProducer::operator()
int operator()() const override
Definition: MakeAndConsume.cpp:98
Gaudi::TestSuite::IntVectorsToInts::IntVectorsToInts
IntVectorsToInts(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:600
Gaudi::TestSuite::IntVectorsToIntVector::operator()
std::vector< int > operator()(const Gaudi::Functional::vector_of_const_< std::vector< int >> &intVectors) const override
Definition: MakeAndConsume.cpp:217
SharedObjectsContainer
Definition: SharedObjectsContainer.h:39
Gaudi::TestSuite::IntFloatToFloatData::IntFloatToFloatData
IntFloatToFloatData(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:171
Gaudi::TestSuite::ShrdPtrProducer::operator()
std::shared_ptr< Foo > operator()() const override
Definition: MakeAndConsume.cpp:566
Gaudi::TestSuite::OptLdExpTransformer::operator()
std::optional< double > operator()(const double &frac, const int &i) const
Definition: MakeAndConsume.cpp:371
KeyedContainer
template class KeyedContainer, KeyedContainer.h
Definition: KeyedContainer.h:74
std::accumulate
T accumulate(T... args)
Gaudi::TestSuite::Foo::i
int i
Definition: MakeAndConsume.cpp:551
Transformer.h
Gaudi::Functional::details::Producer
Definition: Producer.h:22
KeyedObject
Definition of the templated KeyedObject class.
Definition: KeyedObject.h:39
Gaudi::TestSuite::IntToFloatData
Definition: MakeAndConsume.cpp:154
Gaudi::TestSuite
Definition: ConditionAccessorHolder.h:21
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
Gaudi::Accumulators::MsgCounter< MSG::ERROR >
Gaudi::TestSuite::KeyedDataProducer
Definition: MakeAndConsume.cpp:124
Gaudi::TestSuite::SRangesToIntVector
Definition: MakeAndConsume.cpp:419
extends
Base class used to extend a class implementing other interfaces.
Definition: extends.h:20
std::transform
T transform(T... args)
Gaudi::Interface::Bind::Stub
Definition: IBinder.h:95
Gaudi::TestSuite::ToolConsumer::operator()
void operator()(IMyTool const &tool) const override
Definition: MakeAndConsume.cpp:66
Gaudi
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition: __init__.py:1
Gaudi::TestSuite::FloatDataConsumer
Definition: MakeAndConsume.cpp:235
SharedObjectsContainer.h
Gaudi::TestSuite::MyConsumerTool::BoundInstance::BoundInstance
BoundInstance(MyConsumerTool const *parent, const int &i)
Definition: MakeAndConsume.cpp:52
Gaudi::TestSuite::ContextTransformer
Definition: MakeAndConsume.cpp:258
IBinder.h
Gaudi::TestSuite::Foo::Foo
Foo(int i)
Definition: MakeAndConsume.cpp:553
Gaudi::TestSuite::IntDataConsumer::IntDataConsumer
IntDataConsumer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:144
Gaudi::TestSuite::IntVectorsMerger
Definition: MakeAndConsume.cpp:465
Gaudi ::Functional::MultiTransformer
details::MultiTransformer< Signature, Traits_, details::isLegacy< Traits_ > > MultiTransformer
Definition: Transformer.h:240
Gaudi::TestSuite::OptionalSRangesMerger
Definition: MakeAndConsume.cpp:442
Gaudi::TestSuite::ShrdPtrProducer::m_value
Gaudi::Property< int > m_value
Definition: MakeAndConsume.cpp:573
Gaudi::TestSuite::IntIntToFloatFloatData::operator()
std::tuple< float, float > operator()(const int &input1, const int &input2) const override
Definition: MakeAndConsume.cpp:194
Gaudi::Range_
Definition: Range.h:94
Gaudi::TestSuite::Foo::operator=
Foo & operator=(Foo &&)=delete
Containers::vector
struct GAUDI_API vector
Parametrisation class for vector-like implementation.
Definition: KeyedObjectManager.h:39
Gaudi::TestSuite::MyConsumerTool::BoundInstance::parent
MyConsumerTool const * parent
Definition: MakeAndConsume.cpp:48
Gaudi::TestSuite::IntFloatToFloatData
Definition: MakeAndConsume.cpp:169
Accumulators.h
gaudirun.type
type
Definition: gaudirun.py:160
Gaudi::TestSuite::LdExpTransformer
Definition: MakeAndConsume.cpp:342
Gaudi::TestSuite::IntToFloatData::operator()
float operator()(const int &input) const override
Definition: MakeAndConsume.cpp:160
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
gaudirun.l
dictionary l
Definition: gaudirun.py:583
Gaudi::TestSuite::MyExampleTool::m_message
Gaudi::Property< std::string > m_message
Definition: MakeAndConsume.cpp:38
Gaudi::TestSuite::S
Definition: MakeAndConsume.cpp:392
MergingTransformer.h
std
STL namespace.
DECLARE_COMPONENT
#define DECLARE_COMPONENT(type)
Definition: PluginServiceV1.h:46
Gaudi::Functional::SplittingMergingTransformer
details::SplittingMergingTransformer< Signature, Traits_, false > SplittingMergingTransformer
Definition: SplittingMergingTransformer.h:125
Gaudi::TestSuite::SDataProducer::operator()
S::Container operator()() const override
Definition: MakeAndConsume.cpp:405
IInterface
Definition: IInterface.h:239
Gaudi::TestSuite::SRangesToIntVector::SRangesToIntVector
SRangesToIntVector(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:421
EventContext
Definition: EventContext.h:34
Gaudi::Functional::Traits::BaseClass_t
Definition: utilities.h:38
Gaudi::TestSuite::IntVectorsMerger::operator()
void operator()(const Gaudi::Functional::vector_of_const_< std::vector< int >> &intVectors) const override
Definition: MakeAndConsume.cpp:470
Gaudi::TestSuite::IntVectorsToIntVector::IntVectorsToIntVector
IntVectorsToIntVector(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:212
Gaudi::TestSuite::VectorDoubleProducer::operator()
std::vector< double > operator()() const override
Definition: MakeAndConsume.cpp:288
Gaudi::TestSuite::OptLdExpTransformer
Definition: MakeAndConsume.cpp:362
Gaudi ::Functional::Transformer
details::Transformer< Signature, Traits_, details::isLegacy< Traits_ > > Transformer
Definition: Transformer.h:237
Gaudi::TestSuite::IntVectorsMergingConsumer
Definition: MakeAndConsume.cpp:484
Gaudi::TestSuite::ShrdPtrProducer::ShrdPtrProducer
ShrdPtrProducer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:563
AlgTool.h
SplittingMergingTransformer.h
Gaudi::TestSuite::KeyedDataProducer::operator()
int_container operator()() const override
Definition: MakeAndConsume.cpp:129
Gaudi::TestSuite::Foo::Foo
Foo(const Foo &)=delete
gaudirun.action
action
Definition: gaudirun.py:153
IOTest.end
end
Definition: IOTest.py:125
Gaudi::TestSuite::RangeProducer::operator()
MyDataRange operator()() const override
Definition: MakeAndConsume.cpp:514
Gaudi::TestSuite::MyExampleTool::operator()
void operator()() const override
Definition: MakeAndConsume.cpp:37
Gaudi::TestSuite::MyConsumerTool::MyConsumerTool
MyConsumerTool(std::string type, std::string name, const IInterface *parent)
Definition: MakeAndConsume.cpp:43
std::ldexp
T ldexp(T... args)
Gaudi::TestSuite::Foo::Foo
Foo(Foo &&)=delete
Gaudi::TestSuite::SDataProducer::SDataProducer
SDataProducer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:402
Gaudi::TestSuite::Foo::~Foo
~Foo()
Definition: MakeAndConsume.cpp:558
Containers::HashMap
KeyedObjectManager< hashmap > HashMap
Forward declaration of specialized std::hashmap-like object manager.
Definition: KeyedObjectManager.h:107
Gaudi::TestSuite::ToolConsumer::ToolConsumer
ToolConsumer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:63
Gaudi::TestSuite::ContextConsumer::operator()
void operator()(const EventContext &ctx) const override
Definition: MakeAndConsume.cpp:251
Gaudi::TestSuite::RangeProducer
Definition: MakeAndConsume.cpp:509
Gaudi::TestSuite::VectorDoubleProducer
Definition: MakeAndConsume.cpp:283
Gaudi::TestSuite::ContextIntConsumer::ContextIntConsumer
ContextIntConsumer(const std::string &name, ISvcLocator *svcLoc)
Definition: MakeAndConsume.cpp:273
Gaudi::TestSuite::ContextIntConsumer
Definition: MakeAndConsume.cpp:271
Gaudi::TestSuite::IntIntToFloatFloatData
Definition: MakeAndConsume.cpp:186
Gaudi::TestSuite::CountingConsumer::operator()
void operator()() const override
Definition: MakeAndConsume.cpp:76
Gaudi::Property< std::string >
Gaudi::TestSuite::ContextIntConsumer::operator()
void operator()(const EventContext &ctx, const int &i) const override
Definition: MakeAndConsume.cpp:276
Gaudi::TestSuite::MyExampleTool
Definition: MakeAndConsume.cpp:35
Gaudi::TestSuite::VectorDataProducer
Definition: MakeAndConsume.cpp:108
Gaudi::TestSuite::Eventually::operator=
Eventually & operator=(Eventually const &)=delete
Gaudi::TestSuite::TwoDMerger
Concatenates a list of input vectors into a single output vector.
Definition: MakeAndConsume.cpp:524
Gaudi::TestSuite::IntDataConsumer
Definition: MakeAndConsume.cpp:142
PrepareBase.out
out
Definition: PrepareBase.py:20