home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / IMAPKS.IF < prev    next >
Text File  |  1993-09-22  |  16KB  |  435 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 IWMapOnKeySet < Element, Key, ElementOps, Base >::
  16. IWMapOnKeySet (INumber n)
  17. : ivBase (n)
  18. {
  19. }
  20.  
  21. template < class Element, class Key, class ElementOps, class Base >
  22. inline IWMapOnKeySet < Element, Key, ElementOps, Base >::
  23. IWMapOnKeySet (IWMapOnKeySet < 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 IWMapOnKeySet < Element, Key, ElementOps, Base >& IWMapOnKeySet < Element, Key, ElementOps, Base >::
  30. operator= (IWMapOnKeySet < 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 IWMapOnKeySet < Element, Key, ElementOps, Base >::
  37. ~IWMapOnKeySet ()
  38. {
  39. }
  40.  
  41. template < class Element, class Key, class ElementOps, class Base >
  42. inline IBoolean IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet <Element, Key, ElementOps, Base>::
  63. addAllFrom (IWMapOnKeySet < 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& IWMapOnKeySet < 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& IWMapOnKeySet < 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& IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < Element, Key, ElementOps, Base >::
  114. removeAll ()
  115. { ivBase.removeAll ();
  116. }
  117.  
  118. template < class Element, class Key, class ElementOps, class Base >
  119. inline IBoolean IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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* IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet < 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 IWMapOnKeySet <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 IWMapOnKeySet <Element, Key, ElementOps, Base>::
  212. containsAllFrom (IWMapOnKeySet <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 IWMapOnKeySet <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 IWMapOnKeySet <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 IWMapOnKeySet <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 IWMapOnKeySet <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 IWMapOnKeySet <Element, Key, ElementOps, Base>::
  271. operator == (IWMapOnKeySet <Element, Key, ElementOps, Base>
  272.                const& collection) const
  273. { return numberOfElements() == collection.numberOfElements() &&
  274.          containsAllFrom (collection);
  275. }
  276.  
  277. template <class Element, class Key, class ElementOps, class Base>
  278. inline IBoolean IWMapOnKeySet <Element, Key, ElementOps, Base>::
  279. operator != (IWMapOnKeySet <Element, Key, ElementOps, Base>
  280.                const& collection) const
  281. { return ! operator == (collection);
  282. }
  283.  
  284. template <class Element, class Key, class ElementOps, class Base>
  285. inline void IWMapOnKeySet <Element, Key, ElementOps, Base>::
  286. unionWith (IWMapOnKeySet <Element, Key, ElementOps, Base>
  287.              const& collection)
  288. { if (this != &collection)
  289.     addAllFrom (collection);
  290. }
  291.  
  292. template <class Element, class Key, class ElementOps, class Base>
  293. inline void IWMapOnKeySet <Element, Key, ElementOps, Base>::
  294. intersectionWith (IWMapOnKeySet <Element, Key, ElementOps, Base>
  295.                     const& collection)
  296. { if (this != &collection)
  297.   { IWMapOnKeySet <Element, Key, ElementOps, Base> const* env = &collection;
  298.     removeAll (isNotContained, &env);
  299.   }
  300. }
  301.  
  302. template <class Element, class Key, class ElementOps, class Base>
  303. inline void IWMapOnKeySet <Element, Key, ElementOps, Base>::
  304. differenceWith (IWMapOnKeySet <Element, Key, ElementOps, Base>
  305.                   const& collection)
  306. { if (this == &collection)
  307.     removeAll ();
  308.   else
  309.   { IWMapOnKeySet <Element, Key, ElementOps, Base> const* env = &collection;
  310.     removeAll (isContained, &env);
  311.   }
  312. }
  313.  
  314. template <class Element, class Key, class ElementOps, class Base>
  315. inline void IWMapOnKeySet <Element, Key, ElementOps, Base>::
  316. addUnion (IWMapOnKeySet <Element, Key, ElementOps, Base>
  317.             const& collection1,
  318.           IWMapOnKeySet <Element, Key, ElementOps, Base>
  319.             const& collection2)
  320. { unionWith (collection1);
  321.   unionWith (collection2);
  322. }
  323.  
  324. template <class Element, class Key, class ElementOps, class Base>
  325. inline void IWMapOnKeySet <Element, Key, ElementOps, Base>::
  326. addIntersection (IWMapOnKeySet <Element, Key, ElementOps, Base>
  327.                    const& collection1,
  328.                  IWMapOnKeySet <Element, Key, ElementOps, Base>
  329.                    const& collection2)
  330. { if (this == &collection1 || this == &collection2)
  331.     return;
  332.   Cursor cursor (collection1);
  333.   forCursor (cursor) {
  334.     if (collection2.contains (collection1.elementAt (cursor)))
  335.       add (collection1.elementAt (cursor));
  336.   }
  337. }
  338.  
  339. template <class Element, class Key, class ElementOps, class Base>
  340. inline void IWMapOnKeySet <Element, Key, ElementOps, Base>::
  341. addDifference (IWMapOnKeySet <Element, Key, ElementOps, Base>
  342.                  const& collection1,
  343.                IWMapOnKeySet <Element, Key, ElementOps, Base>
  344.                  const& collection2)
  345. { if (this == &collection1)
  346.     return;
  347.   else if (this == &collection2)
  348.     unionWith (collection1);
  349.   else {
  350.     Cursor cursor (collection1);
  351.     forCursor (cursor) {
  352.       if (! collection2.contains (collection1.elementAt (cursor)))
  353.         add (collection1.elementAt (cursor));
  354.     }
  355.   }
  356. }
  357.  
  358. template < class Element, class Key, class ElementOps, class Base >
  359. inline Key const& IWMapOnKeySet < Element, Key, ElementOps, Base >::
  360. key (Element const& element) const
  361. { return elementOps().key (element);
  362. }
  363.  
  364. template < class Element, class Key, class ElementOps, class Base >
  365. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  366. containsElementWithKey (Key const& key) const
  367. { return ivBase.containsElementWithKey (key);
  368. }
  369.  
  370. template < class Element, class Key, class ElementOps, class Base >
  371. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  372. containsAllKeysFrom (IWMapOnKeySet < Element, Key, ElementOps, Base > const& collection) const
  373. { return ivBase.containsAllKeysFrom (collection.ivBase);
  374. }
  375.  
  376. template < class Element, class Key, class ElementOps, class Base >
  377. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  378. locateElementWithKey (Key const& key, ICursor &cursor) const
  379. { return ivBase.locateElementWithKey (key, cursor);
  380. }
  381.  
  382. template < class Element, class Key, class ElementOps, class Base >
  383. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  384. replaceElementWithKey (Element const& element)
  385. { return ivBase.replaceElementWithKey (element);
  386. }
  387.  
  388. template < class Element, class Key, class ElementOps, class Base >
  389. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  390. replaceElementWithKey (Element const& element, ICursor &cursor)
  391. { return ivBase.replaceElementWithKey (element, cursor);
  392. }
  393.  
  394. template < class Element, class Key, class ElementOps, class Base >
  395. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  396. locateOrAddElementWithKey (Element const& element)
  397. { return ivBase.locateOrAddElementWithKey (element);
  398. }
  399.  
  400. template < class Element, class Key, class ElementOps, class Base >
  401. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  402. locateOrAddElementWithKey (Element const& element, ICursor &cursor)
  403. { return ivBase.locateOrAddElementWithKey (element, cursor);
  404. }
  405.  
  406. template < class Element, class Key, class ElementOps, class Base >
  407. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  408. addOrReplaceElementWithKey (Element const& element)
  409. { return ivBase.addOrReplaceElementWithKey (element);
  410. }
  411.  
  412. template < class Element, class Key, class ElementOps, class Base >
  413. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  414. addOrReplaceElementWithKey (Element const& element, ICursor &cursor)
  415. { return ivBase.addOrReplaceElementWithKey (element, cursor);
  416. }
  417.  
  418. template < class Element, class Key, class ElementOps, class Base >
  419. inline IBoolean IWMapOnKeySet < Element, Key, ElementOps, Base >::
  420. removeElementWithKey (Key const& key)
  421. { return ivBase.removeElementWithKey (key);
  422. }
  423.  
  424. template < class Element, class Key, class ElementOps, class Base >
  425. inline Element const& IWMapOnKeySet < Element, Key, ElementOps, Base >::
  426. elementWithKey (Key const& key) const
  427. { return ivBase.elementWithKey (key);
  428. }
  429.  
  430. template < class Element, class Key, class ElementOps, class Base >
  431. inline Element& IWMapOnKeySet < Element, Key, ElementOps, Base >::
  432. elementWithKey (Key const& key)
  433. { return ivBase.elementWithKey (key);
  434. }
  435.