fine-tune code

This commit is contained in:
mutouyun 2019-01-17 17:34:33 +08:00
parent 6a3c3cde23
commit be15b2377f
3 changed files with 9 additions and 8 deletions

View File

@ -286,8 +286,9 @@ public:
}
template <typename F>
bool pop(detail::u2_t& cur, F&& f) noexcept {
return base_t::pop(this, cur, std::forward<F>(f), block_);
bool pop(detail::u2_t* cur, F&& f) noexcept {
if (cur == nullptr) return false;
return base_t::pop(this, *cur, std::forward<F>(f), block_);
}
};

View File

@ -45,7 +45,7 @@ public:
return elems_;
}
std::size_t connect() noexcept {
std::size_t connect() {
if (elems_ == nullptr) return invalid_value;
if (connected_.exchange(true, std::memory_order_acq_rel)) {
// if it's already connected, just return an error count
@ -56,7 +56,7 @@ public:
return ret;
}
std::size_t disconnect() noexcept {
std::size_t disconnect() {
if (elems_ == nullptr) return invalid_value;
if (!connected_.exchange(false, std::memory_order_acq_rel)) {
// if it's already disconnected, just return an error count
@ -115,7 +115,7 @@ public:
}
template <typename... P>
auto push(P&&... params) noexcept {
auto push(P&&... params) {
if (elems_ == nullptr) return false;
if (elems_->push([&](void* p) {
::new (p) T(std::forward<P>(params)...);
@ -126,13 +126,13 @@ public:
return false;
}
T pop() noexcept {
T pop() {
if (elems_ == nullptr) {
return {};
}
T item;
for (unsigned k = 0;;) {
if (elems_->pop(cursor_, [&item](void* p) {
if (elems_->pop(&cursor_, [&item](void* p) {
::new (&item) T(std::move(*static_cast<T*>(p)));
})) {
return item;

View File

@ -136,7 +136,7 @@ struct test_cq<ipc::circ::elem_array<D, P>> {
void recv(cn_t cur, F&& proc) {
while (1) {
msg_t msg;
while (ca_->pop(cur, [&msg](void* p) {
while (ca_->pop(&cur, [&msg](void* p) {
msg = *static_cast<msg_t*>(p);
})) {
if (msg.pid_ < 0) {