home *** CD-ROM | disk | FTP | other *** search
/ Informática Multimedia: Special Games / INFESPGAMES.mdf / os2 / ribble / support / cbsearch.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-09  |  3.2 KB  |  150 lines

  1. // -------------------------------
  2. //  $Source: C:\logical\store\classes/RCS/CBSEARCH.H,v $
  3. //  $Revision: 1.4 $
  4. //  $Date: 1994/02/15 11:14:41 $
  5. //  $Author: jason $
  6. //  Language:       C++
  7. //  Licence:        Public Domain
  8. //  Purpose:        Binary searches
  9. // -------------------------------
  10.  
  11. #include <CSupport.h>
  12.  
  13. #ifndef _CBSearch_h
  14. #define _CBSearch_h
  15.  
  16. template <class T> 
  17. long CSExport
  18. CBSearch(T huge* _elems, long _lower, long _upper, T _target)
  19. {
  20.   while (_upper >= _lower)
  21.     {
  22.       long middle = (_upper + _lower) >> 1;
  23.  
  24.       if (_elems[middle] == _target)
  25.         return 1;
  26.       else
  27.         if (_elems[middle] < _target)
  28.           _lower = middle + 1;
  29.         else
  30.           _upper = middle - 1;
  31.     }
  32.   return 0;
  33. }
  34.  
  35. template <class T> 
  36. long CSExport
  37. CBSearchP(T huge* huge* _elems, long _lower, long _upper, T* _target)
  38. {
  39.   while (_upper >= _lower)
  40.     {
  41.       long middle = (_upper + _lower) >> 1;
  42.  
  43.       if (*_elems[middle] == *_target)
  44.         return 1;
  45.       else
  46.         if (*_elems[middle] < *_target)
  47.           _lower = middle + 1;
  48.         else
  49.           _upper = middle - 1;
  50.     }
  51.   return 0;
  52. }
  53.  
  54. template <class T> 
  55. T huge* huge* CSExport
  56. CBSearchPp(T huge* huge* _elems, long _lower, long _upper, T* _target)
  57. {
  58.   while (_upper >= _lower)
  59.     {
  60.       long middle = (_upper + _lower) >> 1;
  61.  
  62.       if (*_elems[middle] == *_target)
  63.         return &_elems[middle];
  64.       else
  65.         if (*_elems[middle] < *_target)
  66.           _lower = middle + 1;
  67.         else
  68.           _upper = middle - 1;
  69.     }
  70.   return 0;
  71. }
  72.  
  73. template <class T> 
  74. long CSExport
  75. CBSearchP2(T huge* huge* _elems, long _lower, long _upper, T _target)
  76. {
  77.   while (_upper >= _lower)
  78.     {
  79.       long middle = (_upper + _lower) >> 1;
  80.  
  81.       if (*_elems[middle] == _target)
  82.         return 1;
  83.       else
  84.         if (*_elems[middle] < _target)
  85.           _lower = middle + 1;
  86.         else
  87.           _upper = middle - 1;
  88.     }
  89.   return 0;
  90. }
  91.  
  92. template <class T> 
  93. long CSExport
  94. CBSearch(CVector<T>& _elems, long _lower, long _upper, T& _target)
  95. {
  96.   while (_upper >= _lower)
  97.     {
  98.       long middle = (_upper + _lower) >> 1;
  99.  
  100.       if (_elems[middle] == _target)
  101.         return 1;
  102.       else
  103.         if (_elems[middle] < _target)
  104.           _lower = middle + 1;
  105.         else
  106.           _upper = middle - 1;
  107.     }
  108.   return 0;
  109. }
  110.  
  111. template <class T> 
  112. long CSExport
  113. CBSearchP(CVector<T*>& _elems, long _lower, long _upper, T* _target)
  114. {
  115.   while (_upper >= _lower)
  116.     {
  117.       long middle = (_upper + _lower) >> 1;
  118.  
  119.       if (*_elems[middle] == *_target)
  120.         return 1;
  121.       else
  122.         if (*_elems[middle] < *_target)
  123.           _lower = middle + 1;
  124.         else
  125.           _upper = middle - 1;
  126.     }
  127.   return 0;
  128. }
  129.  
  130. template <class T> 
  131. long CSExport
  132. CBSearchP2(CVector<T*>& _elems, long _lower, long _upper, T& _target)
  133. {
  134.   while (_upper >= _lower)
  135.     {
  136.       long middle = (_upper + _lower) >> 1;
  137.  
  138.       if (*_elems[middle] == _target)
  139.         return 1;
  140.       else
  141.         if (*_elems[middle] < _target)
  142.           _lower = middle + 1;
  143.         else
  144.           _upper = middle - 1;
  145.     }
  146.   return 0;
  147. }
  148.  
  149. #endif
  150.