home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / IBSTKSS.IF < prev    next >
Text File  |  1993-09-22  |  16KB  |  415 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, int nodeSize >
  15. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  16. checkNotEmpty () const {
  17. #ifndef INO_CHECKS
  18.   ICHECK (!isEmpty (), IEmptyException, ICollectionIsEmptyText)
  19. #endif
  20. }
  21.  
  22. template < class Element, class Key, class ElementOps, int nodeSize >
  23. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  24. checkCursorIsForThis (ICursor const& c) const {
  25. #ifndef INO_CHECKS
  26.   ICHECK (((Cursor const&)c).isFor (*this), ICursorInvalidException,
  27.           ICursorNotForThisText)
  28. #endif
  29. }
  30.  
  31. template < class Element, class Key, class ElementOps, int nodeSize >
  32. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  33. checkCursor (ICursor const& c) const {
  34. #ifndef INO_CHECKS
  35.   ICHECK (((Cursor const&)c).isFor (*this), ICursorInvalidException,
  36.           ICursorNotForThisText)
  37.   ICHECK (c.isValid (), ICursorInvalidException, IInvalidCursorText)
  38. #endif
  39. #ifdef IALL_CHECKS
  40.   ICHECK (ivImpl.checkNode(((Cursor const&)c).ivNode),
  41.           ICursorInvalidException, ICursorNotContainedText)
  42. #endif
  43. }
  44.  
  45. template < class Element, class Key, class ElementOps, int nodeSize >
  46. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  47. checkPositionExists (IPosition position) const {
  48. #ifndef INO_CHECKS
  49.   ICHECK (1 <= position && position <= numberOfElements(),
  50.           IPositionInvalidException, IInvalidPositionText)
  51. #endif
  52. }
  53.  
  54. template < class Element, class Key, class ElementOps, int nodeSize >
  55. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  56. init ()
  57. {
  58. }
  59.  
  60. template < class Element, class Key, class ElementOps, int nodeSize >
  61. inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  62. IWBSTKeySortedSet (INumber)
  63. : ivOps()
  64. , ivImpl(IBSTORDER, &ivOps)
  65. { init();
  66. }
  67.  
  68. template < class Element, class Key, class ElementOps, int nodeSize >
  69. inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  70. IWBSTKeySortedSet (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& a)
  71. : ivOps()
  72. , ivImpl(a.ivImpl, &ivOps)
  73. { init();
  74. }
  75.  
  76. template < class Element, class Key, class ElementOps, int nodeSize >
  77. inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  78. ~IWBSTKeySortedSet ()
  79. {
  80. }
  81.  
  82. template < class Element, class Key, class ElementOps, int nodeSize >
  83. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  84. add (Element const& e)
  85. { return ivImpl.add(&e);
  86. }
  87.  
  88. template < class Element, class Key, class ElementOps, int nodeSize >
  89. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  90. add (Element const& e, ICursor& c)
  91. { checkCursorIsForThis (c);
  92.   return ivImpl.add(&e, ((Cursor&) c).ivNode);
  93. }
  94.  
  95. template < class Element, class Key, class ElementOps, int nodeSize >
  96. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  97. addAllFrom (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& t)
  98. {
  99. #ifndef INO_CHECKS
  100.   ICHECK (this != &t,
  101.           IIdenticalCollectionException, IIdenticalCollectionText)
  102. #endif
  103.   ivImpl.addAllFrom(t.ivImpl);
  104. }
  105.  
  106. template < class Element, class Key, class ElementOps, int nodeSize >
  107. inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  108. elementAt (ICursor const& c) const
  109. { checkCursor (c);
  110.   return *(Element const*)
  111.          ivImpl.elementAt(((Cursor const&) c).ivNode);
  112. }
  113.  
  114. template < class Element, class Key, class ElementOps, int nodeSize >
  115. inline Element& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  116. elementAt (ICursor const& c)
  117. { checkCursor (c);
  118.   return *(Element*)
  119.          ivImpl.elementAt(((Cursor const&) c).ivNode);
  120. }
  121.  
  122. template < class Element, class Key, class ElementOps, int nodeSize >
  123. inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  124. anyElement () const
  125. { checkNotEmpty ();
  126.   return *(Element const*) ivImpl.anyElement();
  127. }
  128.  
  129. template < class Element, class Key, class ElementOps, int nodeSize >
  130. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  131. removeAt (ICursor const& c)
  132. { checkCursor (c);
  133.   ivImpl.removeAt(((Cursor const&) c).ivNode);
  134. }
  135.  
  136. template < class Element, class Key, class ElementOps, int nodeSize >
  137. inline INumber IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  138. removeAll (IBoolean (*predicate) (Element const&, void*), void* env)
  139. { return ivImpl.removeAll (predicate, env);
  140. }
  141.  
  142. template < class Element, class Key, class ElementOps, int nodeSize >
  143. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  144. replaceAt (ICursor const& c, Element const& e)
  145. { checkCursor (c);
  146. #ifndef INO_CHECKS
  147.   ICHECK (elementOps().keyOps.compare
  148.            (elementOps().key (elementAt (c)),
  149.             elementOps().key (e)) == 0,
  150.           IInvalidReplacementException, IInvalidReplacementText)
  151. #endif
  152.   ivImpl.replaceAt(((Cursor const&) c).ivNode, &e);
  153. }
  154.  
  155. template < class Element, class Key, class ElementOps, int nodeSize >
  156. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  157. removeAll ()
  158. { ivImpl.removeAll();
  159. }
  160.  
  161. template < class Element, class Key, class ElementOps, int nodeSize >
  162. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  163. isBounded () const
  164. { return ivImpl.isBounded();
  165. }
  166.  
  167. template < class Element, class Key, class ElementOps, int nodeSize >
  168. inline INumber IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  169. maxNumberOfElements () const
  170. { ICHECK (False, INotBoundedException,
  171.           INotBoundedText)
  172.   return ivImpl.maxNumberOfElements();
  173. }
  174.  
  175. template < class Element, class Key, class ElementOps, int nodeSize >
  176. inline INumber IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  177. numberOfElements () const
  178. { return ivImpl.numberOfElements();
  179. }
  180.  
  181. template < class Element, class Key, class ElementOps, int nodeSize >
  182. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  183. isEmpty () const
  184. { return ivImpl.isEmpty();
  185. }
  186.  
  187. template < class Element, class Key, class ElementOps, int nodeSize >
  188. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  189. isFull () const
  190. { return ivImpl.isFull();
  191. }
  192.  
  193. template < class Element, class Key, class ElementOps, int nodeSize >
  194. inline ICursor* IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  195. newCursor () const
  196. { ICursor* result = new Cursor (*this);
  197.   ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
  198.   return result;
  199. }
  200.  
  201. template < class Element, class Key, class ElementOps, int nodeSize >
  202. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  203. setToFirst (ICursor& c) const
  204. { checkCursorIsForThis (c);
  205.   return ivImpl.setToFirst(((Cursor&) c).ivNode);
  206. }
  207.  
  208. template < class Element, class Key, class ElementOps, int nodeSize >
  209. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  210. setToNext (ICursor& c) const
  211. { checkCursor (c);
  212.   return ivImpl.setToNext(((Cursor&) c).ivNode);
  213. }
  214.  
  215. template < class Element, class Key, class ElementOps, int nodeSize >
  216. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  217. allElementsDo (IBoolean (*iterationFunction) (Element const&, void*),
  218.                void* env) const
  219. { return ivImpl.allElementsDo (iterationFunction, env);
  220. }
  221.  
  222. template < class Element, class Key, class ElementOps, int nodeSize >
  223. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  224. allElementsDo (IBoolean (*iterationFunction) (Element&, void*), void* env)
  225. { return ivImpl.allElementsDo (iterationFunction, env);
  226. }
  227.  
  228. template < class Element, class Key, class ElementOps, int nodeSize >
  229. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  230. allElementsDo (IConstantIterator <Element>& iterator) const
  231. { return ivImpl.allElementsDo (&iterator);
  232. }
  233.  
  234. template < class Element, class Key, class ElementOps, int nodeSize >
  235. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  236. allElementsDo (IIterator <Element>& iterator)
  237. { return ivImpl.allElementsDo (&iterator);
  238. }
  239.  
  240. template < class Element, class Key, class ElementOps, int nodeSize >
  241. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  242. isConsistent () const
  243. { return ivImpl.isConsistent ();
  244. }
  245.  
  246. template < class Element, class Key, class ElementOps, int nodeSize >
  247. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  248. containsAllKeysFrom (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& t) const
  249. { return ivImpl.containsAllKeysFrom(t.ivImpl);
  250. }
  251.  
  252. template < class Element, class Key, class ElementOps, int nodeSize >
  253. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  254. containsElementWithKey (Key const& k) const
  255. { return ivImpl.containsElementWithKey(&k);
  256. }
  257.  
  258. template < class Element, class Key, class ElementOps, int nodeSize >
  259. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  260. locateElementWithKey (Key const& k, ICursor& c) const
  261. { checkCursorIsForThis (c);
  262.   return ivImpl.locateElementWithKey(&k, ((Cursor&) c).ivNode);
  263. }
  264.  
  265. template < class Element, class Key, class ElementOps, int nodeSize >
  266. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  267. replaceElementWithKey (Element const& e)
  268. { return ivImpl.replaceElementWithKey(&e);
  269. }
  270.  
  271. template < class Element, class Key, class ElementOps, int nodeSize >
  272. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  273. replaceElementWithKey (Element const& e, ICursor& c)
  274. { checkCursorIsForThis (c);
  275.   return ivImpl.replaceElementWithKey(&e, ((Cursor&) c).ivNode);
  276. }
  277.  
  278. template < class Element, class Key, class ElementOps, int nodeSize >
  279. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  280. locateOrAddElementWithKey (Element const& e)
  281. { return ! add (e);
  282. }
  283.  
  284. template < class Element, class Key, class ElementOps, int nodeSize >
  285. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  286. locateOrAddElementWithKey (Element const& e, ICursor& c)
  287. { return ! add (e, c);
  288. }
  289.  
  290. template < class Element, class Key, class ElementOps, int nodeSize >
  291. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  292. addOrReplaceElementWithKey (Element const& e)
  293. { return ivImpl.addOrReplaceElementWithKey(&e);
  294. }
  295.  
  296. template < class Element, class Key, class ElementOps, int nodeSize >
  297. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  298. addOrReplaceElementWithKey (Element const& e, ICursor& c)
  299. { checkCursorIsForThis (c);
  300.   return ivImpl.addOrReplaceElementWithKey(&e, ((Cursor&) c).ivNode);
  301. }
  302.  
  303. template < class Element, class Key, class ElementOps, int nodeSize >
  304. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  305. removeElementWithKey(Key const& k)
  306. { return ivImpl.removeElementWithKey(&k);
  307. }
  308.  
  309. template < class Element, class Key, class ElementOps, int nodeSize >
  310. inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  311. elementWithKey (Key const& k) const
  312. { return *(Element const*) ivImpl.elementWithKey(&k);
  313. }
  314.  
  315. template < class Element, class Key, class ElementOps, int nodeSize >
  316. inline Element& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  317. elementWithKey (Key const& k)
  318. { return *(Element*) ivImpl.elementWithKey(&k);
  319. }
  320.  
  321. template < class Element, class Key, class ElementOps, int nodeSize >
  322. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  323. removeFirst ()
  324. { checkNotEmpty ();
  325.   ivImpl.removeFirst();
  326. }
  327.  
  328. template < class Element, class Key, class ElementOps, int nodeSize >
  329. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  330. removeLast ()
  331. { checkNotEmpty ();
  332.   ivImpl.removeLast();
  333. }
  334.  
  335. template < class Element, class Key, class ElementOps, int nodeSize >
  336. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  337. removeAtPosition (IPosition position)
  338. { checkPositionExists (position);
  339.   ivImpl.removeAtPosition(position);
  340. }
  341.  
  342. template < class Element, class Key, class ElementOps, int nodeSize >
  343. inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  344. firstElement () const
  345. { checkNotEmpty ();
  346.   return *(Element const*) ivImpl.firstElement();
  347. }
  348.  
  349. template < class Element, class Key, class ElementOps, int nodeSize >
  350. inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  351. lastElement () const
  352. { checkNotEmpty ();
  353.   return *(Element const*) ivImpl.lastElement();
  354. }
  355.  
  356. template < class Element, class Key, class ElementOps, int nodeSize >
  357. inline Element const& IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  358. elementAtPosition (IPosition position) const
  359. { checkPositionExists (position);
  360.   return *(Element const*) ivImpl.elementAtPosition(position);
  361. }
  362.  
  363. template < class Element, class Key, class ElementOps, int nodeSize >
  364. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  365. setToLast (ICursor& c) const
  366. { checkCursorIsForThis (c);
  367.   return ivImpl.setToLast(((Cursor&) c).ivNode);
  368. }
  369.  
  370. template < class Element, class Key, class ElementOps, int nodeSize >
  371. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  372. setToPrevious (ICursor& c) const
  373. { checkCursor (c);
  374.   return ivImpl.setToPrevious(((Cursor&) c).ivNode);
  375. }
  376.  
  377. template < class Element, class Key, class ElementOps, int nodeSize >
  378. inline void IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  379. setToPosition (IPosition position, ICursor& c) const
  380. { checkCursorIsForThis (c);
  381.   checkPositionExists (position);
  382.   ivImpl.setToPosition(position, ((Cursor&) c).ivNode);
  383. }
  384.  
  385. template < class Element, class Key, class ElementOps, int nodeSize >
  386. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  387. isFirst (ICursor const& c) const
  388. { checkCursor (c);
  389.   return ivImpl.isFirst(((Cursor const&) c).ivNode);
  390. }
  391.  
  392. template < class Element, class Key, class ElementOps, int nodeSize >
  393. inline IBoolean IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  394. isLast (ICursor const& c) const
  395. { checkCursor (c);
  396.   return ivImpl.isLast(((Cursor const&) c).ivNode);
  397. }
  398.  
  399. template < class Element, class Key, class ElementOps, int nodeSize >
  400. inline IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >&
  401. IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  402. operator = (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& t)
  403. { ivImpl = t.ivImpl;
  404.   return *this;
  405. }
  406.  
  407. template < class Element, class Key, class ElementOps, int nodeSize >
  408. inline long IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize >::
  409. compare (IWBSTKeySortedSet < Element, Key, ElementOps, nodeSize > const& collection,
  410.          long (*comparisonFunction)
  411.            (Element const&, Element const&)) const
  412. { return ivImpl.compare
  413.     (collection.ivImpl, comparisonFunction);
  414. }
  415.