-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathISetExtensions.h
More file actions
61 lines (51 loc) · 1.83 KB
/
ISetExtensions.h
File metadata and controls
61 lines (51 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
namespace Platform::Collections::Sets
{
static void AddAndReturnVoid(Interfaces::CSet auto& set, auto&& element)
{
set.insert(std::forward<decltype(element)>(element));
}
static void RemoveAndReturnVoid(Interfaces::CSet auto& set, auto&& element)
{
set.erase(std::forward<decltype(element)>(element));
}
static bool AddAndReturnTrue(Interfaces::CSet auto& set, auto&& element)
{
set.insert(std::forward<decltype(element)>(element));
return true;
}
static bool AddFirstAndReturnTrue(Interfaces::CSet auto& set, Interfaces::CArray auto&& elements)
{
AddFirst(set, elements);
return true;
}
static void AddFirst(Interfaces::CSet auto& set, Interfaces::CArray auto&& elements)
{
set.insert(elements[0]);
}
static bool AddAllAndReturnTrue(Interfaces::CSet auto& set, Interfaces::CArray auto&& elements)
{
AddAll(set, elements);
return true;
}
static void AddAll(Interfaces::CSet auto& set, Interfaces::CArray auto&& elements)
{
for (auto element : elements)
{
set.insert(element);
}
}
static bool SkipAndAddAndReturnTrue(Interfaces::CSet auto& set, Interfaces::CArray auto&& elements)
{
SkipAndAdd(set, elements);
return true;
}
static void SkipAndAdd(Interfaces::CSet auto& set, Interfaces::CArray auto&& elements) { SkipAndAdd(set, elements, 1); }
static void SkipAndAdd(Interfaces::CSet auto& set, Interfaces::CArray auto&& elements, std::size_t skip)
{
for (auto&& element : elements | std::views::drop(skip))
{
set.insert(std::forward<decltype(element)>(element));
}
}
static bool DoNotContains(const Interfaces::CSet auto& set, auto&& element) { return not set.contains(element); }
}