home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 31 / CDASC_31_1996_juillet_aout.iso / vrac / cuj0796.zip / PLAUGER.ZIP / MEMORY5 < prev    next >
Text File  |  1996-04-24  |  2KB  |  63 lines

  1. --------------- Listing 4: <memory>, part 5 -------------
  2.  
  3.         // TEMPLATE CLASS _Temp_iterator
  4. template<class T>
  5.     class _Temp_iterator
  6.         : public iterator<output_iterator_tag, void, void> {
  7.     typedef T _FARQ *Pty;
  8. public:
  9.     _Temp_iterator(_PDFT n = 0)
  10.         {const pair<Pty, _PDFT> pnpair =
  11. ///            get_temporary_buffer<T>(n);
  12.             get_temporary_buffer(n, (Pty)0);    ///
  13.         Buf.Begin = pnpair.first;
  14.         Buf.Cur = pnpair.first;
  15.         Buf.Hiwater = pnpair.first;
  16.         Buf.Len = pnpair.second;
  17.         Pb = &Buf; }
  18.     _Temp_iterator(const _Temp_iterator<T>& x)
  19.         {Buf.Begin = 0;
  20.         Buf.Cur = 0;
  21.         Buf.Hiwater = 0;
  22.         Buf.Len = 0;
  23.         *this = x; }
  24.     ~_Temp_iterator()
  25.         {if (Buf.Begin != 0)
  26.             {for (Pty first = Buf.Begin;
  27.                 first != Buf.Hiwater; ++first)
  28.                 _Destroy(&*first);
  29.             return_temporary_buffer(Buf.Begin); }}
  30.     _Temp_iterator<T>& operator=(const _Temp_iterator<T>& x)
  31.         {Pb = x.Pb;
  32.         return (*this); }
  33.     _Temp_iterator<T>& operator=(const T& val)
  34.         {if (Pb->Cur < Pb->Hiwater)
  35.             *Pb->Cur++ = val;
  36.         else
  37.             {_Construct(&*Pb->Cur, val);
  38.             Pb->Hiwater = ++Pb->Cur; }
  39.         return (*this); }
  40.     _Temp_iterator<T>& operator*()
  41.         {return (*this); }
  42.     _Temp_iterator<T>& operator++()
  43.         {return (*this); }
  44.     _Temp_iterator<T>& operator++(int)
  45.         {return (*this); }
  46.     _Temp_iterator<T>& Init()
  47.         {Pb->Cur = Pb->Begin;
  48.         return (*this); }
  49.     Pty First() const
  50.         {return (Pb->Begin); }
  51.     Pty Last() const
  52.         {return (Pb->Cur); }
  53.     _PDFT Maxlen() const
  54.         {return (Pb->Len); }
  55. private:
  56.     struct Bufpar {
  57.         Pty Begin;
  58.         Pty Cur;
  59.         Pty Hiwater;
  60.         _PDFT Len;
  61.         } Buf, *Pb;
  62.     };
  63.