blob: 7a238039fed1f9e0674c79771f558a588a326419 (
plain)
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
62
63
|
#pragma once
#include <set>
namespace flat
{
namespace core
{
enum class prior_t : unsigned
{
max = 0,
higher = 1,
high = 2,
none = 3,
low = 4,
lower = 5,
min = 6,
};
class prioritized
{
const prior_t m_priority;
public:
prioritized(prior_t m_priority = prior_t::none) : m_priority(m_priority) {}
const prior priority() const
{
return m_priority;
}
};
struct prior_criteria
{
bool operator()(const prioritized& a, const prioritized& b) const
{
return a.priority() < b.priority();
}
};
/* Compiler will complain if don't pass a non prioritized object */
template <class T>
using prior_set = std::set<T, prior_criteria>;
/* Equivalent but with pointers */
struct prior_ptr_criteria
{
bool operator()(const prioritized* a, const prioritized* b) const
{
return a->priority() < b->priority();
}
};
/* Compiler will complain if don't pass a non prioritized object */
template <class T>
using prior_ptr_set = std::set<T*, prior_criteria>;
}
};
|