*** empty log message ***
This commit is contained in:
		
							parent
							
								
									abe1725466
								
							
						
					
					
						commit
						8733f2528e
					
				
							
								
								
									
										26
									
								
								bisection.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								bisection.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
#ifndef _BISECTION_H
 | 
			
		||||
#define _BISECTION_H
 | 
			
		||||
//general bisection search
 | 
			
		||||
//returns dm-1 on failure, otherwise number between dm and hm
 | 
			
		||||
 | 
			
		||||
template<typename INDEX, typename COMPAR, typename SUBJECT>
 | 
			
		||||
INDEX bisection_find(INDEX dm, INDEX hm, const SUBJECT *key, const SUBJECT *base , unsigned int lead_dimension_base, COMPAR (*cmp)(const SUBJECT *, const SUBJECT *)) 
 | 
			
		||||
{
 | 
			
		||||
if(dm>hm) return(dm-1);
 | 
			
		||||
if(dm==hm) return  (*cmp)(base+dm*lead_dimension_base,key)? dm-1 :dm;
 | 
			
		||||
INDEX sm;
 | 
			
		||||
INDEX dm0=dm;
 | 
			
		||||
--dm;
 | 
			
		||||
++hm;
 | 
			
		||||
do
 | 
			
		||||
          {
 | 
			
		||||
          sm = (dm+hm)/2;
 | 
			
		||||
	  COMPAR q = (*cmp)(base+sm*lead_dimension_base,key);
 | 
			
		||||
          if (!q) return(sm);
 | 
			
		||||
          else if (q<0) dm = sm; else hm = sm;
 | 
			
		||||
          }
 | 
			
		||||
while (hm > dm+1);
 | 
			
		||||
return(dm0-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user