26 #ifndef __XRD_CL_OPERATIONS_HH__ 27 #define __XRD_CL_OPERATIONS_HH__ 138 std::promise<XRootDStatus>
prms;
154 template<
bool HasHndl>
182 if( !op.valid )
throw std::invalid_argument(
"Cannot construct " 183 "Operation from an invalid Operation!" );
227 void Run( std::promise<XRootDStatus> prms,
230 static_assert(HasHndl,
"Only an operation that has a handler can be assigned to workflow");
231 handler->Assign( std::move( prms ), std::move(
final ) );
375 if( !
bool(
operation ) )
throw std::logic_error(
"Invalid pipeline." );
412 throw std::logic_error(
"Pipeline is already running" );
415 std::promise<XRootDStatus> prms;
416 ftr = prms.get_future();
417 operation->Run( std::move( prms ), std::move(
final ) );
428 std::future<XRootDStatus>
ftr;
442 return std::move( pipeline.
ftr );
455 return Async( std::move( pipeline ) ).get();
466 template<
template<
bool>
class Derived,
bool HasHndl,
typename HdlrFactory,
typename ... Args>
469 template<
template<
bool>
class, bool,
typename,
typename ...>
481 static_assert( !HasHndl,
"It is only possible to construct operation without handler" );
507 template<
typename Hdlr>
515 return this->
StreamImpl( HdlrFactory::Create( hdlr ), own );
575 Derived<HasHndl> *me =
static_cast<Derived<HasHndl>*
>( this );
576 return new Derived<HasHndl>( std::move( *me ) );
587 Derived<HasHndl> *me =
static_cast<Derived<HasHndl>*
>( this );
588 return new Derived<true>( std::move( *me ) );
599 Derived<HasHndl> *me =
static_cast<Derived<HasHndl>*
>( this );
600 return Derived<to>( std::move( *me ) );
612 static_assert( !HasHndl,
"Operator >> is available only for operation without handler" );
614 return Transform<true>();
629 me.AddOperation( op.
Move() );
630 return me.template Transform<true>();
646 return me.template Transform<true>();
662 me.AddOperation( op.
Move() );
663 return me.template Transform<true>();
680 return me.template Transform<true>();
690 #endif // __XRD_CL_OPERATIONS_HH__ std::unique_ptr< Operation< true > > operation
First operation in the pipeline.
Definition: XrdClOperations.hh:423
Definition: XrdClAnyObject.hh:32
Operation(Operation< from > &&op)
Move constructor between template instances.
Definition: XrdClOperations.hh:179
bool valid
Flag indicating if it is a valid object.
Definition: XrdClOperations.hh:285
std::future< XRootDStatus > ftr
The future result of the pipeline.
Definition: XrdClOperations.hh:428
ConcreteOperation(ConcreteOperation< Derived, from, HdlrFactory, Args... > &&op)
Definition: XrdClOperations.hh:492
Pipeline(Operation< false > &&op)
Constructor.
Definition: XrdClOperations.hh:347
Definition: XrdClOperationHandlers.hh:40
static Derived< true > PipeImpl(ConcreteOperation< Derived, false, HdlrFactory, Args... > &me, Operation< true > &op)
Definition: XrdClOperations.hh:658
Derived< true > operator|(Operation< true > &&op)
Definition: XrdClOperations.hh:537
Pipeline & operator=(Pipeline &&pipe)
Constructor.
Definition: XrdClOperations.hh:362
Derived< true > operator|(Operation< true > &op)
Definition: XrdClOperations.hh:525
Derived< true > operator>>(Hdlr &&hdlr)
Definition: XrdClOperations.hh:508
Derived< true > StreamImpl(ResponseHandler *handler, bool own)
Definition: XrdClOperations.hh:610
void HandleResponseImpl(XRootDStatus *status, AnyObject *response, HostList *hostList=nullptr)
Callback function implementation;.
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:119
void dealloc(XRootDStatus *status, AnyObject *response, HostList *hostList)
Definition: XrdClOperations.hh:112
ConcreteOperation(Args &&... args)
Definition: XrdClOperations.hh:479
void AddOperation(Operation< true > *op)
Definition: XrdClOperations.hh:269
static Derived< true > PipeImpl(ConcreteOperation< Derived, true, HdlrFactory, Args... > &me, Operation< false > &op)
Definition: XrdClOperations.hh:642
ResponseHandler * responseHandler
The handler of our operation.
Definition: XrdClOperations.hh:123
bool ownHandler
true, if we own the handler
Definition: XrdClOperations.hh:128
~PipelineHandler()
Destructor.
Derived< true > operator|(Operation< false > &op)
Definition: XrdClOperations.hh:549
virtual ~Operation()
Destructor.
Definition: XrdClOperations.hh:190
void Assign(std::promise< XRootDStatus > prms, std::function< void(const XRootDStatus &)> final)
Pipeline(Operation< true > &&op)
Constructor.
Definition: XrdClOperations.hh:323
std::vector< HostInfo > HostList
Definition: XrdClXRootDResponses.hh:849
void HandleResponseWithHosts(XRootDStatus *status, AnyObject *response, HostList *hostList)
Callback function.
XRootDStatus WaitFor(Pipeline pipeline)
Definition: XrdClOperations.hh:453
static Derived< true > PipeImpl(ConcreteOperation< Derived, true, HdlrFactory, Args... > &me, Operation< true > &op)
Definition: XrdClOperations.hh:626
friend class ConcreteOperation
Definition: XrdClOperations.hh:470
std::tuple< Args... > args
Operation arguments.
Definition: XrdClOperations.hh:686
Pipeline(Pipeline &&pipe)
Definition: XrdClOperations.hh:353
friend std::future< XRootDStatus > Async(Pipeline)
Definition: XrdClOperations.hh:439
PipelineHandler()
Default Constructor.
virtual std::string ToString()=0
Name of the operation.
std::unique_ptr< Operation< true > > nextOperation
Next operation in the pipeline.
Definition: XrdClOperations.hh:133
Pipeline(Operation< false > &op)
Constructor.
Definition: XrdClOperations.hh:338
Request status.
Definition: XrdClXRootDResponses.hh:212
Definition: XrdClAnyObject.hh:25
Definition: XrdClOperations.hh:42
Operation()
Constructor.
Definition: XrdClOperations.hh:171
static Derived< true > PipeImpl(ConcreteOperation< Derived, false, HdlrFactory, Args... > &me, Operation< false > &op)
Definition: XrdClOperations.hh:675
Definition: XrdClOperations.hh:50
Operation< HasHndl > * Move()
Definition: XrdClOperations.hh:573
void HandleResponse(XRootDStatus *status, AnyObject *response)
Callback function.
virtual XRootDStatus RunImpl()=0
Pipeline(Operation< true > &op)
Constructor.
Definition: XrdClOperations.hh:314
std::promise< XRootDStatus > prms
The promise that there will be a result (traveling along the pipeline)
Definition: XrdClOperations.hh:138
Handle an async response.
Definition: XrdClXRootDResponses.hh:854
Operation< true > * operator->()
Definition: XrdClOperations.hh:397
Derived< to > Transform()
Definition: XrdClOperations.hh:597
void AddOperation(Operation< true > *operation)
Pipeline(Operation< false > *op)
Definition: XrdClOperations.hh:329
void ForceHandler(const XRootDStatus &status)
Definition: XrdClOperations.hh:256
virtual Operation< true > * ToHandled()=0
friend class PipelineHandler
Definition: XrdClOperations.hh:164
Operation< true > * ToHandled()
Definition: XrdClOperations.hh:584
void Run(std::function< void(const XRootDStatus &)> final=nullptr)
Definition: XrdClOperations.hh:409
void Run(std::promise< XRootDStatus > prms, std::function< void(const XRootDStatus &)> final)
Definition: XrdClOperations.hh:227
Pipeline(Operation< true > *op)
Constructor.
Definition: XrdClOperations.hh:305
Derived< true > operator|(Operation< false > &&op)
Definition: XrdClOperations.hh:561
std::future< XRootDStatus > Async(Pipeline pipeline)
Definition: XrdClOperations.hh:439
Definition: XrdClOperations.hh:295
Definition: XrdClParallelOperation.hh:50
virtual Operation< HasHndl > * Move()=0
friend std::future< XRootDStatus > Async(Pipeline)
Definition: XrdClOperations.hh:439
std::unique_ptr< PipelineHandler > handler
Operation handler.
Definition: XrdClOperations.hh:280
Definition: XrdClOperations.hh:467