vsm

virtual stack machine for plan9
git clone git://nsmpr.xyz/vsm.git
Log | Files | Refs

mem.c (666B)


      1 #include <u.h>
      2 #include <libc.h>
      3 
      4 #include "vsm.h"
      5 
      6 int
      7 _mapget(int id, Mapentry **m)
      8 {
      9 	/* TODO: binary search */
     10 	int i;
     11 	for (i = 0; (i < mapsize) && (map[i].id <= id); i++) {
     12 		if (map[i].id == id) {
     13 			*m = map + i;
     14 			return i;
     15 		}
     16 	}
     17 	*m = nil;
     18 	return i;
     19 }
     20 
     21 void *
     22 mapget(int id)
     23 {
     24 	Mapentry *m;
     25 	_mapget(id, &m);
     26 	if (m != nil) return m->vp;
     27 	return nil;
     28 }
     29 
     30 void
     31 mapset(int id, void *vp)
     32 {
     33 	int n;
     34 	Mapentry *m;
     35 
     36 	n = _mapget(id, &m);
     37 
     38 	if (m != nil) {
     39 		m->vp = vp;
     40 		return;
     41 	}
     42 
     43 	mapsize++;
     44 	map = realloc(map, sizeof(Mapentry) * mapsize);
     45 	memcpy(map + n, map + n + 1, sizeof(Mapentry) * (mapsize - n - 1));
     46 	map[n].id = id;
     47 	map[n].vp = vp;
     48 
     49 	return;
     50 }