#include #include #include #include /* replace a in t with b, the line structure in b is lost, c'est la vie */ Ndbtuple* ndbsubstitute(Ndbtuple *t, Ndbtuple *a, Ndbtuple *b) { Ndbtuple *nt; if(a == b) return t; if(b == nil) return ndbdiscard(t, a); /* all pointers to a become pointers to b */ for(nt = t; nt != nil; nt = nt->entry){ if(nt->line == a) nt->line = b; if(nt->entry == a) nt->entry = b; } /* end of b chain points to a's successors */ for(nt = b; nt->entry; nt = nt->entry){ nt->line = nt->entry; } nt->line = a->line; nt->entry = a->entry; a->entry = nil; ndbfree(a); if(a == t) return b; else return t; }