home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional Developers Kit 1992 November / Disc01 / Disc01.mdf / runnable / ibmc / ibmclass / ilnseq.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-26  |  2.8 KB  |  81 lines

  1. /* Copyright (c) IBM Corp. 1992 */
  2. #include <ibexcept.h>
  3.  
  4. template <class Element, class ElementOps>
  5. Boolean IGLinkedSequence <Element, ElementOps>::Cursor::setToFirst () {
  6.   return ivCollection->setToFirst (*this);
  7. }
  8.  
  9. template <class Element, class ElementOps>
  10. Boolean IGLinkedSequence <Element, ElementOps>::Cursor::setToNext () {
  11.   return ivCollection->setToNext (*this);
  12. }
  13.  
  14. template <class Element, class ElementOps>
  15. Boolean IGLinkedSequence <Element, ElementOps>::Cursor::isValid () const {
  16.   return ivNode != 0;
  17. }
  18.  
  19. template <class Element, class ElementOps>
  20. void IGLinkedSequence <Element, ElementOps>::Cursor::invalidate () {
  21.   ivNode = 0;
  22. }
  23.  
  24. template <class Element, class ElementOps>
  25. ILinkedSequenceImpl::Node* IGLinkedSequence <Element, ElementOps>::Operations::
  26. newNode (void const* node) const {
  27.   Node *result = new Node (((Node const*) node)->ivElement);
  28.   ICHECK (result != 0, IOutOfMemory, "out of memory");
  29.   return result;
  30. }
  31.  
  32. template <class Element, class ElementOps>
  33. void IGLinkedSequence <Element, ElementOps>::Operations::
  34. deleteNode (void* node) const {
  35.   delete (Node*) node;
  36. }
  37.  
  38. template < class Element, class ElementOps >
  39. Boolean IGLinkedSequence < Element, ElementOps >::Operations::
  40. constantFunctionIteration (void *iterationFunction,
  41.                void* env,
  42.                void const* node) {
  43.   return (*(Boolean (*) (Element const&, void*)) iterationFunction)
  44.            (((Node const*)node)->ivElement, env);
  45. }
  46.  
  47. template < class Element, class ElementOps >
  48. Boolean IGLinkedSequence < Element, ElementOps >::Operations::
  49. functionIteration (void *iterationFunction, void* env, void* node) {
  50.   return (*(Boolean (*) (Element&, void*)) iterationFunction)
  51.            (((Node*)node)->ivElement, env);
  52. }
  53.    
  54. template < class Element, class ElementOps >
  55. Boolean IGLinkedSequence < Element, ElementOps >::Operations::
  56. constantIteratorIteration (void* iterator, void const* node) {
  57.   return ((IConstantIterator < Element >*)iterator)->
  58.            applyTo (((Node const*)node)->ivElement);
  59. }
  60.  
  61. template < class Element, class ElementOps >
  62. Boolean IGLinkedSequence < Element, ElementOps >::Operations::
  63. iteratorIteration (void* iterator, void* node) {
  64.   return ((IIterator < Element >*)iterator)->
  65.            applyTo (((Node*)node)->ivElement);
  66. }
  67.    
  68. template < class Element, class ElementOps >
  69. long IGLinkedSequence < Element, ElementOps >::Operations::
  70. functionComparison (void *comparisonFunction,
  71.                     void const* node1,
  72.             void const* node2) {
  73.   return (*(long (*) (Element const&, Element const&) const)
  74.         comparisonFunction)
  75.            ( ((Node const*)node1)->ivElement,
  76.              ((Node const*)node2)->ivElement );
  77. }
  78.  
  79. template <class Element, class ElementOps>
  80. ElementOps IGLinkedSequence <Element, ElementOps>::cvElementOps;
  81.