Fawkes API
Fawkes Development Version
|
24 #include <core/exceptions/software.h>
25 #include <core/threading/mutex.h>
26 #include <interface/message.h>
27 #include <interface/message_queue.h>
43 : Exception(
"Message already enqueued in another MessageQueue.")
78 msg_list_t *l = list_;
98 if (msg->enqueued() != 0) {
99 throw MessageAlreadyQueuedException();
102 msg->mark_enqueued();
104 list_ = (msg_list_t *)malloc(
sizeof(msg_list_t));
107 list_->msg_id = msg->id();
110 msg_list_t *l = (msg_list_t *)malloc(
sizeof(msg_list_t));
113 l->msg_id = msg->id();
135 throw NotLockedException(
"Message queue must be locked to insert messages after iterator.");
137 if (it.cur == NULL) {
140 if (msg->enqueued() != 0) {
143 msg->mark_enqueued();
144 msg_list_t *l = (msg_list_t *)malloc(
sizeof(msg_list_t));
145 l->next = it.cur->next;
147 l->msg_id = msg->id();
149 if (l->next == NULL) {
161 msg_list_t *l = list_;
162 msg_list_t *p = NULL;
182 msg_list_t *l = list_;
183 msg_list_t *p = NULL;
185 if (l->msg_id == msg_id) {
205 throw NotLockedException(
"Protected remove must be made safe by locking.");
225 msg_list_t * l = list_;
242 bool rv = (list_ == NULL);
417 for (
unsigned int j = 0; (cur != NULL) && (j < i); ++j) {
432 for (
unsigned int j = 0; (cur != NULL) && (j < i); ++j) {
446 return (cur == c.cur);
457 return (cur != c.cur);
467 return (cur != NULL) ? cur->msg : NULL;
void lock()
Lock this mutex.
bool empty() const
Check if message queue is empty.
MessageIterator & operator+=(unsigned int i)
Advance by a certain amount.
MessageIterator()
Constructor.
bool try_lock()
Try to lock message queue.
void flush()
Delete all messages from queue.
MessageAlreadyQueuedException()
Constructor.
void lock()
Lock message queue.
void pop()
Erase first message from queue.
void unlock()
Unlock message queue.
void unlock()
Unlock the mutex.
unsigned int id() const
Get ID of current element or 0 if element is end.
unsigned int size() const
Get number of messages in queue.
Message * operator->() const
Act on current message.
MessageIterator end()
Get iterator to element beyond end of message queue list.
void append(Message *msg)
Append message to queue.
MessageIterator & operator++()
Increment iterator.
void remove(const Message *msg)
Remove message from queue.
Message * first()
Get first message from queue.
void insert_after(const MessageIterator &it, Message *msg)
Enqueue message after given iterator.
MessageIterator & operator+(unsigned int i)
Advance by a certain amount.
virtual ~MessageQueue()
Destructor.
bool operator!=(const MessageIterator &c) const
Check inequality of two iterators.
bool try_lock()
Tries to lock the mutex.
MessageQueue()
Constructor.
MessageIterator & operator=(const MessageIterator &c)
Assign iterator.
MessageIterator begin()
Get iterator to first element in message queue.
bool operator==(const MessageIterator &c) const
Check equality of two iterators.
Message * operator*() const
Get memory pointer of chunk.