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) { ...@@ -41,50 +41,4 @@ void iorecord::advance(size_t amount) {
this->offset += std::min(amount, this->size()); 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 } // namespace rmrf::net
...@@ -27,23 +27,57 @@ namespace rmrf::net { ...@@ -27,23 +27,57 @@ namespace rmrf::net {
void advance(size_t amount); void advance(size_t amount);
}; };
template<class iorecord_type = iorecord>
class ioqueue { class ioqueue {
private: private:
std::deque<iorecord> queue; std::deque<iorecord_type> queue;
public: public:
ioqueue(); static_assert(std::is_base_of<iorecord, iorecord_type>::value, "Your iorecord implementation needs to be a subclass of iorecord.");
~ioqueue(); 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_front(iorecord_type &&data) {
void push_back(iorecord &&data); if (!data.empty()) {
this->queue.emplace_front(std::forward<iorecord_type>(data));
}
}
void push_front(const iorecord &data); iorecord_type pop_front() {
void push_front(iorecord &&data); 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: ...@@ -46,7 +46,7 @@ private:
uint16_t port; uint16_t port;
auto_fd net_socket; auto_fd net_socket;
::ev::io io; ::ev::io io;
ioqueue write_queue; ioqueue<iorecord> write_queue;
bool data_write_active = false; bool data_write_active = false;
public: 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