1: /*
   2:  * Copyright (c) 1983 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)lookup.c	5.1 (Berkeley) 6/4/85";
   9: #endif not lint
  10: 
  11: #include "gprof.h"
  12: 
  13:     /*
  14:      *	look up an address in a sorted-by-address namelist
  15:      *	    this deals with misses by mapping them to the next lower
  16:      *	    entry point.
  17:      */
  18: nltype *
  19: nllookup( address )
  20:     unsigned long   address;
  21: {
  22:     register long   low;
  23:     register long   middle;
  24:     register long   high;
  25: #   ifdef DEBUG
  26:     register int    probes;
  27: 
  28:     probes = 0;
  29: #   endif DEBUG
  30:     for ( low = 0 , high = nname - 1 ; low != high ; ) {
  31: #	ifdef DEBUG
  32:         probes += 1;
  33: #	endif DEBUG
  34:     middle = ( high + low ) >> 1;
  35:     if ( nl[ middle ].value <= address && nl[ middle+1 ].value > address ) {
  36: #	    ifdef DEBUG
  37:         if ( debug & LOOKUPDEBUG ) {
  38:             printf( "[nllookup] %d (%d) probes\n" , probes , nname-1 );
  39:         }
  40: #	    endif DEBUG
  41:         return &nl[ middle ];
  42:     }
  43:     if ( nl[ middle ].value > address ) {
  44:         high = middle;
  45:     } else {
  46:         low = middle + 1;
  47:     }
  48:     }
  49:     fprintf( stderr , "[nllookup] binary search fails???\n" );
  50:     return 0;
  51: }
  52: 
  53: arctype *
  54: arclookup( parentp , childp )
  55:     nltype  *parentp;
  56:     nltype  *childp;
  57: {
  58:     arctype *arcp;
  59: 
  60:     if ( parentp == 0 || childp == 0 ) {
  61:     fprintf( "[arclookup] parentp == 0 || childp == 0\n" );
  62:     return 0;
  63:     }
  64: #   ifdef DEBUG
  65:     if ( debug & LOOKUPDEBUG ) {
  66:         printf( "[arclookup] parent %s child %s\n" ,
  67:             parentp -> name , childp -> name );
  68:     }
  69: #   endif DEBUG
  70:     for ( arcp = parentp -> children ; arcp ; arcp = arcp -> arc_childlist ) {
  71: #	ifdef DEBUG
  72:         if ( debug & LOOKUPDEBUG ) {
  73:         printf( "[arclookup]\t arc_parent %s arc_child %s\n" ,
  74:             arcp -> arc_parentp -> name ,
  75:             arcp -> arc_childp -> name );
  76:         }
  77: #	endif DEBUG
  78:     if ( arcp -> arc_childp == childp ) {
  79:         return arcp;
  80:     }
  81:     }
  82:     return 0;
  83: }

Defined functions

arclookup defined in line 53; used 3 times

Defined variables

sccsid defined in line 8; never used
Last modified: 1985-06-04
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1172
Valid CSS Valid XHTML 1.0 Strict