queue_t::array_t => queue_t::elems_t

This commit is contained in:
mutouyun 2019-01-15 15:08:00 +08:00
parent b87e96b43c
commit 0f6d8b3cd7
3 changed files with 15 additions and 15 deletions

View File

@ -19,19 +19,19 @@ template <typename T,
typename Policy = ipc::prod_cons_circ<relat::single, relat::multi, trans::broadcast>> typename Policy = ipc::prod_cons_circ<relat::single, relat::multi, trans::broadcast>>
class queue { class queue {
public: public:
using array_t = circ::elem_array<sizeof(T), Policy>; using elems_t = circ::elem_array<sizeof(T), Policy>;
using policy_t = typename array_t::policy_t; using policy_t = typename elems_t::policy_t;
private: private:
array_t* elems_ = nullptr; elems_t* elems_ = nullptr;
decltype(std::declval<array_t>().cursor()) cursor_ = 0; decltype(std::declval<elems_t>().cursor()) cursor_ = 0;
std::atomic_bool connected_ { false }; std::atomic_bool connected_ { false };
public: public:
queue() = default; queue() = default;
explicit queue(array_t* arr) : queue() { explicit queue(elems_t* els) : queue() {
attach(arr); attach(els);
} }
queue(const queue&) = delete; queue(const queue&) = delete;
@ -39,7 +39,7 @@ public:
queue(queue&&) = delete; queue(queue&&) = delete;
queue& operator=(queue&&) = delete; queue& operator=(queue&&) = delete;
constexpr array_t * elems() const noexcept { constexpr elems_t * elems() const noexcept {
return elems_; return elems_;
} }
@ -73,15 +73,15 @@ public:
return connected_.load(std::memory_order_acquire); return connected_.load(std::memory_order_acquire);
} }
array_t* attach(array_t* arr) noexcept { elems_t* attach(elems_t* els) noexcept {
if (arr == nullptr) return nullptr; if (els == nullptr) return nullptr;
auto old = elems_; auto old = elems_;
elems_ = arr; elems_ = els;
cursor_ = elems_->cursor(); cursor_ = elems_->cursor();
return old; return old;
} }
array_t* detach() noexcept { elems_t* detach() noexcept {
if (elems_ == nullptr) return nullptr; if (elems_ == nullptr) return nullptr;
auto old = elems_; auto old = elems_;
elems_ = nullptr; elems_ = nullptr;

View File

@ -41,7 +41,7 @@ struct msg_t {
using queue_t = ipc::queue<msg_t, Policy>; using queue_t = ipc::queue<msg_t, Policy>;
struct shm_info_t { struct shm_info_t {
typename queue_t::array_t elems_; // the circ_elem_array in shm typename queue_t::elems_t elems_; // the circ_elem_array in shm
}; };
constexpr static void* head_of(queue_t* que) { constexpr static void* head_of(queue_t* que) {

View File

@ -166,7 +166,7 @@ struct test_cq<ipc::circ::elem_array<D, P>> {
template <typename... T> template <typename... T>
struct test_cq<ipc::queue<T...>> { struct test_cq<ipc::queue<T...>> {
using cn_t = ipc::queue<T...>; using cn_t = ipc::queue<T...>;
using ca_t = typename cn_t::array_t; using ca_t = typename cn_t::elems_t;
ca_t* ca_; ca_t* ca_;
@ -386,9 +386,9 @@ void Unit::test_queue() {
ipc::queue<msg_t> queue; ipc::queue<msg_t> queue;
queue.push(msg_t { 1, 2 }); queue.push(msg_t { 1, 2 });
QCOMPARE(queue.pop(), msg_t{}); QCOMPARE(queue.pop(), msg_t{});
QVERIFY(sizeof(decltype(queue)::array_t) <= sizeof(*cq__)); QVERIFY(sizeof(decltype(queue)::elems_t) <= sizeof(*cq__));
auto cq = ::new (cq__) decltype(queue)::array_t; auto cq = ::new (cq__) decltype(queue)::elems_t;
queue.attach(cq); queue.attach(cq);
QVERIFY(queue.detach() != nullptr); QVERIFY(queue.detach() != nullptr);