This is the initial commit.
[keystone-rtos/netapi.git] / ti / runtime / netapi / test / qmsim.c
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);
67  
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