home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional Developers Kit 1992 November / Disc01 / Disc01.mdf / cppbeta / bbxxk / iaeqseq.c__ / IAEQSEQ.C
Encoding:
Text File  |  1992-10-26  |  3.1 KB  |  98 lines

  1. /* Copyright (c) IBM Corp. 1992 */
  2.  
  3.  
  4. template < class Element >
  5. Boolean IAEqualitySequence < Element >::
  6. operator == (IAEqualitySequence < Element > const& collection) const
  7. { return this->containsAllFrom (collection) &&
  8.      collection.containsAllFrom (*this);
  9. }
  10.  
  11. template < class Element >
  12. Boolean IAEqualitySequence < Element >::
  13. operator != (IAEqualitySequence < Element > const& collection) const
  14. { return ! operator == (collection);
  15. }
  16.  
  17. template < class Element >
  18. void IAEqualitySequence < Element >::
  19. unionWith (IAEqualitySequence < Element > const& collection)
  20. { addAllFrom (collection);
  21. }
  22.  
  23. template < class Element >
  24. void IAEqualitySequence < Element >::
  25. intersectionWith (IAEqualitySequence < Element > const& collection)
  26. { IAEqualityCollection < Element > const* env = &collection;
  27.   removeAll (IAEqualityCollection < Element >::isNotContained, &env);
  28. }
  29.  
  30. template < class Element >
  31. void IAEqualitySequence < Element >::
  32. differenceWith (IAEqualitySequence < Element > const& collection)
  33. { IAEqualityCollection < Element > const* env = &collection;
  34.   removeAll (IAEqualityCollection < Element >::isContained, &env);
  35. }
  36.  
  37. template < class Element >
  38. void IAEqualitySequence < Element >::
  39. addUnion (IAEqualitySequence < Element > const& collection1,
  40.           IAEqualitySequence < Element > const& collection2)
  41. { addAllFrom (collection1);
  42.   addAllFrom (collection2);
  43. }
  44.  
  45. template < class Element >
  46. void IAEqualitySequence < Element >::
  47. addIntersection (IAEqualitySequence < Element > const& collection1,
  48.                  IAEqualitySequence < Element > const& collection2)
  49. { ICursor *cursor = collection1.newCursor ();
  50.   forCursor (*cursor) {
  51.     if (collection2.contains (collection1.elementAt (*cursor)))
  52.       add (collection1.elementAt (*cursor));
  53.   }
  54.   delete cursor;
  55. }
  56.  
  57. template < class Element >
  58. void IAEqualitySequence < Element >::
  59. addDifference (IAEqualitySequence < Element > const& collection1,
  60.                IAEqualitySequence < Element > const& collection2)
  61. { ICursor *cursor = collection1.newCursor ();
  62.   forCursor (*cursor) {
  63.     if (! collection2.contains (collection1.elementAt (*cursor)))
  64.       add (collection1.elementAt (*cursor));
  65.   }
  66.   delete cursor;
  67. }
  68.  
  69. template < class Element >
  70. long IAEqualitySequence < Element >::
  71. compare (IAEqualitySequence < Element > const& collection,
  72.          long (*comparisonFunction) (Element const&, Element const&)) const
  73. { long result = 0;
  74.   ICursor *thisCursor = newCursor ();
  75.   ICursor *collectionCursor = collection.newCursor ();
  76.  
  77.   for (thisCursor->setToFirst (), collectionCursor->setToFirst ();
  78.        result == 0 && thisCursor->isValid () && collectionCursor->isValid ();
  79.        thisCursor->setToNext (), collectionCursor->setToNext ()) {
  80.     result = (*comparisonFunction) (this->elementAt (*thisCursor),
  81.                       collection.elementAt (*collectionCursor));
  82.   }
  83.  
  84.   if (result == 0) {
  85.     if (thisCursor->isValid () && ! collectionCursor->isValid ())
  86.       result = 1;
  87.     else if (! thisCursor->isValid () && collectionCursor->isValid ())
  88.       result = -1;
  89.     else {
  90.     }
  91.   }
  92.   delete thisCursor;
  93.   delete collectionCursor;
  94.  
  95.   return result;
  96. }
  97.  
  98.