summaryrefslogtreecommitdiffstats
path: root/engine/include/core/priority.hpp
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>;
    }
};