Skip to content
Snippets Groups Projects
Commit cfbce152 authored by Benny Baumann's avatar Benny Baumann
Browse files

chg: ioqueue interface changes

parent 28206ae2
No related branches found
No related tags found
1 merge request!1First unit tests
......@@ -41,50 +41,4 @@ void iorecord::advance(size_t amount) {
this->offset += std::min(amount, this->size());
}
ioqueue::ioqueue() : queue{} {
// NOP
}
ioqueue::~ioqueue() {
// NOP
}
bool ioqueue::empty() const {
return this->queue.empty();
}
void ioqueue::push_back(const iorecord &data) {
if (!data.empty()) {
this->queue.push_back(data);
}
}
void ioqueue::push_back(iorecord &&data) {
if (!data.empty()) {
this->queue.emplace_back(std::forward<iorecord>(data));
}
}
void ioqueue::push_front(const iorecord &data) {
if (!data.empty()) {
this->queue.push_front(data);
}
}
void ioqueue::push_front(iorecord &&data) {
if (!data.empty()) {
this->queue.emplace_front(std::forward<iorecord>(data));
}
}
iorecord ioqueue::pop_front() {
if (this->empty()) {
return iorecord{};
}
iorecord result = this->queue.front();
this->queue.pop_front();
return result;
}
} // namespace rmrf::net
......@@ -27,23 +27,57 @@ namespace rmrf::net {
void advance(size_t amount);
};
template<class iorecord_type = iorecord>
class ioqueue {
private:
std::deque<iorecord> queue;
std::deque<iorecord_type> queue;
public:
ioqueue();
~ioqueue();
static_assert(std::is_base_of<iorecord, iorecord_type>::value, "Your iorecord implementation needs to be a subclass of iorecord.");
ioqueue() : queue{} {
// NOP
}
bool empty() const;
~ioqueue() {
// NOP
}
bool empty() const {
return this->queue.empty();
}
void push_back(const iorecord_type& data) {
if (!data.empty()) {
this->queue.push_back(data);
}
}
void push_back(iorecord_type &&data) {
if (!data.empty()) {
this->queue.emplace_back(std::forward<iorecord_type>(data));
}
}
void push_front(const iorecord_type &data) {
if (!data.empty()) {
this->queue.push_front(data);
}
}
void push_back(const iorecord& data);
void push_back(iorecord &&data);
void push_front(iorecord_type &&data) {
if (!data.empty()) {
this->queue.emplace_front(std::forward<iorecord_type>(data));
}
}
void push_front(const iorecord &data);
void push_front(iorecord &&data);
iorecord_type pop_front() {
if (this->empty()) {
return iorecord_type{};
}
iorecord pop_front();
auto result = this->queue.front();
this->queue.pop_front();
return result;
}
};
}
......@@ -46,7 +46,7 @@ private:
uint16_t port;
auto_fd net_socket;
::ev::io io;
ioqueue write_queue;
ioqueue<iorecord> write_queue;
bool data_write_active = false;
public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment