home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / ISMKSS.IF < prev    next >
Text File  |  1993-09-22  |  19KB  |  521 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. #include <ibexcept.h>
  13.  
  14. template < class Element, class Key, class ElementOps, class Base >
  15. inline IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  16. IWSrtMapOnKSSet (INumber n)
  17. : ivBase (n)
  18. {
  19. }
  20.  
  21. template < class Element, class Key, class ElementOps, class Base >
  22. inline IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  23. IWSrtMapOnKSSet (IWSrtMapOnKSSet < Element, Key, ElementOps, Base > const& collection)
  24. : ivBase (collection.ivBase)
  25. {
  26. }
  27.  
  28. template < class Element, class Key, class ElementOps, class Base >
  29. inline IWSrtMapOnKSSet < Element, Key, ElementOps, Base >& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  30. operator= (IWSrtMapOnKSSet < Element, Key, ElementOps, Base > const& collection)
  31. { ivBase.operator= (collection.ivBase);
  32.   return *this;
  33. }
  34.  
  35. template < class Element, class Key, class ElementOps, class Base >
  36. inline IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  37. ~IWSrtMapOnKSSet ()
  38. {
  39. }
  40.  
  41. template < class Element, class Key, class ElementOps, class Base >
  42. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  43. add (Element const& element)
  44. { Cursor dummy (*this);
  45.   return add (element, dummy);
  46. }
  47.  
  48. template < class Element, class Key, class ElementOps, class Base >
  49. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  50. add (Element const& element, ICursor &cursor)
  51. { IBoolean hasBeenAdded = ivBase.add (element, cursor);
  52. #ifndef INO_CHECKS
  53.   if (! hasBeenAdded) {
  54.     ICHECK (elementOps().equal (elementAt (cursor), element),
  55.             IKeyAlreadyExistsException, IKeyAlreadyExistsText)
  56.   }
  57. #endif
  58.   return hasBeenAdded;
  59. }
  60.  
  61. template <class Element, class Key, class ElementOps, class Base>
  62. inline void IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  63. addAllFrom (IWSrtMapOnKSSet < Element, Key, ElementOps, Base >
  64.             const& collection)
  65. {
  66. #ifndef INO_CHECKS
  67.   ICHECK (this != &collection,
  68.           IIdenticalCollectionException, IIdenticalCollectionText)
  69. #endif
  70.   Cursor cursor (collection);
  71.   forCursor (cursor) {
  72.     add (collection.elementAt (cursor));
  73.   }
  74. }
  75.  
  76. template < class Element, class Key, class ElementOps, class Base >
  77. inline Element const& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  78. elementAt (ICursor const& cursor) const
  79. { return ivBase.elementAt (cursor);
  80. }
  81.  
  82. template < class Element, class Key, class ElementOps, class Base >
  83. inline Element& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  84. elementAt (ICursor const& cursor)
  85. { return ivBase.elementAt (cursor);
  86. }
  87.  
  88. template < class Element, class Key, class ElementOps, class Base >
  89. inline Element const& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  90. anyElement () const
  91. { return ivBase.anyElement ();
  92. }
  93.  
  94. template < class Element, class Key, class ElementOps, class Base >
  95. inline void IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  96. removeAt (ICursor const& cursor)
  97. { ivBase.removeAt (cursor);
  98. }
  99.  
  100. template < class Element, class Key, class ElementOps, class Base >
  101. inline INumber IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  102. removeAll (IBoolean (*predicate) (Element const&, void*), void* env)
  103. { return ivBase.removeAll (predicate, env);
  104. }
  105.  
  106. template < class Element, class Key, class ElementOps, class Base >
  107. inline void IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  108. replaceAt (ICursor const& cursor, Element const& element)
  109. { ivBase.replaceAt (cursor, element);
  110. }
  111.  
  112. template < class Element, class Key, class ElementOps, class Base >
  113. inline void IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  114. removeAll ()
  115. { ivBase.removeAll ();
  116. }
  117.  
  118. template < class Element, class Key, class ElementOps, class Base >
  119. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  120. isBounded () const
  121. { return ivBase.isBounded ();
  122. }
  123.  
  124. template < class Element, class Key, class ElementOps, class Base >
  125. inline INumber IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  126. maxNumberOfElements () const
  127. { return ivBase.maxNumberOfElements ();
  128. }
  129.  
  130. template < class Element, class Key, class ElementOps, class Base >
  131. inline INumber IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  132. numberOfElements () const
  133. { return ivBase.numberOfElements ();
  134. }
  135.  
  136. template < class Element, class Key, class ElementOps, class Base >
  137. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  138. isEmpty () const
  139. { return ivBase.isEmpty ();
  140. }
  141.  
  142. template < class Element, class Key, class ElementOps, class Base >
  143. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  144. isFull () const
  145. { return ivBase.isFull ();
  146. }
  147.  
  148. template < class Element, class Key, class ElementOps, class Base >
  149. inline ICursor* IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  150. newCursor () const
  151. { return ivBase.newCursor ();
  152. }
  153.  
  154. template < class Element, class Key, class ElementOps, class Base >
  155. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  156. setToFirst (ICursor &cursor) const
  157. { return ivBase.setToFirst (cursor);
  158. }
  159.  
  160. template < class Element, class Key, class ElementOps, class Base >
  161. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  162. setToNext (ICursor &cursor) const
  163. { return ivBase.setToNext (cursor);
  164. }
  165.  
  166. template < class Element, class Key, class ElementOps, class Base >
  167. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  168. allElementsDo (IBoolean (*iterationFunction) (Element &, void*),
  169.                void* environment)
  170. { return ivBase.allElementsDo (iterationFunction, environment);
  171. }
  172.  
  173. template < class Element, class Key, class ElementOps, class Base >
  174. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  175. allElementsDo (IIterator <Element>& iterator)
  176. { return ivBase.allElementsDo (iterator);
  177. }
  178.  
  179. template < class Element, class Key, class ElementOps, class Base >
  180. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  181. allElementsDo (IBoolean (*iterationFunction) (Element const&, void*),
  182.                void* environment) const
  183. { return ivBase.allElementsDo (iterationFunction, environment);
  184. }
  185.  
  186. template < class Element, class Key, class ElementOps, class Base >
  187. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  188. allElementsDo (IConstantIterator <Element>& iterator) const
  189. { return ivBase.allElementsDo (iterator);
  190. }
  191.  
  192. template < class Element, class Key, class ElementOps, class Base >
  193. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  194. isConsistent () const
  195. { return ivBase.isConsistent ();
  196. }
  197.  
  198. template <class Element, class Key, class ElementOps, class Base>
  199. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  200. contains (Element const& element) const
  201. { Cursor cursor (*this);
  202.   if (locateElementWithKey (elementOps().key (element), cursor)) {
  203.     return elementOps().equal (elementAt (cursor), element);
  204.   }
  205.   else {
  206.     return False;
  207.   }
  208. }
  209.  
  210. template <class Element, class Key, class ElementOps, class Base>
  211. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  212. containsAllFrom (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  213.                  const& collection) const
  214. { Cursor cursor (collection);
  215.   IBoolean result = True;
  216.   forCursor (cursor) {
  217.     if (! contains (collection.elementAt (cursor))) {
  218.       result = False;
  219.       break;
  220.     }
  221.   }
  222.   return result;
  223. }
  224.  
  225. template <class Element, class Key, class ElementOps, class Base>
  226. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  227. locate (Element const& element, ICursor& cursor) const
  228. { IBoolean result = locateElementWithKey (elementOps().key (element), cursor);
  229.   if (result) {
  230.     result = elementOps().equal (elementAt (cursor), element);
  231.   }
  232.   if (! result) {
  233.     cursor.invalidate ();
  234.   }
  235.   return result;
  236. }
  237.  
  238. template <class Element, class Key, class ElementOps, class Base>
  239. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  240. locateOrAdd (Element const& element)
  241. { Cursor dummy (*this);
  242.   return locateOrAdd (element, dummy);
  243. }
  244.  
  245. template <class Element, class Key, class ElementOps, class Base>
  246. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  247. locateOrAdd (Element const& element, ICursor& cursor)
  248. { IBoolean result = locate (element, cursor);
  249.   if (! result) {
  250.     add (element, cursor);
  251.   }
  252.   return result;
  253. }
  254.  
  255. template <class Element, class Key, class ElementOps, class Base>
  256. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  257. remove (Element const& element)
  258. { Cursor cursor (*this);
  259.   IBoolean result = locateElementWithKey (elementOps().key (element), cursor);
  260.   if (result) {
  261.     result = elementOps().equal (elementAt (cursor), element);
  262.   }
  263.   if (result) {
  264.     ivBase.removeAt (cursor);
  265.   }
  266.   return result;
  267. }
  268.  
  269. template <class Element, class Key, class ElementOps, class Base>
  270. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  271. operator == (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  272.                const& collection) const
  273. { IBoolean result = numberOfElements () == collection.numberOfElements ();
  274.   if (result) {
  275.     Cursor thisCursor (*this);
  276.     Cursor collectionCursor (collection);
  277.  
  278.     for (thisCursor.setToFirst (), collectionCursor.setToFirst ();
  279.          result && thisCursor.isValid ();
  280.          thisCursor.setToNext (), collectionCursor.setToNext ()) {
  281.       result = elementOps().equal
  282.                  (this->elementAt (thisCursor),
  283.                   collection.elementAt (collectionCursor));
  284.     }
  285.   }
  286.   return result;
  287. }
  288.  
  289. template <class Element, class Key, class ElementOps, class Base>
  290. inline IBoolean IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  291. operator != (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  292.                const& collection) const
  293. { return ! operator == (collection);
  294. }
  295.  
  296. template <class Element, class Key, class ElementOps, class Base>
  297. inline void IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  298. unionWith (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  299.              const& collection)
  300. { if (this != &collection)
  301.     addAllFrom (collection);
  302. }
  303.  
  304. template <class Element, class Key, class ElementOps, class Base>
  305. inline void IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  306. intersectionWith (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  307.                     const& collection)
  308. { if (this != &collection)
  309.   { IWSrtMapOnKSSet <Element, Key, ElementOps, Base> const* env = &collection;
  310.     removeAll (isNotContained, &env);
  311.   }
  312. }
  313.  
  314. template <class Element, class Key, class ElementOps, class Base>
  315. inline void IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  316. differenceWith (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  317.                   const& collection)
  318. { if (this == &collection)
  319.     removeAll ();
  320.   else
  321.   { IWSrtMapOnKSSet <Element, Key, ElementOps, Base> const* env = &collection;
  322.     removeAll (isContained, &env);
  323.   }
  324. }
  325.  
  326. template <class Element, class Key, class ElementOps, class Base>
  327. inline void IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  328. addUnion (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  329.             const& collection1,
  330.           IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  331.             const& collection2)
  332. { unionWith (collection1);
  333.   unionWith (collection2);
  334. }
  335.  
  336. template <class Element, class Key, class ElementOps, class Base>
  337. inline void IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  338. addIntersection (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  339.                    const& collection1,
  340.                  IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  341.                    const& collection2)
  342. { if (this == &collection1 || this == &collection2)
  343.     return; // tbd
  344.   Cursor cursor (collection1);
  345.   forCursor (cursor) {
  346.     if (collection2.contains (collection1.elementAt (cursor)))
  347.       add (collection1.elementAt (cursor));
  348.   }
  349. }
  350.  
  351. template <class Element, class Key, class ElementOps, class Base>
  352. inline void IWSrtMapOnKSSet <Element, Key, ElementOps, Base>::
  353. addDifference (IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  354.                  const& collection1,
  355.                IWSrtMapOnKSSet <Element, Key, ElementOps, Base>
  356.                  const& collection2)
  357. { if (this == &collection1)
  358.     return;
  359.   else if (this == &collection2)
  360.     unionWith (collection1);
  361.   else {
  362.     Cursor cursor (collection1);
  363.     forCursor (cursor) {
  364.       if (! collection2.contains (collection1.elementAt (cursor)))
  365.         add (collection1.elementAt (cursor));
  366.     }
  367.   }
  368. }
  369.  
  370. template < class Element, class Key, class ElementOps, class Base >
  371. inline Key const& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  372. key (Element const& element) const
  373. { return elementOps().key (element);
  374. }
  375.  
  376. template < class Element, class Key, class ElementOps, class Base >
  377. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  378. containsElementWithKey (Key const& key) const
  379. { return ivBase.containsElementWithKey (key);
  380. }
  381.  
  382. template < class Element, class Key, class ElementOps, class Base >
  383. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  384. containsAllKeysFrom (IWSrtMapOnKSSet < Element, Key, ElementOps, Base > const& collection) const
  385. { return ivBase.containsAllKeysFrom (collection.ivBase);
  386. }
  387.  
  388. template < class Element, class Key, class ElementOps, class Base >
  389. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  390. locateElementWithKey (Key const& key, ICursor &cursor) const
  391. { return ivBase.locateElementWithKey (key, cursor);
  392. }
  393.  
  394. template < class Element, class Key, class ElementOps, class Base >
  395. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  396. replaceElementWithKey (Element const& element)
  397. { return ivBase.replaceElementWithKey (element);
  398. }
  399.  
  400. template < class Element, class Key, class ElementOps, class Base >
  401. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  402. replaceElementWithKey (Element const& element, ICursor &cursor)
  403. { return ivBase.replaceElementWithKey (element, cursor);
  404. }
  405.  
  406. template < class Element, class Key, class ElementOps, class Base >
  407. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  408. locateOrAddElementWithKey (Element const& element)
  409. { return ivBase.locateOrAddElementWithKey (element);
  410. }
  411.  
  412. template < class Element, class Key, class ElementOps, class Base >
  413. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  414. locateOrAddElementWithKey (Element const& element, ICursor &cursor)
  415. { return ivBase.locateOrAddElementWithKey (element, cursor);
  416. }
  417.  
  418. template < class Element, class Key, class ElementOps, class Base >
  419. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  420. addOrReplaceElementWithKey (Element const& element)
  421. { return ivBase.addOrReplaceElementWithKey (element);
  422. }
  423.  
  424. template < class Element, class Key, class ElementOps, class Base >
  425. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  426. addOrReplaceElementWithKey (Element const& element, ICursor &cursor)
  427. { return ivBase.addOrReplaceElementWithKey (element, cursor);
  428. }
  429.  
  430. template < class Element, class Key, class ElementOps, class Base >
  431. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  432. removeElementWithKey (Key const& key)
  433. { return ivBase.removeElementWithKey (key);
  434. }
  435.  
  436. template < class Element, class Key, class ElementOps, class Base >
  437. inline Element const& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  438. elementWithKey (Key const& key) const
  439. { return ivBase.elementWithKey (key);
  440. }
  441.  
  442. template < class Element, class Key, class ElementOps, class Base >
  443. inline Element& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  444. elementWithKey (Key const& key)
  445. { return ivBase.elementWithKey (key);
  446. }
  447.  
  448. template < class Element, class Key, class ElementOps, class Base >
  449. inline void IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  450. removeFirst ()
  451. { ivBase.removeFirst ();
  452. }
  453.  
  454. template < class Element, class Key, class ElementOps, class Base >
  455. inline void IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  456. removeLast ()
  457. { ivBase.removeLast ();
  458. }
  459.  
  460. template < class Element, class Key, class ElementOps, class Base >
  461. inline void IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  462. removeAtPosition (IPosition position)
  463. { ivBase.removeAtPosition (position);
  464. }
  465.  
  466. template < class Element, class Key, class ElementOps, class Base >
  467. inline Element const& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  468. firstElement () const
  469. { return ivBase.firstElement ();
  470. }
  471.  
  472. template < class Element, class Key, class ElementOps, class Base >
  473. inline Element const& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  474. lastElement () const
  475. { return ivBase.lastElement ();
  476. }
  477.  
  478. template < class Element, class Key, class ElementOps, class Base >
  479. inline Element const& IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  480. elementAtPosition (IPosition position) const
  481. { return ivBase.elementAtPosition (position);
  482. }
  483.  
  484. template < class Element, class Key, class ElementOps, class Base >
  485. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  486. setToLast (ICursor &cursor) const
  487. { return ivBase.setToLast (cursor);
  488. }
  489.  
  490. template < class Element, class Key, class ElementOps, class Base >
  491. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  492. setToPrevious (ICursor &cursor) const
  493. { return ivBase.setToPrevious (cursor);
  494. }
  495.  
  496. template < class Element, class Key, class ElementOps, class Base >
  497. inline void IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  498. setToPosition (IPosition position, ICursor &cursor) const
  499. { ivBase.setToPosition (position, cursor);
  500. }
  501.  
  502. template < class Element, class Key, class ElementOps, class Base >
  503. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  504. isFirst (ICursor const& cursor) const
  505. { return ivBase.isFirst (cursor);
  506. }
  507.  
  508. template < class Element, class Key, class ElementOps, class Base >
  509. inline IBoolean IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  510. isLast (ICursor const& cursor) const
  511. { return ivBase.isLast (cursor);
  512. }
  513.  
  514. template < class Element, class Key, class ElementOps, class Base >
  515. inline long IWSrtMapOnKSSet < Element, Key, ElementOps, Base >::
  516. compare (IWSrtMapOnKSSet < Element, Key, ElementOps, Base > const& collection,
  517.          long (*comparisonFunction) (Element const&, Element const&)) const
  518. { return ivBase.compare (collection.ivBase, comparisonFunction);
  519. }
  520.  
  521.