xref: /inferno-os/appl/lib/strinttab.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsythimplement StringIntTab;
2*37da2899SCharles.Forsyth
3*37da2899SCharles.Forsythinclude "strinttab.m";
4*37da2899SCharles.Forsyth
5*37da2899SCharles.Forsythlookup(t: array of StringInt, key: string) : (int, int)
6*37da2899SCharles.Forsyth{
7*37da2899SCharles.Forsyth	min := 0;
8*37da2899SCharles.Forsyth	max := len t-1;
9*37da2899SCharles.Forsyth	while(min <= max){
10*37da2899SCharles.Forsyth		try := (min+max)/2;
11*37da2899SCharles.Forsyth		if(t[try].key < key)
12*37da2899SCharles.Forsyth			min = try+1;
13*37da2899SCharles.Forsyth		else if(t[try].key > key)
14*37da2899SCharles.Forsyth			max = try-1;
15*37da2899SCharles.Forsyth		else
16*37da2899SCharles.Forsyth			return (1, t[try].val);
17*37da2899SCharles.Forsyth	}
18*37da2899SCharles.Forsyth	return (0, 0);
19*37da2899SCharles.Forsyth}
20*37da2899SCharles.Forsyth
21*37da2899SCharles.Forsythrevlookup(t: array of StringInt, val: int) : string
22*37da2899SCharles.Forsyth{
23*37da2899SCharles.Forsyth	n := len t;
24*37da2899SCharles.Forsyth	for(i:=0; i < n; i++)
25*37da2899SCharles.Forsyth		if(t[i].val == val)
26*37da2899SCharles.Forsyth			return t[i].key;
27*37da2899SCharles.Forsyth	return nil;
28*37da2899SCharles.Forsyth}
29