home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / IAVLKSS.C < prev    next >
Text File  |  1993-09-22  |  6KB  |  137 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 >
  15. IBoolean IGAvlKeySortedSet < Element, Key, ElementOps >::Cursor::setToFirst () {
  16.   return ivCollection->setToFirst (*this);
  17. }
  18.  
  19. template < class Element, class Key, class ElementOps >
  20. IBoolean IGAvlKeySortedSet < Element, Key, ElementOps >::Cursor::setToNext () {
  21.   return ivCollection->setToNext (*this);
  22. }
  23.  
  24. template < class Element, class Key, class ElementOps >
  25. IBoolean IGAvlKeySortedSet < Element, Key, ElementOps >::Cursor::isValid () const {
  26.   return ivNode != 0;
  27. }
  28.  
  29. template < class Element, class Key, class ElementOps >
  30. void IGAvlKeySortedSet < Element, Key, ElementOps >::Cursor::invalidate () {
  31.   ivNode = 0;
  32. }
  33.  
  34. template < class Element, class Key, class ElementOps >
  35. IAvlKeySortedSetImpl::Node* IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  36. newNode (void const* element) const {
  37.   Node *result = new Node (*(Element const*) element);
  38.   ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
  39.   return result;
  40. }
  41.  
  42. template < class Element, class Key, class ElementOps >
  43. IAvlKeySortedSetImpl::Node* IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  44. copyNode (void const* node) const {
  45.   Node *result = new Node (((Node const*) node)->ivElement);
  46.   ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
  47.   return result;
  48. }
  49.  
  50. template < class Element, class Key, class ElementOps >
  51. void IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  52. deleteNode (void* node) const {
  53.   delete (Node*) node;
  54. }
  55.  
  56. template < class Element, class Key, class ElementOps >
  57. void* IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  58. elementAt (void* node) const
  59. { return &((Node*) node)->ivElement;
  60. }
  61.  
  62. template < class Element, class Key, class ElementOps >
  63. void const* IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  64. constElementAt (void const* node) const
  65. { return &((Node*) node)->ivElement;
  66. }
  67.  
  68. template < class Element, class Key, class ElementOps >
  69. void const* IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  70. keyAt (void const* node) const
  71. { return &elementOps().key (((Node*) node)->ivElement);
  72. }
  73.  
  74. template < class Element, class Key, class ElementOps >
  75. long IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  76. compareKeyToElement (void const* node, void const* element) const
  77. { return elementOps().keyOps.compare
  78.            (elementOps().key (((Node const*)node)->ivElement),
  79.             elementOps().key (*(Element const*)element));
  80. }
  81.  
  82. template < class Element, class Key, class ElementOps >
  83. long IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  84. compareKeyToKey (void const* node, void const* key) const
  85. { return elementOps().keyOps.compare
  86.            (elementOps().key (((Node const*)node)->ivElement),
  87.             (*(Key const*)key));
  88. }
  89.  
  90. template < class Element, class Key, class ElementOps >
  91. void IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  92. copyFrom (void* node, void const* element) const
  93. { elementOps().assign
  94.     (((Node*)node)->ivElement, *(Element const*)element);
  95. }
  96.  
  97. template < class Element, class Key, class ElementOps >
  98. IBoolean IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  99. constantFunctionIteration (void *iterationFunction,
  100.                            void* env,
  101.                            void const* node) {
  102.   return (*(IBoolean (*) (Element const&, void*)) iterationFunction)
  103.            (((Node const*)node)->ivElement, env);
  104. }
  105.  
  106. template < class Element, class Key, class ElementOps >
  107. IBoolean IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  108. functionIteration (void *iterationFunction, void* env, void* node) {
  109.   return (*(IBoolean (*) (Element&, void*)) iterationFunction)
  110.            (((Node*)node)->ivElement, env);
  111. }
  112.  
  113. template < class Element, class Key, class ElementOps >
  114. IBoolean IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  115. constantIteratorIteration (void* iterator, void const* node) {
  116.   return ((IConstantIterator < Element >*)iterator)->
  117.            applyTo (((Node const*)node)->ivElement);
  118. }
  119.  
  120. template < class Element, class Key, class ElementOps >
  121. IBoolean IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  122. iteratorIteration (void* iterator, void* node) {
  123.   return ((IIterator < Element >*)iterator)->
  124.            applyTo (((Node*)node)->ivElement);
  125. }
  126.  
  127. template < class Element, class Key, class ElementOps >
  128. long IGAvlKeySortedSet < Element, Key, ElementOps >::Operations::
  129. functionComparison (void *comparisonFunction,
  130.                     void const* node1,
  131.                     void const* node2) {
  132.   return (*(long (*) (Element const&, Element const&) const)
  133.             comparisonFunction)
  134.            ( ((Node const*)node1)->ivElement,
  135.              ((Node const*)node2)->ivElement );
  136. }
  137.