forked from vitalif/vitastor
43 lines
809 B
C++
43 lines
809 B
C++
#pragma once
|
|
|
|
#ifndef _LARGEFILE64_SOURCE
|
|
#define _LARGEFILE64_SOURCE
|
|
#endif
|
|
|
|
#include <liburing.h>
|
|
#include <string.h>
|
|
|
|
#include <functional>
|
|
#include <vector>
|
|
|
|
struct ring_data_t
|
|
{
|
|
struct iovec iov; // for single-entry read/write operations
|
|
int res;
|
|
std::function<void(ring_data_t*)> callback;
|
|
};
|
|
|
|
struct ring_consumer_t
|
|
{
|
|
int number;
|
|
std::function<void(void)> loop;
|
|
};
|
|
|
|
class ring_loop_t
|
|
{
|
|
std::vector<ring_consumer_t> consumers;
|
|
struct ring_data_t *ring_data;
|
|
public:
|
|
struct io_uring *ring;
|
|
ring_loop_t(int qd);
|
|
~ring_loop_t();
|
|
struct io_uring_sqe* get_sqe();
|
|
int register_consumer(ring_consumer_t & consumer);
|
|
void unregister_consumer(int number);
|
|
void loop(bool sleep);
|
|
inline int submit()
|
|
{
|
|
return io_uring_submit(ring);
|
|
}
|
|
};
|