1*95a264b3SDavid du Colombier #include <u.h> 2*95a264b3SDavid du Colombier #include <libc.h> 3*95a264b3SDavid du Colombier #include <bio.h> 4*95a264b3SDavid du Colombier #include <ndb.h> 5*95a264b3SDavid du Colombier 6*95a264b3SDavid du Colombier /* 7*95a264b3SDavid du Colombier * reorder the tuple to put x's line first in the entry and x fitst in its line 8*95a264b3SDavid du Colombier */ 9*95a264b3SDavid du Colombier Ndbtuple* ndbreorder(Ndbtuple * t,Ndbtuple * x)10*95a264b3SDavid du Colombierndbreorder(Ndbtuple *t, Ndbtuple *x) 11*95a264b3SDavid du Colombier { 12*95a264b3SDavid du Colombier Ndbtuple *nt; 13*95a264b3SDavid du Colombier Ndbtuple *last, *prev; 14*95a264b3SDavid du Colombier 15*95a264b3SDavid du Colombier /* if x is first, we're done */ 16*95a264b3SDavid du Colombier if(x == t) 17*95a264b3SDavid du Colombier return t; 18*95a264b3SDavid du Colombier 19*95a264b3SDavid du Colombier /* find end of x's line */ 20*95a264b3SDavid du Colombier for(last = x; last->line == last->entry; last = last->line) 21*95a264b3SDavid du Colombier ; 22*95a264b3SDavid du Colombier 23*95a264b3SDavid du Colombier /* rotate to make this line first */ 24*95a264b3SDavid du Colombier if(last->line != t){ 25*95a264b3SDavid du Colombier 26*95a264b3SDavid du Colombier /* detach this line and everything after it from the entry */ 27*95a264b3SDavid du Colombier for(nt = t; nt->entry != last->line; nt = nt->entry) 28*95a264b3SDavid du Colombier ; 29*95a264b3SDavid du Colombier nt->entry = nil; 30*95a264b3SDavid du Colombier 31*95a264b3SDavid du Colombier /* switch */ 32*95a264b3SDavid du Colombier for(nt = last; nt->entry != nil; nt = nt->entry) 33*95a264b3SDavid du Colombier ; 34*95a264b3SDavid du Colombier nt->entry = t; 35*95a264b3SDavid du Colombier } 36*95a264b3SDavid du Colombier 37*95a264b3SDavid du Colombier /* rotate line to make x first */ 38*95a264b3SDavid du Colombier if(x != last->line){ 39*95a264b3SDavid du Colombier 40*95a264b3SDavid du Colombier /* find entry before x */ 41*95a264b3SDavid du Colombier for(prev = last; prev->line != x; prev = prev->line); 42*95a264b3SDavid du Colombier ; 43*95a264b3SDavid du Colombier 44*95a264b3SDavid du Colombier /* detach line */ 45*95a264b3SDavid du Colombier nt = last->entry; 46*95a264b3SDavid du Colombier last->entry = last->line; 47*95a264b3SDavid du Colombier 48*95a264b3SDavid du Colombier /* reattach */ 49*95a264b3SDavid du Colombier prev->entry = nt; 50*95a264b3SDavid du Colombier } 51*95a264b3SDavid du Colombier 52*95a264b3SDavid du Colombier return x; 53*95a264b3SDavid du Colombier } 54