Line data Source code
1 : #pragma once 2 : 3 : #include <AH/STL/utility> // std::forward 4 : #include <Settings/NamespaceSettings.hpp> 5 : 6 : BEGIN_CS_NAMESPACE 7 : 8 : /** 9 : * @brief Helper to turn a lambda function into a puller. 10 : * @ingroup MIDIParsers 11 : */ 12 : template <class Lambda> 13 : class LambdaPuller_ { 14 : public: 15 18 : LambdaPuller_(Lambda &&lambda) : lambda(std::forward<Lambda>(lambda)) {} 16 : 17 : template <class T> 18 26 : bool pull(T &packet) { 19 26 : return lambda(packet); 20 : } 21 : 22 : private: 23 : Lambda lambda; 24 : }; 25 : 26 : template <class Lambda> 27 18 : LambdaPuller_<Lambda> LambdaPuller(Lambda &&lambda) { 28 18 : return std::forward<Lambda>(lambda); 29 : } 30 : 31 : END_CS_NAMESPACE