acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
spreadset.h
1#pragma once
2
3
4#include "acme/prototype/collection/packset.h"
5
6
7template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
9{
10public:
11
12 using PACK_SET_AB = packset < TYPEA, TYPEB, ARRAYB >;
13 using PACK_SET_BA = packset < TYPEB, TYPEA, ARRAYA >;
14
15 using ARG_TYPEA = typename PACK_SET_AB::ARG_ELEMENT1;
16 using ARG_TYPEB = typename PACK_SET_BA::ARG_ELEMENT1;
17
18
19 PACK_SET_AB m_packsetAB;
20 PACK_SET_BA m_packsetBA;
21
22
23 void spread(ARG_TYPEA a, ARG_TYPEB b);
24
25
26 ARRAYB & b(ARG_TYPEA a);
27 ARRAYA & a(ARG_TYPEB b);
28
29
30 ::collection::count get_a_item_count();
31 ::collection::count get_b_item_count();
32 ::collection::count get_a_pack_count();
33 ::collection::count get_b_pack_count();
34
35
36 void erase_all();
37
38
39};
40
41
42template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
43void spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::
44spread(ARG_TYPEA a, ARG_TYPEB b)
45{
46 m_packsetAB.pack(a, b);
47 m_packsetBA.pack(b, a);
48}
49
50template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
51ARRAYB & spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::
52b(ARG_TYPEA a)
53{
54 return m_packsetAB[a];
55}
56
57
58template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
59ARRAYA & spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::
60a(ARG_TYPEB b)
61{
62 return m_packsetBA[b];
63}
64
65template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
66::collection::count spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::
67get_a_item_count()
68{
69 return m_packsetBA.get_item_count();
70}
71
72template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
73::collection::count spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::
74get_b_item_count()
75{
76 return m_packsetAB.get_item_count();
77}
78
79template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
80::collection::count spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::
81get_a_pack_count()
82{
83 return m_packsetAB.get_pack_count();
84}
85
86template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
87::collection::count spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::
88get_b_pack_count()
89{
90 return m_packsetBA.get_pack_count();
91}
92
93
94template <class TYPEA, class TYPEB, class ARRAYA, class ARRAYB >
95void spreadset <TYPEA, TYPEB, ARRAYA, ARRAYB>::erase_all()
96{
97 m_packsetAB.erase_all();
98 m_packsetBA.erase_all();
99}
100
101
102#if OSBIT == 32
103
104using iptr_spreadset = i32_spreadset;
105
106#else
107
108using iptr_spreadset = i64_spreadset;
109
110#endif
111
112
113
Definition spreadset.h:9