manu jose
/
1hourMaster
Master 1 hr . takes input form the serial connection of PC
pqueue.h@0:219eacd4c264, 2010-12-04 (annotated)
- Committer:
- manujose
- Date:
- Sat Dec 04 06:10:16 2010 +0000
- Revision:
- 0:219eacd4c264
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
manujose | 0:219eacd4c264 | 1 | #ifndef _PQUEUE_H_ |
manujose | 0:219eacd4c264 | 2 | #define _PQUEUE_H_ |
manujose | 0:219eacd4c264 | 3 | |
manujose | 0:219eacd4c264 | 4 | typedef struct prioQueueEle { |
manujose | 0:219eacd4c264 | 5 | timeval t; |
manujose | 0:219eacd4c264 | 6 | void (*foo)(void); |
manujose | 0:219eacd4c264 | 7 | int sched; |
manujose | 0:219eacd4c264 | 8 | struct prioQueueEle *next; |
manujose | 0:219eacd4c264 | 9 | }qEle; |
manujose | 0:219eacd4c264 | 10 | typedef struct prioQueue { |
manujose | 0:219eacd4c264 | 11 | int numEle; |
manujose | 0:219eacd4c264 | 12 | qEle *head; |
manujose | 0:219eacd4c264 | 13 | |
manujose | 0:219eacd4c264 | 14 | }pQueue; |
manujose | 0:219eacd4c264 | 15 | |
manujose | 0:219eacd4c264 | 16 | |
manujose | 0:219eacd4c264 | 17 | |
manujose | 0:219eacd4c264 | 18 | int enqueue(pQueue *xP, timeval t, void (*schedFunc)(void)) { |
manujose | 0:219eacd4c264 | 19 | if (xP->numEle == QUEUE_MAX) |
manujose | 0:219eacd4c264 | 20 | return 0; //ERROR reached max . |
manujose | 0:219eacd4c264 | 21 | |
manujose | 0:219eacd4c264 | 22 | xP->numEle++; |
manujose | 0:219eacd4c264 | 23 | qEle *newEle = (qEle*)malloc(sizeof(qEle)); |
manujose | 0:219eacd4c264 | 24 | newEle->t.tv_sec = t.tv_sec; |
manujose | 0:219eacd4c264 | 25 | newEle->t.tv_usec = t.tv_usec; |
manujose | 0:219eacd4c264 | 26 | newEle->foo = schedFunc; |
manujose | 0:219eacd4c264 | 27 | newEle->sched = 0; |
manujose | 0:219eacd4c264 | 28 | newEle->next = NULL; |
manujose | 0:219eacd4c264 | 29 | if (xP->head == NULL) { //first ele; |
manujose | 0:219eacd4c264 | 30 | xP->head = newEle; |
manujose | 0:219eacd4c264 | 31 | return 1; |
manujose | 0:219eacd4c264 | 32 | } else { |
manujose | 0:219eacd4c264 | 33 | if ((xP->head->t.tv_sec > t.tv_sec) || |
manujose | 0:219eacd4c264 | 34 | ((xP->head->t.tv_sec == t.tv_sec ) && (xP->head->t.tv_usec > t.tv_usec)) ) { |
manujose | 0:219eacd4c264 | 35 | newEle->next = xP->head; |
manujose | 0:219eacd4c264 | 36 | xP->head = newEle; |
manujose | 0:219eacd4c264 | 37 | |
manujose | 0:219eacd4c264 | 38 | return 1; |
manujose | 0:219eacd4c264 | 39 | } else if (xP->head->next == NULL) { |
manujose | 0:219eacd4c264 | 40 | xP->head->next = newEle; |
manujose | 0:219eacd4c264 | 41 | return 1; |
manujose | 0:219eacd4c264 | 42 | } |
manujose | 0:219eacd4c264 | 43 | } |
manujose | 0:219eacd4c264 | 44 | qEle *e = xP->head; |
manujose | 0:219eacd4c264 | 45 | while (e->next->next !=NULL) { |
manujose | 0:219eacd4c264 | 46 | if ((e->next->t.tv_sec > t.tv_sec) || |
manujose | 0:219eacd4c264 | 47 | ((e->next->t.tv_sec == t.tv_sec) && (e->next->t.tv_usec > t.tv_usec)) ) { |
manujose | 0:219eacd4c264 | 48 | newEle->next = e->next; |
manujose | 0:219eacd4c264 | 49 | e->next = newEle; |
manujose | 0:219eacd4c264 | 50 | return 1; |
manujose | 0:219eacd4c264 | 51 | } |
manujose | 0:219eacd4c264 | 52 | e= e->next; |
manujose | 0:219eacd4c264 | 53 | } |
manujose | 0:219eacd4c264 | 54 | e->next->next = newEle; |
manujose | 0:219eacd4c264 | 55 | return 1; |
manujose | 0:219eacd4c264 | 56 | } |
manujose | 0:219eacd4c264 | 57 | |
manujose | 0:219eacd4c264 | 58 | |
manujose | 0:219eacd4c264 | 59 | |
manujose | 0:219eacd4c264 | 60 | |
manujose | 0:219eacd4c264 | 61 | qEle* pop(pQueue *xP) { |
manujose | 0:219eacd4c264 | 62 | qEle *p = xP->head; |
manujose | 0:219eacd4c264 | 63 | xP->head = p->next; |
manujose | 0:219eacd4c264 | 64 | xP->numEle--; |
manujose | 0:219eacd4c264 | 65 | return p; |
manujose | 0:219eacd4c264 | 66 | // free(p); |
manujose | 0:219eacd4c264 | 67 | } |
manujose | 0:219eacd4c264 | 68 | |
manujose | 0:219eacd4c264 | 69 | #endif |