Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
FrameContainerQueue.h
1#pragma once
2
3#include <boost/shared_ptr.hpp>
4#include "BoundBuffer.h"
5#include "CommonDefs.h"
6
7class FrameContainerQueue :public bounded_buffer<frame_container> {
8public:
9 FrameContainerQueue(size_t capacity);
10 virtual void push(frame_container item);
11 virtual void push_back(frame_container item);
12 virtual void push_drop_oldest(frame_container item);
13 virtual frame_container pop();
14
15 virtual bool try_push(frame_container item);
16 virtual frame_container try_pop();
17 virtual frame_container peek();
18
19 virtual bool isFull();
20 virtual void clear();
21 virtual void flush();
22 virtual void accept();
23 virtual size_t size();
24
25private:
26};
27
29{
30public:
32 void adapt(boost::shared_ptr<FrameContainerQueue> adaptee) {
33 mAdaptee = adaptee;
34 }
35 void push(frame_container item) {
36 if (mAdaptee.get() != nullptr)
37 {
38 PushType p = should_push(item);
39 if (p == MUST_PUSH)
40 {
41 mAdaptee->push(item);
42 }
43 else if (p == TRY_PUSH)
44 {
45 if (mAdaptee->try_push(item))
46 {
47 on_push_success(item);
48 }
49 else
50 {
51 on_failed_push(item);
52 }
53 }
54 }
55 }
56 frame_container pop() {
57 if (mAdaptee.get() != nullptr)
58 {
59 frame_container ret = mAdaptee->try_pop();
60 if (ret.size() == 0)
61 {
62 return on_failed_pop();
63 }
64 else {
65 return on_pop_success(ret);
66 }
67 }
68 return frame_container();
69 }
70 bool try_push(frame_container item)
71 {
72 if (mAdaptee.get() != nullptr)
73 {
74 PushType p = should_push(item);
75 if (p == DONT_PUSH)
76 {
77 //dont call on_failed_push here
78 return false;
79 }
80 else if (p == MUST_PUSH)
81 {
82 mAdaptee->push(item);
83 on_push_success(item);
84 return true;
85 }
86 else //if (p == TRY_PUSH)
87 {
88 if (mAdaptee->try_push(item))
89 {
90 on_push_success(item);
91 return true;
92 }
93 }
94 }
95 return false;
96 }
97 frame_container try_pop()
98 {
99 if (mAdaptee.get() != nullptr)
100 {
101 return mAdaptee->try_pop();
102 }
103 return frame_container();
104 }
105
106 bool isFull()
107 {
108 if(!mAdaptee.get())
109 {
110 return false;
111 }
112
113 return mAdaptee->isFull();
114 }
115
116 void clear()
117 {
118 if(mAdaptee.get())
119 {
120 mAdaptee->clear();
121 }
122 }
123
124 void accept()
125 {
126 if(mAdaptee.get())
127 {
128 mAdaptee->accept();
129 }
130 }
131
132 size_t size()
133 {
134 if(!mAdaptee.get())
135 {
136 return 0;
137 }
138
139 return mAdaptee->size();
140 }
141
142protected:
143 boost::shared_ptr<FrameContainerQueue> mAdaptee;
144 enum PushType { DONT_PUSH = 0, TRY_PUSH = 1, MUST_PUSH = 2 };
145 virtual PushType should_push(frame_container item) { return TRY_PUSH; }
146 virtual void on_failed_push(frame_container item) {}
147 virtual void on_push_success(frame_container item) {}
148 virtual frame_container on_failed_pop() {
149 return frame_container();
150 }
151 virtual frame_container on_pop_success(frame_container item) {
152 return item;
153 }
154};
Definition FrameContainerQueue.h:29
virtual PushType should_push(frame_container item)
Definition FrameContainerQueue.h:145
virtual void on_push_success(frame_container item)
Definition FrameContainerQueue.h:147
virtual void on_failed_push(frame_container item)
Definition FrameContainerQueue.h:146
boost::shared_ptr< FrameContainerQueue > mAdaptee
Definition FrameContainerQueue.h:143
bool isFull()
Definition FrameContainerQueue.h:106
bool try_push(frame_container item)
Definition FrameContainerQueue.h:70
FrameContainerQueueAdapter()
Definition FrameContainerQueue.h:31
virtual frame_container on_failed_pop()
Definition FrameContainerQueue.h:148
frame_container pop()
Definition FrameContainerQueue.h:56
void accept()
Definition FrameContainerQueue.h:124
void push(frame_container item)
Definition FrameContainerQueue.h:35
virtual frame_container on_pop_success(frame_container item)
Definition FrameContainerQueue.h:151
size_t size()
Definition FrameContainerQueue.h:132
frame_container try_pop()
Definition FrameContainerQueue.h:97
PushType
Definition FrameContainerQueue.h:144
@ TRY_PUSH
Definition FrameContainerQueue.h:144
@ DONT_PUSH
Definition FrameContainerQueue.h:144
@ MUST_PUSH
Definition FrameContainerQueue.h:144
void clear()
Definition FrameContainerQueue.h:116
void adapt(boost::shared_ptr< FrameContainerQueue > adaptee)
Definition FrameContainerQueue.h:32
Definition FrameContainerQueue.h:7
virtual void push_back(frame_container item)
Definition FrameContainerQueue.cpp:12
virtual frame_container try_pop()
Definition FrameContainerQueue.cpp:32
virtual void accept()
Definition FrameContainerQueue.cpp:57
virtual void push(frame_container item)
Definition FrameContainerQueue.cpp:7
virtual void flush()
Definition FrameContainerQueue.cpp:52
virtual size_t size()
Definition FrameContainerQueue.cpp:62
virtual bool try_push(frame_container item)
Definition FrameContainerQueue.cpp:27
virtual void clear()
Definition FrameContainerQueue.cpp:47
virtual frame_container pop()
Definition FrameContainerQueue.cpp:22
FrameContainerQueue(size_t capacity)
Definition FrameContainerQueue.cpp:4
virtual frame_container peek()
Definition FrameContainerQueue.cpp:37
virtual void push_drop_oldest(frame_container item)
Definition FrameContainerQueue.cpp:17
virtual bool isFull()
Definition FrameContainerQueue.cpp:42
Definition BoundBuffer.h:14