Grok 10.0.5
MinHeap.h
Go to the documentation of this file.
1#pragma once
2
3#include <mutex>
4#include <queue>
5
6namespace grk
7{
8class MinHeapLocker
9{
10 public:
11 MinHeapLocker(std::mutex& mut) : lock(mut) {}
12
13 private:
14 std::lock_guard<std::mutex> lock;
15};
16
17class MinHeapFakeLocker
18{
19 public:
20 MinHeapFakeLocker([[maybe_unused]] std::mutex& mut) {}
21};
22
23template<typename T>
24struct MinHeapComparator
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>
33class MinHeap
34{
35 public:
36 MinHeap() : nextIndex(0) {}
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>
68struct MinHeapPtrComparator
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>
77class MinHeapPtr
78{
79 public:
80 MinHeapPtr() : nextIndex(0) {}
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;
108 IT nextIndex;
109};
110
111} // namespace grk
IT nextIndex
Definition MinHeap.h:64
std::lock_guard< std::mutex > lock
Definition MinHeap.h:14
std::mutex queue_mutex
Definition MinHeap.h:63
std::priority_queue< T, std::vector< T >, MinHeapComparator< T > > queue
Definition MinHeap.h:62
T val[N]
Definition WaveletCommon.h:65
uint32_t a
only used by MQ decoder
Definition mqc.h:48
Copyright (C) 2016-2023 Grok Image Compression Inc.
Definition ICacheable.h:20