home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / ISBKSS.C < prev    next >
Text File  |  1993-09-22  |  3KB  |  70 lines

  1. /*******************************************************************************
  2. *                                                                              *
  3. * COPYRIGHT:                                                                   *
  4. *   IBM C/C++ Tools Version 2.01 - Collection Class Library                    *
  5. *   Licensed Materials - Property of IBM                                       *
  6. *   (C) Copyright IBM Corporation 1992, 1993                                   *
  7. *   All Rights Reserved                                                        *
  8. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  9. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  10. *                                                                              *
  11. *******************************************************************************/
  12. template <class Element, class ElementOps, class Base>
  13. IBoolean IWSrtBagOnKSSet <Element, ElementOps, Base>::Cursor::setToFirst ()
  14. { occurrence = 1;
  15.   return ivCollection->setToFirst (*this);
  16. }
  17.  
  18. template <class Element, class ElementOps, class Base>
  19. IBoolean IWSrtBagOnKSSet <Element, ElementOps, Base>::Cursor::setToLast ()
  20. { IBoolean result = ivCollection->setToLast (*this);
  21.   if (result)
  22.     occurrence = ivCollection->elementAt (*this).occurrences;
  23.   return result;
  24. }
  25.  
  26. template <class Element, class ElementOps, class Base>
  27. IBoolean IWSrtBagOnKSSet <Element, ElementOps, Base>::Cursor::setToNext ()
  28. { ICHECK (isValid (), ICursorInvalidException, IInvalidCursorText)
  29.   if (occurrence == Base::Cursor::element().occurrences) {
  30.     occurrence = 1;
  31.     return Base::Cursor::setToNext ();
  32.   }
  33.   else {
  34.     occurrence++;
  35.     return True;
  36.   }
  37. }
  38.  
  39. template <class Element, class ElementOps, class Base>
  40. IBoolean IWSrtBagOnKSSet <Element, ElementOps, Base>::Cursor::setToPrevious ()
  41. { ICHECK (isValid (), ICursorInvalidException, IInvalidCursorText)
  42.   if (occurrence == 1) {
  43.     occurrence = 1;
  44.     IBoolean result = Base::Cursor::setToPrevious ();
  45.     if (result)
  46.       occurrence = ivCollection->elementAt (*this).occurrences;
  47.     return result;
  48.   }
  49.   else {
  50.     occurrence--;
  51.     return True;
  52.   }
  53. }
  54.  
  55. template <class Element, class ElementOps, class Base>
  56. IBoolean IWSrtBagOnKSSet <Element, ElementOps, Base>::
  57. removePredicate (ISBKSElm < Element > const& element, void* env)
  58. { RemoveEnv* re = (RemoveEnv*)env;
  59.   IBoolean result = (*re->predicate) (element.elem, re->env);
  60.   if (result)
  61.     re->removeCount += element.occurrences;
  62.   return result;
  63. }
  64.  
  65. template <class Element, class ElementOps, class Base>
  66. IBoolean IWSrtBagOnKSSet <Element, ElementOps, Base>::
  67. cleanupPredicate (ISBKSElm < Element > const& element, void* env)
  68. { return element.occurrences == 0;
  69. }
  70.