|
|
1.1 root 1: #ifndef lint
2: static char *sccsid = "@(#)lookup.c 1.3 (Berkeley) 11/2/81";
3: #endif lint
4:
5: #include "gprof.h"
6:
7: /*
8: * look up an address in a sorted-by-address namelist
9: * this deals with misses by mapping them to the next lower
10: * entry point.
11: */
12: nltype *
13: nllookup( address )
14: unsigned long address;
15: {
16: register long low;
17: register long middle;
18: register long high;
19: # ifdef DEBUG
20: register int probes;
21:
22: probes = 0;
23: # endif DEBUG
24: for ( low = 0 , high = nname - 1 ; low != high ; ) {
25: # ifdef DEBUG
26: probes += 1;
27: # endif DEBUG
28: middle = ( high + low ) >> 1;
29: if ( nl[ middle ].value <= address && nl[ middle+1 ].value > address ) {
30: # ifdef DEBUG
31: if ( debug & LOOKUPDEBUG ) {
32: printf( "[nllookup] %d (%d) probes\n" , probes , nname-1 );
33: }
34: # endif DEBUG
35: return &nl[ middle ];
36: }
37: if ( nl[ middle ].value > address ) {
38: high = middle;
39: } else {
40: low = middle + 1;
41: }
42: }
43: fprintf( stderr , "[nllookup] binary search fails???\n" );
44: return 0;
45: }
46:
47: arctype *
48: arclookup( parentp , childp )
49: nltype *parentp;
50: nltype *childp;
51: {
52: arctype *arcp;
53:
54: if ( parentp == 0 || childp == 0 ) {
55: fprintf( "[arclookup] parentp == 0 || childp == 0\n" );
56: return 0;
57: }
58: # ifdef DEBUG
59: if ( debug & LOOKUPDEBUG ) {
60: printf( "[arclookup] parent %s child %s\n" ,
61: parentp -> name , childp -> name );
62: }
63: # endif DEBUG
64: for ( arcp = parentp -> children ; arcp ; arcp = arcp -> arc_childlist ) {
65: # ifdef DEBUG
66: if ( debug & LOOKUPDEBUG ) {
67: printf( "[arclookup]\t arc_parent %s arc_child %s\n" ,
68: arcp -> arc_parentp -> name ,
69: arcp -> arc_childp -> name );
70: }
71: # endif DEBUG
72: if ( arcp -> arc_childp == childp ) {
73: return arcp;
74: }
75: }
76: return 0;
77: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.