home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ctdemo.zip / classes / @CLSLIB1.ZIP / cls / tutorial / slst_ter.cpp < prev    next >
C/C++ Source or Header  |  1994-08-19  |  2KB  |  107 lines

  1. #ifndef INCL_SLIST_ITER
  2. #define INCL_SLIST_ITER
  3.  
  4. #ifndef __FIRST__
  5. #define __FIRST__
  6. #define __IMPL__SLIST_ITER
  7. #endif
  8.  
  9. /////V Slist_iter PCM f:\cls_ibm\cls\tutorial 0 PM 20.10.94 19:37:12
  10.  
  11. /*
  12. /////H 
  13. 20.10.94 19:37 PM 0 copied from: Slist_iter TOS f:\cls_ibm\cls\tutorial 0 PM 19.10.94 00:26:00
  14. 30.03.95 10:34 PM 0 archived: Slist_iter PCM f:\cls_ibm\cls\tutorial 0 PM 20.10.94 19:37:12
  15. /////
  16. */
  17.  
  18. /////1
  19. #undef inline
  20.  
  21. #include <bsa.h>
  22.  
  23. /////I slist_base_iter @ @ @ @ class pre 
  24. #include <SLST__TR.CPP>
  25.  
  26. /////I Slist @ @ @ @ template class pre 
  27. #include <SLIST.CPP>
  28.  
  29.  
  30. #ifndef __INLINE__
  31. #define inline
  32. #endif
  33.  
  34. /////C Slist_iter @ <class T> @ template 
  35. template <class T>
  36. class Slist_iter :
  37.  
  38. /////B slist_base_iter @ @ multiple hideBelow 
  39. private             slist_base_iter
  40.  
  41. {
  42.  
  43. public:
  44.     inline T* operator     () ();
  45.     inline void     reset ();
  46.     inline Slist_iter (Slist<T>&);
  47. };
  48.  
  49.  
  50. /////2
  51. #undef inline
  52.  
  53.  
  54. #if (defined __INLINE__) || (defined __IMPL__SLIST_ITER)
  55.  
  56. #ifndef __INLINE__
  57. #define inline
  58. #endif
  59.  
  60. /////F () @ @ public instance inline 
  61. template <class T> inline
  62. T* Slist_iter<T>:: operator () ()
  63.     // return current element
  64. {
  65. //    return ((Tlink<T>*) slist_base_iter::operator() ())->info;        // should return T* !!
  66. //    return &((Tlink<T>*) slist_base_iter::operator() ())->info;
  67.  
  68.     /*
  69.      * runtime error: check base class func return for NULL ptr (->access violation at rt)
  70.      * Tlink<T> has to non-virtual derived from slink because of downcast (chance
  71.      * for another rt error) 
  72.      *
  73.     */
  74.  
  75.     Tlink<T>*    p = (Tlink<T>*) slist_base_iter::operator() ();
  76.     return p ? &p->info : 0;
  77.  
  78. }
  79.  
  80. /////F reset @ @ public instance inline 
  81. template <class T> inline
  82. void Slist_iter<T>:: reset ()
  83.     // reset current element to (current) head of list
  84. {
  85.     slist_base_iter::reset();
  86. }
  87.  
  88. /////F Slist_iter @ @ public instance inline 
  89. template <class T> inline
  90. Slist_iter<T>:: Slist_iter ( Slist<T>& s )
  91. : slist_base_iter(s)
  92.     // ctor to build a typesafe iterator on an existing Slist<T>
  93. {
  94. }
  95.  
  96. /////
  97. #endif
  98.  
  99. /////3
  100. #undef inline
  101.  
  102. #ifdef __IMPL__SLIST_ITER
  103. /////
  104. #endif
  105.  
  106. #endif
  107.