1 #include <stdlib.h>
2 #include "qmsim.h"
4 /*-------------------Simulator part ---------------*/
6 void dumpq(Q* q)
7 {
8 printf("QDUMP: %d %d %d %d\n",q->size, q->ne, q->head,q->tail);
9 }
10 void qsim_close(Q * q)
11 {
12 if (!q) return;
13 if (q->q) free(q->q);
14 free(q);
15 printf("QSIM: freeing queue\n");
16 }
18 Q * qsim_create(nelem)
19 {
20 void *p;
21 Q * q;
22 if (!nelem) return NULL;
23 q = (Q*) calloc(1,sizeof(Q));
24 if (!q) return NULL;
26 p = (void **) calloc(nelem,sizeof(void *));
27 if (!p) { free(q); return NULL; }
29 q->size=nelem;
30 q->q = p ;
31 printf("QSIM CREATE .. "); dumpq(q);
32 return q;
33 }
35 int qsim_push(Q *q, void *p)
36 {
37 if (!q) return -1;
38 if (q->ne >= q->size) return-1;
39 q->q[q->tail] = p;
40 q->tail +=1;
41 q->ne+=1;
42 if (q->tail >= q->size) q->tail = 0;
43 //dumpq(q);
44 return 1;
45 }
46 void * qsim_pop(Q *q )
47 {
48 void * val;
49 if (!q) return NULL;
50 if (q->ne ==0) return NULL;
51 val = q->q[q->head];
52 q->head+=1;
53 if(q->head>= q->size) q->head=0;
54 q->ne -=1;
55 //dumpq(q);
56 return val;
57 }
59 //#define TEST_QSIM
60 #ifdef TEST_QSIM
61 main()
62 {
63 Q * q;
64 int i;
65 q= qsim_create(10);
66 for(i=1;i<11;i++) qsim_push(q, (void *) i);
68 for(;i<16;i++) { void * val; val = qsim_pop(q); printf("%d\n", (int) val);}
69 for(;i<21;i++) qsim_push(q, (void *) i);
70 for(;i<31;i++) { void * val; val = qsim_pop(q); printf("%d\n", (int) val);}
71 }
72 #endif