proxygen
folly::VirtualExecutor Class Reference

#include <VirtualExecutor.h>

Inheritance diagram for folly::VirtualExecutor:
folly::DefaultKeepAliveExecutor folly::Executor

Public Member Functions

 VirtualExecutor (KeepAlive<> executor)
 
 VirtualExecutor (Executor *executor)
 
 VirtualExecutor (Executor &executor)
 
 VirtualExecutor (const VirtualExecutor &)=delete
 
VirtualExecutoroperator= (const VirtualExecutor &)=delete
 
uint8_t getNumPriorities () const override
 
void add (Func f) override
 
void addWithPriority (Func f, int8_t priority) override
 
 ~VirtualExecutor () override
 
- Public Member Functions inherited from folly::DefaultKeepAliveExecutor
 DefaultKeepAliveExecutor ()
 
virtual ~DefaultKeepAliveExecutor ()
 
folly::Executor::KeepAlive weakRef ()
 
- Public Member Functions inherited from folly::Executor
virtual ~Executor ()
 

Private Member Functions

auto wrapFunc (Func f)
 

Private Attributes

const KeepAlive executor_
 

Additional Inherited Members

- Static Public Member Functions inherited from folly::Executor
template<typename ExecutorT >
static KeepAlive< ExecutorT > getKeepAliveToken (ExecutorT *executor)
 
template<typename ExecutorT >
static KeepAlive< ExecutorT > getKeepAliveToken (ExecutorT &executor)
 
- Static Public Attributes inherited from folly::Executor
static const int8_t LO_PRI = SCHAR_MIN
 
static const int8_t MID_PRI = 0
 
static const int8_t HI_PRI = SCHAR_MAX
 
- Protected Member Functions inherited from folly::DefaultKeepAliveExecutor
void joinKeepAlive ()
 
- Static Protected Member Functions inherited from folly::Executor
template<typename ExecutorT >
static bool isKeepAliveDummy (const KeepAlive< ExecutorT > &keepAlive)
 
template<typename ExecutorT >
static KeepAlive< ExecutorT > makeKeepAlive (ExecutorT *executor)
 

Detailed Description

VirtualExecutor implements a light-weight view onto existing Executor.

Multiple VirtualExecutors can be backed by a single Executor.

VirtualExecutor's destructor blocks until all tasks scheduled through it are complete. Executor's destructor also blocks until all VirtualExecutors backed by it are released.

Definition at line 32 of file VirtualExecutor.h.

Constructor & Destructor Documentation

folly::VirtualExecutor::VirtualExecutor ( KeepAlive<>  executor)
inlineexplicit

Definition at line 52 of file VirtualExecutor.h.

References executor_, and folly::Executor::isKeepAliveDummy().

Referenced by VirtualExecutor().

54  assert(!isKeepAliveDummy(executor_));
55  }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
const KeepAlive executor_
static bool isKeepAliveDummy(const KeepAlive< ExecutorT > &keepAlive)
Definition: Executor.h:166
folly::VirtualExecutor::VirtualExecutor ( Executor executor)
inlineexplicit

Definition at line 57 of file VirtualExecutor.h.

VirtualExecutor(KeepAlive<> executor)
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
static KeepAlive< ExecutorT > getKeepAliveToken(ExecutorT *executor)
Definition: Executor.h:138
folly::VirtualExecutor::VirtualExecutor ( Executor executor)
inlineexplicit

Definition at line 60 of file VirtualExecutor.h.

References operator=(), and VirtualExecutor().

VirtualExecutor(KeepAlive<> executor)
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
static KeepAlive< ExecutorT > getKeepAliveToken(ExecutorT *executor)
Definition: Executor.h:138
folly::VirtualExecutor::VirtualExecutor ( const VirtualExecutor )
delete
folly::VirtualExecutor::~VirtualExecutor ( )
inlineoverride

Member Function Documentation

void folly::VirtualExecutor::add ( Func  )
inlineoverridevirtual

Enqueue a function to executed by this executor. This and all variants must be threadsafe.

Implements folly::Executor.

Definition at line 70 of file VirtualExecutor.h.

References executor_, folly::gen::move, and wrapFunc().

Referenced by virtualExecutorTest().

70  {
71  executor_->add(wrapFunc(std::move(f)));
72  }
auto f
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
const KeepAlive executor_
void folly::VirtualExecutor::addWithPriority ( Func  ,
int8_t  priority 
)
inlineoverridevirtual

Enqueue a function with a given priority, where 0 is the medium priority This is up to the implementation to enforce

Reimplemented from folly::Executor.

Definition at line 74 of file VirtualExecutor.h.

References executor_, folly::gen::move, and wrapFunc().

Referenced by TEST().

74  {
75  executor_->addWithPriority(wrapFunc(std::move(f)), priority);
76  }
auto f
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
const KeepAlive executor_
uint8_t folly::VirtualExecutor::getNumPriorities ( ) const
inlineoverridevirtual

Reimplemented from folly::Executor.

Definition at line 66 of file VirtualExecutor.h.

References executor_.

66  {
67  return executor_->getNumPriorities();
68  }
const KeepAlive executor_
VirtualExecutor& folly::VirtualExecutor::operator= ( const VirtualExecutor )
delete

Referenced by VirtualExecutor().

auto folly::VirtualExecutor::wrapFunc ( Func  f)
inlineprivate

Definition at line 33 of file VirtualExecutor.h.

References folly::pushmi::executor, folly::Executor::getKeepAliveToken(), folly::DefaultKeepAliveExecutor::keepAlive_, and folly::gen::move.

Referenced by add(), and addWithPriority().

33  {
34  class FuncAndKeepAlive {
35  public:
36  FuncAndKeepAlive(Func&& f, VirtualExecutor* executor)
37  : keepAlive_(getKeepAliveToken(executor)), f_(std::move(f)) {}
38 
39  void operator()() {
40  f_();
41  }
42 
43  private:
44  Executor::KeepAlive<VirtualExecutor> keepAlive_;
45  Func f_;
46  };
47 
48  return FuncAndKeepAlive(std::move(f), this);
49  }
auto f
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
STL namespace.
VirtualExecutor(KeepAlive<> executor)
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
Function< void()> Func
Definition: Executor.h:27
KeepAlive< DefaultKeepAliveExecutor > keepAlive_
static KeepAlive< ExecutorT > getKeepAliveToken(ExecutorT *executor)
Definition: Executor.h:138

Member Data Documentation

const KeepAlive folly::VirtualExecutor::executor_
private

Definition at line 83 of file VirtualExecutor.h.

Referenced by add(), addWithPriority(), getNumPriorities(), and VirtualExecutor().


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