bus.c (733B)
1 #include <stdlib.h> 2 3 #include "cell.h" 4 #include "bus.h" 5 6 Bus * 7 createbus(void) { 8 Bus *new = calloc(sizeof(Bus), 1); 9 return new; 10 } 11 12 void 13 buspush(Bus *bus, Msg *msg) 14 { 15 /* TODO: free msg if it's not NULL before overwriting */ 16 bus->buf[bus->n%BusBufMax] = msg; 17 bus->n++; 18 } 19 20 Msg * 21 buspull(Bus *bus, int dst) 22 { 23 int i; 24 Msg *msg = NULL; 25 for (i = 0; i < BusBufMax; i++) { 26 msg = bus->buf[i]; 27 if (msg == NULL) continue; 28 if (msg->dst == dst) { 29 bus->buf[i] = NULL; 30 return msg; 31 } 32 } 33 return NULL; 34 } 35 36 Msg * 37 createmsg(int src, int dst, Cell *dat) 38 { 39 Msg *new = malloc(sizeof(Msg)); 40 new->src = src; 41 new->dst = dst; 42 new->dat = dat; 43 return new; 44 } 45 46 void 47 freemsg(Msg *msg) 48 { 49 if (msg != NULL) freecell(msg->dat); 50 free(msg); 51 } 52