home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / IBMCLASS / IHSHKS.C < prev    next >
Text File  |  1993-09-22  |  6KB  |  146 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 IGHashKeySet < Element, Key, ElementOps >::Cursor::setToFirst () {
  16.   return ivCollection->setToFirst (*this);
  17. }
  18.  
  19. template < class Element, class Key, class ElementOps >
  20. IBoolean IGHashKeySet < Element, Key, ElementOps >::Cursor::setToNext () {
  21.   return ivCollection->setToNext (*this);
  22. }
  23.  
  24. template < class Element, class Key, class ElementOps >
  25. IBoolean IGHashKeySet < Element, Key, ElementOps >::Cursor::isValid () const {
  26.   return ivImpl.ivNode != 0;
  27. }
  28.  
  29. template < class Element, class Key, class ElementOps >
  30. void IGHashKeySet < Element, Key, ElementOps >::Cursor::invalidate () {
  31.   ivImpl.ivNode = 0;
  32. }
  33.  
  34. template < class Element, class Key, class ElementOps >
  35. IHashKeyBagImpl::Node* IGHashKeySet < 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. IHashKeyBagImpl::Node* IGHashKeySet < 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 IGHashKeySet < 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* IGHashKeySet < Element, Key, ElementOps >::Operations::
  58. newBlock (size_t size) const {
  59. #if defined (__IBMCPP__) && defined (__DEBUG_ALLOC__)
  60.    return elementOps().allocate (size, __FILE__, __LINE__);
  61. #else
  62.    return elementOps().allocate (size);
  63. #endif
  64. }
  65.  
  66. template < class Element, class Key, class ElementOps >
  67. void IGHashKeySet < Element, Key, ElementOps >::Operations::
  68. removeBlock (void* p, size_t size) const {
  69. #if defined (__IBMCPP__) && defined (__DEBUG_ALLOC__)
  70.    elementOps().deallocate (p, __FILE__, __LINE__);
  71. #else
  72.    elementOps().deallocate (p);
  73. #endif
  74. }
  75.  
  76. template < class Element, class Key, class ElementOps >
  77. INumber IGHashKeySet < Element, Key, ElementOps >::Operations::
  78. getHashvalue (void const* key, INumber noEntries) const {
  79.    return elementOps().keyOps.hash (*(Key const*) key, noEntries);
  80. }
  81.  
  82. template < class Element, class Key, class ElementOps >
  83. void* IGHashKeySet < Element, Key, ElementOps >::Operations::
  84. elementAt (void* node) const
  85. { return &((Node*) node)->ivElement;
  86. }
  87.  
  88. template < class Element, class Key, class ElementOps >
  89. void const* IGHashKeySet < Element, Key, ElementOps >::Operations::
  90. keyAt (void const* node) const
  91. { return &elementOps().key (((Node*) node)->ivElement);
  92. }
  93.  
  94. template < class Element, class Key, class ElementOps >
  95. IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
  96. isKeyEqualToElement (void const* node, void const* element) const
  97. { return elementOps().keyOps.equal
  98.            (elementOps().key (((Node const*)node)->ivElement),
  99.             elementOps().key (*(Element const*)element));
  100. }
  101.  
  102. template < class Element, class Key, class ElementOps >
  103. IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
  104. isKeyEqualToKey (void const* node, void const* key) const
  105. { return elementOps().keyOps.equal
  106.            (elementOps().key (((Node const*)node)->ivElement),
  107.             (*(Key const*)key));
  108. }
  109.  
  110. template < class Element, class Key, class ElementOps >
  111. void IGHashKeySet < Element, Key, ElementOps >::Operations::
  112. copyFrom (void* node, void const* element) const
  113. { elementOps().assign
  114.     (((Node*)node)->ivElement, *(Element const*)element);
  115. }
  116.  
  117. template < class Element, class Key, class ElementOps >
  118. IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
  119. constantFunctionIteration (void *iterationFunction,
  120.                            void* env,
  121.                            void const* node) {
  122.   return (*(IBoolean (*) (Element const&, void*)) iterationFunction)
  123.            (((Node const*)node)->ivElement, env);
  124. }
  125.  
  126. template < class Element, class Key, class ElementOps >
  127. IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
  128. functionIteration (void *iterationFunction, void* env, void* node) {
  129.   return (*(IBoolean (*) (Element&, void*)) iterationFunction)
  130.            (((Node*)node)->ivElement, env);
  131. }
  132.  
  133. template < class Element, class Key, class ElementOps >
  134. IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
  135. constantIteratorIteration (void* iterator, void const* node) {
  136.   return ((IConstantIterator < Element >*)iterator)->
  137.            applyTo (((Node const*)node)->ivElement);
  138. }
  139.  
  140. template < class Element, class Key, class ElementOps >
  141. IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
  142. iteratorIteration (void* iterator, void* node) {
  143.   return ((IIterator < Element >*)iterator)->
  144.            applyTo (((Node*)node)->ivElement);
  145. }
  146.