Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
oe::util::Pipeline< Request, Response, TopToBottom > Class Template Reference

#include <OxygenEngine/util/pipeline.h>

Public Types

using RequestType = Request
using ResponseType = Response
using PipeHandler = pipeline::Handler<Request, Response>

Public Member Functions

template<class... Args>
 Pipeline (Args &&... args)
template<typename T, typename ... Args>
PipelineaddPipe (const std::string &name, Args &&...args)
void init ()
void clean ()
Response run (const Request &&request)
Response getDefaultResponse ()
template<class... Types>
void generateDefaultResponse (Types... args)
template<typename T>
T * getPipeByName (const std::string &name)
void enableStepByStepMode ()
void disableStepByStepMode ()
bool isStepByStepMode ()
std::pair< Response, bool > step (const Request &&request)

Protected Member Functions

void _rebuildPipeOrder ()

Protected Attributes

std::vector< std::unique_ptr< PipeHandler > > _pipes
Response _default_response
std::map< std::string, PipeHandler * > _pipes_by_name
std::optional< int32_t > _last_step_pipe = std::nullopt

Detailed Description

template<typename Request, typename Response, bool TopToBottom = true>
class oe::util::Pipeline< Request, Response, TopToBottom >

Send a request through multiple handlers

Each pipe has a choice to handle the request and/or send it to sucessive stages

Can be used as a chain of responsibility or like HTTP middleware to process a request

Example usage:

.addPipe(A)
.addPipe(B)
.addPipe(C)
.addPipe(D)
.addPipe(E)
;
SomeType gabuzomeu = ...;
MyType result = pipeline.run(gabuzomeu);
Pipeline(Args &&... args)
Definition pipeline.h:125
Pipeline related classes.
Definition pipeline.h:16

This example will run the pipeline to convert gabuzomeu to result in following order : A->B->C->D->E

Note
if the order E->D->C->B->A feels more natural for your usecase, set TopToBottom parameter to false

Constructor & Destructor Documentation

◆ Pipeline()

template<typename Request, typename Response, bool TopToBottom = true>
template<class... Args>
oe::util::Pipeline< Request, Response, TopToBottom >::Pipeline ( Args &&... args)
inline

Create the pipeline and init the default response

Parameters
argsvalue constructor params

Member Function Documentation

◆ addPipe()

template<typename Request, typename Response, bool TopToBottom = true>
template<typename T, typename ... Args>
Pipeline & oe::util::Pipeline< Request, Response, TopToBottom >::addPipe ( const std::string & name,
Args &&... args )
inline

Add a new handler in the pipeline

Parameters
nameName of the pipe, used for getPipeByName
...Handler constructor

◆ clean()

template<typename Request, typename Response, bool TopToBottom = true>
void oe::util::Pipeline< Request, Response, TopToBottom >::clean ( )
inline

Clean pipeline handlers

Note
should be used instead custom destructors in pipe to give more control (pipes might be destroyed/copied more than once)

◆ generateDefaultResponse()

template<typename Request, typename Response, bool TopToBottom = true>
template<class... Types>
void oe::util::Pipeline< Request, Response, TopToBottom >::generateDefaultResponse ( Types... args)
inline

Change the pipeline's the default value

Parameters
argsvalue constructor params

◆ init()

template<typename Request, typename Response, bool TopToBottom = true>
void oe::util::Pipeline< Request, Response, TopToBottom >::init ( )
inline

Init pipeline handlers

Note
should be used instead custom constructors in pipe to give more control (pipes might be constructed/copied more than once)

◆ run()

template<typename Request, typename Response, bool TopToBottom = true>
Response oe::util::Pipeline< Request, Response, TopToBottom >::run ( const Request && request)
inline

Send a Request through a pipeline to generate a Response


The documentation for this class was generated from the following file: