mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-07 01:06:45 +08:00
queue_t::array_t => queue_t::elems_t
This commit is contained in:
parent
b87e96b43c
commit
0f6d8b3cd7
@ -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;
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user