74 lines · 976 B · C
RawDownload
#include <u.h>#include <libc.h>#include <bst.h>#include <thread.h>#include <bstwalk.h> typedef struct Intnode {	Bst;	int v;} Intnode; enum {	MAX =  1000,	NODES = 100}; Intnode pool[NODES]; intintcmp(Bst *a, Bst *b){	Intnode *an, *bn; 	an = (Intnode*)a;	bn = (Intnode*)b; 	if(an->v < bn->v)		return -1;	if(an->v > bn->v)		return 1;	return 0;}  voidthreadmain(int argc, char **argv){	Bsttree *t;	Intnode *a, *sp, *ep, s, e;	Channel *c; 	t = nil;	ARGBEGIN {	case 'a':		t = bstcreateavl(intcmp);		break;	case 'l':		t = bstcreatellrb(intcmp);		break;	} ARGEND	if(t == nil)		t = bstcreateavl(intcmp); 	sp = nil;	ep = nil;	if(argc == 2) {		s.v = strtol(argv[0], nil, 10);		sp = &s;		e.v = strtol(argv[1], nil, 10);		ep = &e;	} 	srand(time(nil)); 	for(a = pool; a < pool+nelem(pool); a++) {		a->v = nrand(MAX);		bstinsert(t, a);	} 	c = bstwalk(t, sp, ep, IN);	while((a = recvp(c)) != nil)		print("%d ", a->v);	chanfree(c);}