automotive-message-broker  0.13
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
asyncqueue.h
1 #ifndef ASYNCQUEUE_H_
2 #define ASYNCQUEUE_H_
3 
4 #include <glib.h>
5 
6 #include <vector>
7 
8 template <typename T>
9 class Queue
10 {
11 public:
12  Queue()
13  {
14  g_mutex_init(&mutex);
15  }
16  ~Queue()
17  {
18 
19  }
20 
21  int count()
22  {
23  g_mutex_lock(&mutex);
24  int ret = mQueue.count();
25  g_mutex_unlock(&mutex);
26 
27  return ret;
28  }
29 
30  T pop()
31  {
32  g_mutex_lock(&mutex);
33 
34  auto itr = mQueue.begin();
35 
36  T item = *itr;
37 
38  mQueue.erase(itr);
39 
40  g_mutex_unlock(&mutex);
41 
42  return item;
43  }
44 
45  void append(T item)
46  {
47  g_mutex_lock(&mutex);
48 
49  g_cond_signal(&cond);
50 
51  mQueue.push_back(item);
52 
53  g_mutex_unlock(&mutex);
54  }
55 
56 private:
57  GMutex mutex;
58  std::vector<T> mQueue;
59 };
60 
61 namespace amb
62 {
63 
64 template <typename T>
65 void addQueueWatch( Queue<T> queue, std::function<void (Queue<T>)> callback);
66 
67 }
68 
69 #endif
Definition: asyncqueue.h:9
Definition: abstractpropertytype.h:252