vsm2

exeprimental virtual stack machine for *nix
Log | Files | Refs

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