/* -*- mode: c++ -*- 
*/
/* 

    GIFT, a flexible content based image retrieval system.
    Copyright (C) 1998, 1999, 2000 CUI, University of Geneva

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*/
#ifndef _BINARYFINDCLOSEST
#define _BINARYFINDCLOSEST

/** A template algorithm:
    find by binary search the closest element in a vector
    to a given element. 

    @author: Wolfgang Müller
*/

template<class RandomAccessIterator,class Element,class Comparator>
RandomAccessIterator binary_find_closest(RandomAccessIterator inBegin,
					 RandomAccessIterator inEnd,
					 const Element inElement,
					 const Comparator& inComparator){
  if(inEnd-inBegin<=0){
    return inBegin;
  }else{
    /*    RandomAccessIterator lCurrent=inBegin;
	  while(inComparator(*lCurrent,inElement) && lCurrent!=inEnd){
	  lCurrent++;
	  }
	  
	  if(lCurrent==inEnd){
	  lCurrent--;
	  }
	  
	  inBegin=lCurrent;*/
   

    for(RandomAccessIterator 
	  lMiddle=inBegin+((inEnd-inBegin)/2);
	lMiddle>inBegin;
	lMiddle=inBegin+((inEnd-inBegin)/2)){
      
      if(inComparator(inElement,
		      *lMiddle)){
	inEnd=lMiddle;
      }else{
	inBegin=lMiddle;
      }
    }
    return inBegin;
  }
  return inBegin;
}
#endif

Documentation generated by muellerw@pc7170 on Son Okt 8 16:04:40 CEST 2000