mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-06 16:56:45 +08:00
30 lines
620 B
C++
30 lines
620 B
C++
#pragma once
|
|
|
|
#include <atomic>
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
|
|
#include "platform/waiter.h"
|
|
|
|
namespace ipc {
|
|
|
|
template <typename U2>
|
|
struct conn_head {
|
|
ipc::detail::waiter waiter_;
|
|
std::atomic<U2> cc_ { 0 }; // connection counter
|
|
|
|
std::size_t connect() noexcept {
|
|
return cc_.fetch_add(1, std::memory_order_release);
|
|
}
|
|
|
|
std::size_t disconnect() noexcept {
|
|
return cc_.fetch_sub(1, std::memory_order_release);
|
|
}
|
|
|
|
std::size_t conn_count(std::memory_order order = std::memory_order_acquire) const noexcept {
|
|
return cc_.load(order);
|
|
}
|
|
};
|
|
|
|
} // namespace ipc
|