Grok 12.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:
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 {
40 queue.push(val);
41 }
42 bool pop(T& val)
43 {
45 if(queue.empty() || queue.top().getIndex() != nextIndex)
46 return false;
47 val = queue.top();
48 queue.pop();
49 nextIndex++;
50 return true;
51 }
52 size_t size(void)
53 {
54 return queue.size();
55 }
56
57 private:
58 std::priority_queue<T, std::vector<T>, MinHeapComparator<T>> queue;
59 std::mutex queue_mutex;
61};
62
63template<typename T>
65{
66 bool operator()(const T* a, const T* b) const
67 {
68 return a->getIndex() > b->getIndex();
69 }
70};
71
72template<typename T, typename IT, typename L>
74{
75 public:
77 void push(T* val)
78 {
80 queue.push(val);
81 }
82 T* pop(void)
83 {
85 if(queue.empty() || queue.top()->getIndex() != nextIndex)
86 return nullptr;
87 auto val = queue.top();
88 queue.pop();
89 nextIndex++;
90 return val;
91 }
92 size_t size(void)
93 {
94 return queue.size();
95 }
96
97 private:
98 std::priority_queue<T*, std::vector<T*>, MinHeapPtrComparator<T>> queue;
99 std::mutex queue_mutex;
101};
102
103} // 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:59
std::priority_queue< T, std::vector< T >, MinHeapComparator< T > > queue
Definition MinHeap.h:58
IT nextIndex
Definition MinHeap.h:60
size_t size(void)
Definition MinHeap.h:52
MinHeap()
Definition MinHeap.h:36
bool pop(T &val)
Definition MinHeap.h:42
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:74
MinHeapPtr()
Definition MinHeap.h:76
std::priority_queue< T *, std::vector< T * >, MinHeapPtrComparator< T > > queue
Definition MinHeap.h:98
void push(T *val)
Definition MinHeap.h:77
std::mutex queue_mutex
Definition MinHeap.h:99
T * pop(void)
Definition MinHeap.h:82
IT nextIndex
Definition MinHeap.h:100
size_t size(void)
Definition MinHeap.h:92
Copyright (C) 2016-2024 Grok Image Compression Inc.
Definition ICacheable.h:20
void grk_read(const uint8_t *buffer, TYPE *value, uint32_t numBytes)
Definition BufferedStream.h:239
Definition MinHeap.h:25
bool operator()(const T a, const T b) const
Definition MinHeap.h:26
Definition MinHeap.h:65
bool operator()(const T *a, const T *b) const
Definition MinHeap.h:66