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