26#if ! defined (octave_action_container_h)
27#define octave_action_container_h 1
29#include "octave-config.h"
56OCTAVE_END_NAMESPACE(util)
72 OCTAVE_DISABLE_COPY_MOVE (
elem)
74 virtual ~
elem () = default;
76 virtual
void run () { }
88 template <
typename F,
typename... Args>
90 : m_fcn (std::bind (fcn, args...))
93 void run () { m_fcn (); }
97 std::function<void ()> m_fcn;
102 template <
typename T>
108 : m_ptr (&ref), m_val (val) { }
114 void run () { *m_ptr = m_val; }
119 typename util::atomic_traits<T>::type m_val;
124 template <
typename T>
136 void run () {
delete m_ptr; }
149 template <typename F, typename... Args>
150 void add (F&& fcn, Args&& ... args)
152 add_action (
new fcn_elem (std::forward<F> (fcn),
153 std::forward<Args> (args)...));
160 template <
typename... Params,
typename... Args>
161 void add_fcn (
void (*fcn) (Params...), Args&& ... args)
163 add_action (
new fcn_elem (fcn, std::forward<Args> (args)...));
166 template <
typename T,
typename... Params,
typename... Args>
167 void add_method (T *obj,
void (T::*method) (Params...), Args&& ... args)
169 add_action (
new fcn_elem (method, obj, std::forward<Args> (args)...));
172 template <
typename T,
typename... Params,
typename... Args>
173 void add_method (T& obj,
void (T::*method) (Params...), Args&& ... args)
175 add_action (
new fcn_elem (method, &obj, std::forward<Args> (args)...));
180 template <
typename T>
187 template <
typename T>
194 template <
typename T>
200 operator bool ()
const {
return ! empty (); }
215 for (std::size_t i = 0; i < num; i++)
221 virtual std::size_t
size ()
const = 0;
223 bool empty ()
const {
return size () == 0; }
230OCTAVE_END_NAMESPACE(octave)
~delete_ptr_elem()=default
fcn_elem(F &&fcn, Args &&... args)
restore_var_elem(T &ref, const T &val)
~restore_var_elem()=default
void add_method(T *obj, void(T::*method)(Params...), Args &&... args)
virtual std::size_t size() const =0
void add_method(T &obj, void(T::*method)(Params...), Args &&... args)
virtual void run_first()=0
virtual void add_action(elem *new_elem)=0
void protect_var(T &var, const T &val)
void discard(std::size_t num)
void add_fcn(void(*fcn)(Params...), Args &&... args)
virtual void discard_first()=0
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn