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 }