fix bug crash after 3 minutes
Dependencies: BLE_API MbedJSONValue mbed nRF51822
Fork of BLE_RedBearNano-SAndroidE by
Queue.h
- Committer:
- giowild
- Date:
- 2017-07-24
- Revision:
- 2:6c45738bba43
File content as of revision 2:6c45738bba43:
// downloaded from: https://gist.github.com/ArnonEilat/4471278 #include <stdlib.h> #include <stdio.h> #define TRUE 1 #define FALSE 0 #define QUEUE_STRING_LENGTH 40 /* a link in the queue, holds the info and point to the next Node*/ typedef struct { int length; char payload[QUEUE_STRING_LENGTH-1]; // null-terminated string, max 256 characters long, this may be JSON or any other format, depending on the application } DATA; typedef struct Node_t { DATA data; struct Node_t *prev; } NODE; /* the HEAD of the Queue, hold the amount of node's that are in the queue*/ typedef struct Queue { NODE *head; NODE *tail; int size; int limit; } Queue; Queue *ConstructQueue(int limit); void DestructQueue(Queue *queue); int Enqueue(Queue *pQueue, NODE *item); NODE *Dequeue(Queue *pQueue); int isEmpty(Queue* pQueue); Queue *ConstructQueue(int limit) { Queue *queue = (Queue*) malloc(sizeof (Queue)); if (queue == NULL) { return NULL; } if (limit <= 0) { limit = 65535; } queue->limit = limit; queue->size = 0; queue->head = NULL; queue->tail = NULL; return queue; } void DestructQueue(Queue *queue) { NODE *pN; while (!isEmpty(queue)) { pN = Dequeue(queue); free(pN); } free(queue); } int Enqueue(Queue *pQueue, NODE *item) { /* Bad parameter */ if ((pQueue == NULL) || (item == NULL)) { return FALSE; } // if(pQueue->limit != 0) if (pQueue->size >= pQueue->limit) { return FALSE; } /*the queue is empty*/ item->prev = NULL; if (pQueue->size == 0) { pQueue->head = item; pQueue->tail = item; } else { /*adding item to the end of the queue*/ pQueue->tail->prev = item; pQueue->tail = item; } pQueue->size++; return TRUE; } NODE * Dequeue(Queue *pQueue) { /*the queue is empty or bad param*/ NODE *item; if (isEmpty(pQueue)) return NULL; item = pQueue->head; pQueue->head = (pQueue->head)->prev; pQueue->size--; return item; } int isEmpty(Queue* pQueue) { if (pQueue == NULL) { return FALSE; } if (pQueue->size == 0) { return TRUE; } else { return FALSE; } } /* int main() { int i; Queue *pQ = ConstructQueue(7); NODE *pN; for (i = 0; i < 9; i++) { pN = (NODE*) malloc(sizeof (NODE)); pN->data.info = 100 + i; Enqueue(pQ, pN); } while (!isEmpty(pQ)) { pN = Dequeue(pQ); printf("\nDequeued: %d", pN->data); free(pN); } DestructQueue(pQ); return (EXIT_SUCCESS); } */