35 lines
805 B
C++
35 lines
805 B
C++
#include <condition_variable>
|
|
#include <cstdint>
|
|
#include "internal/lambds_traits.hpp"
|
|
#include <type_traits>
|
|
#include <vector>
|
|
#include <thread>
|
|
#include <mutex>
|
|
#include <condition_variable>>
|
|
|
|
namespace hqueue {
|
|
template<typename T>
|
|
concept executor_t = requires(T a) {
|
|
std::is_invocable_v<T>;
|
|
};
|
|
|
|
template<executor_t executor, typename cache_entry_t>
|
|
class queue {
|
|
public:
|
|
using return_type = typename function_traits<executor_t>::return_type;
|
|
using arguments = typename function_traits<executor_t>::argument_types;
|
|
|
|
template<typename R, typename Args>
|
|
struct Task {
|
|
Args args;
|
|
//use std expected
|
|
};
|
|
|
|
queue(executor exec) : m_executor(exec) { }
|
|
private:
|
|
std::mutex m_mtx;
|
|
std::condition_variable m_cv;
|
|
executor m_executor;
|
|
};
|
|
}
|