ipc::circ::relat => ipc::relat; ipc::circ::trans => ipc::trans

This commit is contained in:
mutouyun 2019-01-14 23:10:27 +08:00
parent cfd175dbdc
commit 612a59ae31
6 changed files with 58 additions and 60 deletions

View File

@ -41,16 +41,6 @@ elem_t<S>* elem_of(void* ptr) noexcept {
} // namespace detail
enum class relat { // multiplicity of the relationship
single,
multi
};
enum class trans { // transmission
unicast,
broadcast
};
////////////////////////////////////////////////////////////////
/// producer-consumer policies
////////////////////////////////////////////////////////////////

View File

@ -17,9 +17,7 @@ namespace ipc {
namespace circ {
template <typename T,
typename Policy = circ::prod_cons<circ::relat::single,
circ::relat::multi,
circ::trans::broadcast>>
typename Policy = circ::prod_cons<relat::single, relat::multi, trans::broadcast>>
class queue {
public:
using array_t = elem_array<sizeof(T), Policy>;

View File

@ -31,6 +31,16 @@ enum : std::size_t {
data_length = 16
};
enum class relat { // multiplicity of the relationship
single,
multi
};
enum class trans { // transmission
unicast,
broadcast
};
// concept helpers
template <bool Cond, typename R>

View File

@ -139,7 +139,7 @@ public:
*/
using route = channel_ipml<channel_detail<
circ::queue,
circ::prod_cons<circ::relat::single, circ::relat::multi, circ::trans::broadcast>
circ::prod_cons<relat::single, relat::multi, trans::broadcast>
>>;
/*
@ -152,7 +152,7 @@ using route = channel_ipml<channel_detail<
using channel = channel_ipml<channel_detail<
circ::queue,
circ::prod_cons<circ::relat::multi, circ::relat::multi, circ::trans::broadcast>
circ::prod_cons<relat::multi, relat::multi, trans::broadcast>
>>;
} // namespace ipc

View File

@ -261,10 +261,10 @@ buff_t channel_detail<Queue, Policy>::recv(handle_t h) {
return detail<Queue, Policy>::recv(h);
}
template struct channel_detail<circ::queue, circ::prod_cons<circ::relat::single, circ::relat::single, circ::trans::unicast >>;
template struct channel_detail<circ::queue, circ::prod_cons<circ::relat::single, circ::relat::multi , circ::trans::unicast >>;
template struct channel_detail<circ::queue, circ::prod_cons<circ::relat::multi , circ::relat::multi , circ::trans::unicast >>;
template struct channel_detail<circ::queue, circ::prod_cons<circ::relat::single, circ::relat::multi , circ::trans::broadcast>>;
template struct channel_detail<circ::queue, circ::prod_cons<circ::relat::multi , circ::relat::multi , circ::trans::broadcast>>;
template struct channel_detail<circ::queue, circ::prod_cons<relat::single, relat::single, trans::unicast >>;
template struct channel_detail<circ::queue, circ::prod_cons<relat::single, relat::multi , trans::unicast >>;
template struct channel_detail<circ::queue, circ::prod_cons<relat::multi , relat::multi , trans::unicast >>;
template struct channel_detail<circ::queue, circ::prod_cons<relat::single, relat::multi , trans::broadcast>>;
template struct channel_detail<circ::queue, circ::prod_cons<relat::multi , relat::multi , trans::broadcast>>;
} // namespace ipc

View File

@ -19,9 +19,9 @@ struct msg_t {
};
using cq_t = ipc::circ::elem_array<sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::single,
ipc::circ::relat::multi,
ipc::circ::trans::broadcast>>;
ipc::circ::prod_cons<ipc::relat::single,
ipc::relat::multi,
ipc::trans::broadcast>>;
cq_t* cq__;
bool operator==(msg_t const & m1, msg_t const & m2) {
@ -66,10 +66,10 @@ struct test_verify<ipc::circ::elem_array<D, P>> {
}
};
template <ipc::circ::relat Rp>
template <ipc::relat Rp>
struct test_verify<ipc::circ::prod_cons<Rp,
ipc::circ::relat::multi,
ipc::circ::trans::unicast>
ipc::relat::multi,
ipc::trans::unicast>
> : test_verify<cq_t> {
using test_verify<cq_t>::test_verify;
@ -93,13 +93,13 @@ struct test_verify<ipc::circ::prod_cons<Rp,
template <typename P>
struct quit_mode;
template <ipc::circ::relat Rp, ipc::circ::relat Rc>
struct quit_mode<ipc::circ::prod_cons<Rp, Rc, ipc::circ::trans::unicast>> {
template <ipc::relat Rp, ipc::relat Rc>
struct quit_mode<ipc::circ::prod_cons<Rp, Rc, ipc::trans::unicast>> {
using type = volatile bool;
};
template <ipc::circ::relat Rp, ipc::circ::relat Rc>
struct quit_mode<ipc::circ::prod_cons<Rp, Rc, ipc::circ::trans::broadcast>> {
template <ipc::relat Rp, ipc::relat Rc>
struct quit_mode<ipc::circ::prod_cons<Rp, Rc, ipc::trans::broadcast>> {
struct type {
constexpr type(bool) {}
constexpr operator bool() const { return false; }
@ -263,27 +263,27 @@ void test_prod_cons() {
void Unit::test_prod_cons_1v1() {
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::single,
ipc::circ::relat::single,
ipc::circ::trans::unicast>
ipc::circ::prod_cons<ipc::relat::single,
ipc::relat::single,
ipc::trans::unicast>
> el_arr_ssu;
benchmark_prod_cons<1, 1, LoopCount, cq_t>(&el_arr_ssu);
benchmark_prod_cons<1, 1, LoopCount, void>(&el_arr_ssu);
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::single,
ipc::circ::relat::multi,
ipc::circ::trans::unicast>
ipc::circ::prod_cons<ipc::relat::single,
ipc::relat::multi,
ipc::trans::unicast>
> el_arr_smu;
benchmark_prod_cons<1, 1, LoopCount, decltype(el_arr_smu)::policy_t>(&el_arr_smu);
benchmark_prod_cons<1, 1, LoopCount, void>(&el_arr_smu);
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::multi,
ipc::circ::relat::multi,
ipc::circ::trans::unicast>
ipc::circ::prod_cons<ipc::relat::multi,
ipc::relat::multi,
ipc::trans::unicast>
> el_arr_mmu;
benchmark_prod_cons<1, 1, LoopCount, decltype(el_arr_mmu)::policy_t>(&el_arr_mmu);
benchmark_prod_cons<1, 1, LoopCount, void>(&el_arr_mmu);
@ -293,9 +293,9 @@ void Unit::test_prod_cons_1v1() {
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::multi,
ipc::circ::relat::multi,
ipc::circ::trans::broadcast>
ipc::circ::prod_cons<ipc::relat::multi,
ipc::relat::multi,
ipc::trans::broadcast>
> el_arr_mmb;
benchmark_prod_cons<1, 1, LoopCount, cq_t>(&el_arr_mmb);
benchmark_prod_cons<1, 1, LoopCount, void>(&el_arr_mmb);
@ -304,18 +304,18 @@ void Unit::test_prod_cons_1v1() {
void Unit::test_prod_cons_1v3() {
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::single,
ipc::circ::relat::multi,
ipc::circ::trans::unicast>
ipc::circ::prod_cons<ipc::relat::single,
ipc::relat::multi,
ipc::trans::unicast>
> el_arr_smu;
benchmark_prod_cons<1, 3, LoopCount, decltype(el_arr_smu)::policy_t>(&el_arr_smu);
benchmark_prod_cons<1, 3, LoopCount, void>(&el_arr_smu);
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::multi,
ipc::circ::relat::multi,
ipc::circ::trans::unicast>
ipc::circ::prod_cons<ipc::relat::multi,
ipc::relat::multi,
ipc::trans::unicast>
> el_arr_mmu;
benchmark_prod_cons<1, 3, LoopCount, decltype(el_arr_mmu)::policy_t>(&el_arr_mmu);
benchmark_prod_cons<1, 3, LoopCount, void>(&el_arr_mmu);
@ -325,9 +325,9 @@ void Unit::test_prod_cons_1v3() {
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::multi,
ipc::circ::relat::multi,
ipc::circ::trans::broadcast>
ipc::circ::prod_cons<ipc::relat::multi,
ipc::relat::multi,
ipc::trans::broadcast>
> el_arr_mmb;
benchmark_prod_cons<1, 3, LoopCount, cq_t>(&el_arr_mmb);
benchmark_prod_cons<1, 3, LoopCount, void>(&el_arr_mmb);
@ -336,9 +336,9 @@ void Unit::test_prod_cons_1v3() {
void Unit::test_prod_cons_performance() {
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::single,
ipc::circ::relat::multi,
ipc::circ::trans::unicast>
ipc::circ::prod_cons<ipc::relat::single,
ipc::relat::multi,
ipc::trans::unicast>
> el_arr_smu;
ipc::mem::detail::static_for(std::make_index_sequence<10>{}, [&el_arr_smu](auto index) {
benchmark_prod_cons<1, decltype(index)::value + 1, LoopCount, void>(&el_arr_smu);
@ -351,9 +351,9 @@ void Unit::test_prod_cons_performance() {
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::multi,
ipc::circ::relat::multi,
ipc::circ::trans::unicast>
ipc::circ::prod_cons<ipc::relat::multi,
ipc::relat::multi,
ipc::trans::unicast>
> el_arr_mmu;
ipc::mem::detail::static_for(std::make_index_sequence<10>{}, [&el_arr_mmu](auto index) {
benchmark_prod_cons<1, decltype(index)::value + 1, LoopCount, void>(&el_arr_mmu);
@ -367,9 +367,9 @@ void Unit::test_prod_cons_performance() {
ipc::circ::elem_array<
sizeof(msg_t),
ipc::circ::prod_cons<ipc::circ::relat::multi,
ipc::circ::relat::multi,
ipc::circ::trans::broadcast>
ipc::circ::prod_cons<ipc::relat::multi,
ipc::relat::multi,
ipc::trans::broadcast>
> el_arr_mmb;
ipc::mem::detail::static_for(std::make_index_sequence<10>{}, [&el_arr_mmb](auto index) {
benchmark_prod_cons<1, decltype(index)::value + 1, LoopCount, void>(&el_arr_mmb);