1 d957951b 2005-02-11 devnull #include <u.h>
2 d957951b 2005-02-11 devnull #include <libc.h>
3 d957951b 2005-02-11 devnull #include <bio.h>
4 d957951b 2005-02-11 devnull #include <ndb.h>
7 d957951b 2005-02-11 devnull * reorder the tuple to put x's line first in the entry and x fitst in its line
10 d957951b 2005-02-11 devnull ndbreorder(Ndbtuple *t, Ndbtuple *x)
12 d957951b 2005-02-11 devnull Ndbtuple *nt;
13 d957951b 2005-02-11 devnull Ndbtuple *last, *prev;
15 d957951b 2005-02-11 devnull /* if x is first, we're done */
16 d957951b 2005-02-11 devnull if(x == t)
17 d957951b 2005-02-11 devnull return t;
19 d957951b 2005-02-11 devnull /* find end of x's line */
20 d957951b 2005-02-11 devnull for(last = x; last->line == last->entry; last = last->line)
23 d957951b 2005-02-11 devnull /* rotate to make this line first */
24 d957951b 2005-02-11 devnull if(last->line != t){
26 d957951b 2005-02-11 devnull /* detach this line and everything after it from the entry */
27 d957951b 2005-02-11 devnull for(nt = t; nt->entry != last->line; nt = nt->entry)
29 d957951b 2005-02-11 devnull nt->entry = nil;
31 d957951b 2005-02-11 devnull /* switch */
32 d957951b 2005-02-11 devnull for(nt = last; nt->entry != nil; nt = nt->entry)
34 d957951b 2005-02-11 devnull nt->entry = t;
37 d957951b 2005-02-11 devnull /* rotate line to make x first */
38 d957951b 2005-02-11 devnull if(x != last->line){
40 d957951b 2005-02-11 devnull /* find entry before x */
41 d957951b 2005-02-11 devnull for(prev = last; prev->line != x; prev = prev->line);
44 d957951b 2005-02-11 devnull /* detach line */
45 d957951b 2005-02-11 devnull nt = last->entry;
46 d957951b 2005-02-11 devnull last->entry = last->line;
48 d957951b 2005-02-11 devnull /* reattach */
49 d957951b 2005-02-11 devnull prev->entry = nt;
52 d957951b 2005-02-11 devnull return x;