|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1983 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that: (1) source distributions retain this entire copyright ! 7: * notice and comment, and (2) distributions including binaries display ! 8: * the following acknowledgement: ``This product includes software ! 9: * developed by the University of California, Berkeley and its contributors'' ! 10: * in the documentation or other materials provided with the distribution ! 11: * and in all advertising materials mentioning features or use of this ! 12: * software. Neither the name of the University nor the names of its ! 13: * contributors may be used to endorse or promote products derived ! 14: * from this software without specific prior written permission. ! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: */ ! 19: ! 20: #ifndef lint ! 21: static char sccsid[] = "@(#)lookup.c 5.4 (Berkeley) 6/1/90"; ! 22: #endif /* not lint */ ! 23: ! 24: #include "gprof.h" ! 25: ! 26: /* ! 27: * look up an address in a sorted-by-address namelist ! 28: * this deals with misses by mapping them to the next lower ! 29: * entry point. ! 30: */ ! 31: nltype * ! 32: nllookup( address ) ! 33: unsigned long address; ! 34: { ! 35: register long low; ! 36: register long middle; ! 37: register long high; ! 38: # ifdef DEBUG ! 39: register int probes; ! 40: ! 41: probes = 0; ! 42: # endif DEBUG ! 43: for ( low = 0 , high = nname - 1 ; low != high ; ) { ! 44: # ifdef DEBUG ! 45: probes += 1; ! 46: # endif DEBUG ! 47: middle = ( high + low ) >> 1; ! 48: if ( nl[ middle ].value <= address && nl[ middle+1 ].value > address ) { ! 49: # ifdef DEBUG ! 50: if ( debug & LOOKUPDEBUG ) { ! 51: printf( "[nllookup] %d (%d) probes\n" , probes , nname-1 ); ! 52: } ! 53: # endif DEBUG ! 54: return &nl[ middle ]; ! 55: } ! 56: if ( nl[ middle ].value > address ) { ! 57: high = middle; ! 58: } else { ! 59: low = middle + 1; ! 60: } ! 61: } ! 62: fprintf( stderr , "[nllookup] binary search fails???\n" ); ! 63: return 0; ! 64: } ! 65: ! 66: arctype * ! 67: arclookup( parentp , childp ) ! 68: nltype *parentp; ! 69: nltype *childp; ! 70: { ! 71: arctype *arcp; ! 72: ! 73: if ( parentp == 0 || childp == 0 ) { ! 74: fprintf( "[arclookup] parentp == 0 || childp == 0\n" ); ! 75: return 0; ! 76: } ! 77: # ifdef DEBUG ! 78: if ( debug & LOOKUPDEBUG ) { ! 79: printf( "[arclookup] parent %s child %s\n" , ! 80: parentp -> name , childp -> name ); ! 81: } ! 82: # endif DEBUG ! 83: for ( arcp = parentp -> children ; arcp ; arcp = arcp -> arc_childlist ) { ! 84: # ifdef DEBUG ! 85: if ( debug & LOOKUPDEBUG ) { ! 86: printf( "[arclookup]\t arc_parent %s arc_child %s\n" , ! 87: arcp -> arc_parentp -> name , ! 88: arcp -> arc_childp -> name ); ! 89: } ! 90: # endif DEBUG ! 91: if ( arcp -> arc_childp == childp ) { ! 92: return arcp; ! 93: } ! 94: } ! 95: return 0; ! 96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.