1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
26 #include "oic_malloc.h"
30 * @brief Number of messages in the queue
36 * @brief Logging tag for module name
38 #define TAG PCF("UQUEUE")
40 u_queue_t *u_queue_create()
42 u_queue_t *queuePtr = (u_queue_t *) OICMalloc(sizeof(u_queue_t));
45 OIC_LOG(DEBUG, TAG, "QueueCreate FAIL");
49 queuePtr->count = NO_MESSAGES;
50 queuePtr->element = NULL;
55 CAResult_t u_queue_add_element(u_queue_t *queue, u_queue_message_t *message)
57 u_queue_element *element = NULL;
58 u_queue_element *ptr = NULL;
62 OIC_LOG(DEBUG, TAG, "QueueAddElement FAIL, Invalid Queue");
63 return CA_STATUS_FAILED;
68 OIC_LOG(DEBUG, TAG, "QueueAddElement : FAIL, NULL Message");
69 return CA_STATUS_FAILED;
72 element = (u_queue_element *) OICMalloc(sizeof(u_queue_element));
75 OIC_LOG(DEBUG, TAG, "QueueAddElement FAIL, memory allocation failed");
76 return CA_MEMORY_ALLOC_FAILED;
79 element->message = message;
86 while (NULL != ptr->next)
94 OIC_LOG_V(DEBUG, TAG, "Queue Count : %d", queue->count);
98 if (NO_MESSAGES != queue->count)
100 OIC_LOG(DEBUG, TAG, "QueueAddElement : FAIL, count is not zero");
102 /* error in queue, free the allocated memory*/
104 return CA_STATUS_FAILED;
107 queue->element = element;
109 OIC_LOG_V(DEBUG, TAG, "Queue Count : %d", queue->count);
117 u_queue_message_t *u_queue_get_element(u_queue_t *queue)
119 u_queue_element *next = NULL;
120 u_queue_element *element = NULL;
121 u_queue_message_t *message = NULL;
125 OIC_LOG(DEBUG, TAG, "QueueAddElement FAIL, Invalid Queue");
129 element = queue->element;
133 OIC_LOG(DEBUG, TAG, "QueueGetElement : empty, no messages");
137 next = element->next;
138 queue->element = next;
141 message = element->message;
146 CAResult_t u_queue_remove_element(u_queue_t *queue)
148 u_queue_element *next = NULL;
149 u_queue_element *remove = NULL;
153 OIC_LOG(DEBUG, TAG, "QueueRemoveElement FAIL, Invalid Queue");
154 return CA_STATUS_FAILED;
157 remove = queue->element;
161 OIC_LOG(DEBUG, TAG, "QueueRemoveElement : no messages");
167 OICFree(remove->message);
170 queue->element = next;
176 uint32_t u_queue_get_size(u_queue_t *queue)
180 OIC_LOG(DEBUG, TAG, "QueueGetSize FAIL, Invalid Queue");
187 CAResult_t u_queue_reset(u_queue_t *queue)
189 CAResult_t error = CA_STATUS_FAILED;
193 OIC_LOG(DEBUG, TAG, "QueueReset FAIL, Invalid Queue");
194 return CA_STATUS_FAILED;
197 if (NO_MESSAGES == queue->count)
199 OIC_LOG(DEBUG, TAG, "QueueReset, no elements in the queue");
203 while (NULL != queue->element)
205 error = u_queue_remove_element(queue);
206 if (error == CA_STATUS_FAILED)
210 if (NO_MESSAGES != queue->count)
212 OIC_LOG(DEBUG, TAG, "QueueReset : FAIL, count is non zero");
213 return CA_STATUS_FAILED;
220 CAResult_t u_queue_delete(u_queue_t *queue)
222 CAResult_t error = CA_STATUS_FAILED;
226 OIC_LOG(DEBUG, TAG, "QueueDelete FAIL, Invalid Queue");
227 return CA_STATUS_FAILED;
230 error = u_queue_reset(queue);
231 if (error != CA_STATUS_OK)
233 OIC_LOG(DEBUG, TAG, "QueueDelete : FAIL, error in QueueReset");
238 return (CA_STATUS_OK);
241 u_queue_message_t *u_queue_get_head(u_queue_t *queue)
245 OIC_LOG(DEBUG, TAG, "QueueGetHead FAIL, Invalid Queue");
249 if (NULL == queue->element)
251 OIC_LOG(DEBUG, TAG, "QueueGetHead : no messages in queue");
254 return queue->element->message;