2 6f4d00ee 2013-09-23 0intro * Generic traversal routines.
5 6f4d00ee 2013-09-23 0intro #include "stdinc.h"
6 6f4d00ee 2013-09-23 0intro #include "dat.h"
7 6f4d00ee 2013-09-23 0intro #include "fns.h"
9 6f4d00ee 2013-09-23 0intro static uint
10 6f4d00ee 2013-09-23 0intro etype(Entry *e)
14 4b576658 2013-09-23 0intro if(e->flags&_VtEntryDir)
15 6f4d00ee 2013-09-23 0intro t = BtDir;
17 6f4d00ee 2013-09-23 0intro t = BtData;
18 6f4d00ee 2013-09-23 0intro return t+e->depth;
22 6f4d00ee 2013-09-23 0intro initWalk(WalkPtr *w, Block *b, uint size)
24 6f4d00ee 2013-09-23 0intro memset(w, 0, sizeof *w);
25 6f4d00ee 2013-09-23 0intro switch(b->l.type){
26 6f4d00ee 2013-09-23 0intro case BtData:
29 6f4d00ee 2013-09-23 0intro case BtDir:
30 6f4d00ee 2013-09-23 0intro w->data = b->data;
31 6f4d00ee 2013-09-23 0intro w->m = size / VtEntrySize;
32 6f4d00ee 2013-09-23 0intro w->isEntry = 1;
36 6f4d00ee 2013-09-23 0intro w->data = b->data;
37 6f4d00ee 2013-09-23 0intro w->m = size / VtScoreSize;
38 6f4d00ee 2013-09-23 0intro w->type = b->l.type;
39 6f4d00ee 2013-09-23 0intro w->tag = b->l.tag;
45 6f4d00ee 2013-09-23 0intro nextWalk(WalkPtr *w, uchar score[VtScoreSize], uchar *type, u32int *tag, Entry **e)
47 6f4d00ee 2013-09-23 0intro if(w->n >= w->m)
50 6f4d00ee 2013-09-23 0intro if(w->isEntry){
51 6f4d00ee 2013-09-23 0intro *e = &w->e;
52 6f4d00ee 2013-09-23 0intro entryUnpack(&w->e, w->data, w->n);
53 6f4d00ee 2013-09-23 0intro memmove(score, w->e.score, VtScoreSize);
54 6f4d00ee 2013-09-23 0intro *type = etype(&w->e);
55 6f4d00ee 2013-09-23 0intro *tag = w->e.tag;
58 6f4d00ee 2013-09-23 0intro memmove(score, w->data+w->n*VtScoreSize, VtScoreSize);
59 6f4d00ee 2013-09-23 0intro *type = w->type-1;
60 6f4d00ee 2013-09-23 0intro *tag = w->tag;