CARMA C++
PipeQueue.h
Go to the documentation of this file.
1 #ifndef SZA_UTIL_PIPEQUEUE_H
2 #define SZA_UTIL_PIPEQUEUE_H
3 
12 #include "carma/szautil/Pipe.h"
13 
14 #include <queue>
15 
16 namespace sza {
17  namespace util {
18 
22  class PipeQueue : public Pipe {
23 
24  public:
25 
26  // A class for handling a single message
27 
28  class QueueNode {
29  public:
30 
31  QueueNode();
32  QueueNode(void* buffer, size_t nbyte);
33 
34  QueueNode(const QueueNode& node);
35  QueueNode(QueueNode& node);
36  void operator=(const QueueNode& node);
37  void operator=(QueueNode& node);
38 
39  ~QueueNode();
40 
41  unsigned nbyte_;
42  unsigned char* buffer_;
43 
44  };
45 
46  // A class for handling a queue of messages
47 
48  class MsgQueue {
49  public:
50 
51  void push(void* buffer, size_t nbyte);
52  void pop(void* buffer, size_t nbyte);
53  bool empty();
54 
55  // Direct access to the queue
56 
57  QueueNode& front();
58  void pop();
59 
60  private:
61 
62  std::queue<QueueNode> queue_;
63 
64  };
65 
71  PipeQueue();
72 
78  ~PipeQueue();
79 
85  PipeState write(void *buffer, size_t nbyte, long timeout=PIPE_NOWAIT);
86 
92  PipeState read(void *buffer, size_t nbyte, long timeout=PIPE_NOWAIT);
93 
94  public:
95 
96  Mutex queueGuard_;
97  MsgQueue messages_;
98 
99  }; // End class Pipe
100 
101  }; // End namespace util
102 }; // End namespace sza
103 
104 #endif // PIPE_H
105 
106 
107 
108 
109 
110 
111 
Tagged: Fri Nov 14 12:39:34 UTC 2003.
A class to encapsulate a pipe.
Definition: PipeQueue.h:22
PipeState read(void *buffer, size_t nbyte, long timeout=PIPE_NOWAIT)
Read from the pipe.
PipeQueue()
Constructor.
PipeState write(void *buffer, size_t nbyte, long timeout=PIPE_NOWAIT)
Write to the pipe.
A class to encapsulate a pipe.
Definition: Pipe.h:49
~PipeQueue()
Destructor.