Blame


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>
5 d957951b 2005-02-11 devnull
6 d957951b 2005-02-11 devnull /*
7 d957951b 2005-02-11 devnull * reorder the tuple to put x's line first in the entry and x fitst in its line
8 d957951b 2005-02-11 devnull */
9 d957951b 2005-02-11 devnull Ndbtuple*
10 d957951b 2005-02-11 devnull ndbreorder(Ndbtuple *t, Ndbtuple *x)
11 d957951b 2005-02-11 devnull {
12 d957951b 2005-02-11 devnull Ndbtuple *nt;
13 d957951b 2005-02-11 devnull Ndbtuple *last, *prev;
14 d957951b 2005-02-11 devnull
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;
18 d957951b 2005-02-11 devnull
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)
21 d957951b 2005-02-11 devnull ;
22 d957951b 2005-02-11 devnull
23 d957951b 2005-02-11 devnull /* rotate to make this line first */
24 d957951b 2005-02-11 devnull if(last->line != t){
25 d957951b 2005-02-11 devnull
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)
28 d957951b 2005-02-11 devnull ;
29 d957951b 2005-02-11 devnull nt->entry = nil;
30 fa325e9b 2020-01-10 cross
31 d957951b 2005-02-11 devnull /* switch */
32 d957951b 2005-02-11 devnull for(nt = last; nt->entry != nil; nt = nt->entry)
33 d957951b 2005-02-11 devnull ;
34 d957951b 2005-02-11 devnull nt->entry = t;
35 d957951b 2005-02-11 devnull }
36 d957951b 2005-02-11 devnull
37 d957951b 2005-02-11 devnull /* rotate line to make x first */
38 d957951b 2005-02-11 devnull if(x != last->line){
39 d957951b 2005-02-11 devnull
40 d957951b 2005-02-11 devnull /* find entry before x */
41 6c7443a6 2014-10-21 0intro for(prev = last; prev->line != x; prev = prev->line)
42 d957951b 2005-02-11 devnull ;
43 d957951b 2005-02-11 devnull
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;
47 d957951b 2005-02-11 devnull
48 d957951b 2005-02-11 devnull /* reattach */
49 d957951b 2005-02-11 devnull prev->entry = nt;
50 d957951b 2005-02-11 devnull }
51 d957951b 2005-02-11 devnull
52 d957951b 2005-02-11 devnull return x;
53 d957951b 2005-02-11 devnull }