acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
_impl_generic_map.h
1// Created by camilo on 2023-01-06 19:20 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5namespace generic
6{
7
8
9 namespace map_base
10 {
11
12
13 template < typename CONTAINER, typename PAYLOAD >
14 inline bool contains_payload(const CONTAINER & container, const PAYLOAD & payload)
15 {
16
17 auto payloads = container.payloads();
18
19 for (auto & item : payloads)
20 {
21
22 if (item == payload)
23 {
24
25 return true;
26
27 }
28
29 }
30
31 return false;
32
33 }
34
35
36 template < typename CONTAINER, typename PAYLOAD, typename START >
37 inline auto find_payload(const CONTAINER & container, const PAYLOAD & payload, const START & start)
38 {
39
40 auto p = start;
41
42 for (; p; p++)
43 {
44
45 if (payload_of(*p) == payload)
46 {
47
48 return p;
49
50 }
51
52 }
53
54 return p;
55
56 }
57
58
59 template < typename CONTAINER, typename PAYLOAD >
60 inline auto find_payload(const CONTAINER & container, const PAYLOAD & payload)
61 {
62
63 return find_payload(container, payload, ((CONTAINER &)container).begin());
64
65 }
66
67
68 template < typename CONTAINER, typename PAYLOAD >
69 inline bool erase_payload(CONTAINER & container, const PAYLOAD & payload)
70 {
71
72 auto p = find_payload(container, payload);
73
74 if (!p)
75 {
76
77 return false;
78
79 }
80
81 auto pnonconst = (non_const < decltype(p)>) p;
82
83 container.erase(pnonconst);
84
85 return true;
86
87 }
88
89
90 //template < typename ITERATOR >
91 //void delete_erase(ITERATOR & iterator)
92 //{
93 //
94 // auto p = iterator.operator->();
95 //
96 // ::acme::del(p);
97 //
98 // ::erase(iterator);
99 //
100 //}
101 //
102 //
103 //template < typename ITERATOR >
104 //void erase(ITERATOR & iterator)
105 //{
106 //
107 // iterator.m_pcontainer->erase_item(iterator.item());
108 //
109 //}
110
111
112 } // namespace map_base
113
114
115
116} // namespace generic
117
118
119
120