adding a test case
[IRC.git] / Robust / src / Runtime / DSTM / interface / machinepile.c
1 #include "machinepile.h"
2
3 void insertPile(int mid, unsigned int oid, int siteid, short numoffset, short *offset, prefetchpile_t **head) {
4   prefetchpile_t *ptr;
5   objpile_t *objnode;
6   unsigned int *oidarray;
7   objpile_t **tmp;
8
9   //Loop through the machines
10   for(; 1; head=&((*head)->next)) {
11     int tmid;
12     if ((*head)==NULL||(tmid=(*head)->mid)>mid) {
13       prefetchpile_t * tmp = (prefetchpile_t *) malloc(sizeof(prefetchpile_t));
14       tmp->mid = mid;
15       objnode =  malloc(sizeof(objpile_t));
16       objnode->offset = offset;
17       objnode->oid = oid;
18       objnode->numoffset = numoffset;
19       objnode->siteid = siteid;
20       objnode->next = NULL;
21       tmp->objpiles = objnode;
22       tmp->next = *head;
23       *head=tmp;
24       return;
25     }
26
27     //keep looking
28     if (tmid < mid)
29       continue;
30
31     //found mid list
32     for(tmp=&((*head)->objpiles); 1; tmp=&((*tmp)->next)) {
33       int toid;
34       int matchstatus;
35
36       if ((*tmp)==NULL||((toid=(*tmp)->oid)>oid)) {
37         objnode = (objpile_t *) malloc(sizeof(objpile_t));
38         objnode->offset = offset;
39         objnode->oid = oid;
40         objnode->numoffset = numoffset;
41         objnode->siteid = siteid;
42         objnode->next = *tmp;
43         *tmp = objnode;
44         return;
45       }
46       if (toid < oid)
47         continue;
48
49       /* Fill objpiles DS */
50       int i;
51       int onumoffset=(*tmp)->numoffset;
52       short * ooffset=(*tmp)->offset;
53
54       for(i=0; i<numoffset; i++) {
55         if (i>onumoffset) {
56           //We've matched, let's just extend the current prefetch
57           (*tmp)->numoffset=numoffset;
58           (*tmp)->offset=offset;
59           return;
60         }
61         if (ooffset[i]<offset[i]) {
62           goto oidloop;
63         } else if (ooffset[i]>offset[i]) {
64           //Place item before the current one
65           objnode = (objpile_t *) malloc(sizeof(objpile_t));
66           objnode->offset = offset;
67           objnode->oid = oid;
68           objnode->numoffset = numoffset;
69           objnode->siteid = siteid;
70           objnode->next = *tmp;
71           *tmp = objnode;
72           return;
73         }
74       }
75       //if we get to the end, we're already covered by this prefetch
76       return;
77 oidloop:
78       ;
79     }
80   }
81
82
83 }