Grok 10.0.1
MinHeap.h
Go to the documentation of this file.
1#pragma once
2
3#include <mutex>
4#include <queue>
5
6namespace grk
7{
9{
10 public:
11 MinHeapLocker(std::mutex& mut) : lock(mut) {}
12
13 private:
14 std::lock_guard<std::mutex> lock;
15};
16
18{
19 public:
20 MinHeapFakeLocker([[maybe_unused]] std::mutex& mut) {}
21};
22
23template<typename T>
25{
26 bool operator()(const T a, const T b) const
27 {
28 return a.getIndex() > b.getIndex();
29 }
30};
31
32template<typename T, typename IT, typename L>
34{
35 public:
37 void push(T val)
38 {
39 L locker(queue_mutex);
40 queue.push(val);
41 }
42 T pop(void)
43 {
44 L locker(queue_mutex);
45 if(queue.empty())
46 return T();
47 auto val = queue.top();
48 if(val.getIndex() == nextIndex)
49 {
50 queue.pop();
51 nextIndex++;
52 return val;
53 }
54 return T();
55 }
56 size_t size(void)
57 {
58 return queue.size();
59 }
60
61 private:
62 std::priority_queue<T, std::vector<T>, MinHeapComparator<T>> queue;
63 std::mutex queue_mutex;
65};
66
67template<typename T>
69{
70 bool operator()(const T* a, const T* b) const
71 {
72 return a->getIndex() > b->getIndex();
73 }
74};
75
76template<typename T, typename IT, typename L>
78{
79 public:
81 void push(T* val)
82 {
83 L locker(queue_mutex);
84 queue.push(val);
85 }
86 T* pop(void)
87 {
88 L locker(queue_mutex);
89 if(queue.empty())
90 return nullptr;
91 auto val = queue.top();
92 if(val->getIndex() == nextIndex)
93 {
94 queue.pop();
95 nextIndex++;
96 return val;
97 }
98 return nullptr;
99 }
100 size_t size(void)
101 {
102 return queue.size();
103 }
104
105 private:
106 std::priority_queue<T*, std::vector<T*>, MinHeapPtrComparator<T>> queue;
107 std::mutex queue_mutex;
109};
110
111} // namespace grk
Definition: MinHeap.h:18
MinHeapFakeLocker(std::mutex &mut)
Definition: MinHeap.h:20
Definition: MinHeap.h:34
std::mutex queue_mutex
Definition: MinHeap.h:63
std::priority_queue< T, std::vector< T >, MinHeapComparator< T > > queue
Definition: MinHeap.h:62
IT nextIndex
Definition: MinHeap.h:64
T pop(void)
Definition: MinHeap.h:42
size_t size(void)
Definition: MinHeap.h:56
MinHeap()
Definition: MinHeap.h:36
void push(T val)
Definition: MinHeap.h:37
Definition: MinHeap.h:9
MinHeapLocker(std::mutex &mut)
Definition: MinHeap.h:11
std::lock_guard< std::mutex > lock
Definition: MinHeap.h:14
Definition: MinHeap.h:78
MinHeapPtr()
Definition: MinHeap.h:80
std::priority_queue< T *, std::vector< T * >, MinHeapPtrComparator< T > > queue
Definition: MinHeap.h:106
void push(T *val)
Definition: MinHeap.h:81
std::mutex queue_mutex
Definition: MinHeap.h:107
T * pop(void)
Definition: MinHeap.h:86
IT nextIndex
Definition: MinHeap.h:108
size_t size(void)
Definition: MinHeap.h:100
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
Definition: MinHeap.h:25
bool operator()(const T a, const T b) const
Definition: MinHeap.h:26
Definition: MinHeap.h:69
bool operator()(const T *a, const T *b) const
Definition: MinHeap.h:70