19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// WARNING: This is an internal header file, included by other C++
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// standard library headers.  You should not attempt to use this header
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// file directly.
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_OSTREAMBUF_ITERATOR_H
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_OSTREAMBUF_ITERATOR_H
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_STREAMBUF
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_streambuf.h>
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _CharT, class _Traits>
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern basic_streambuf<_CharT, _Traits>* _STLP_CALL __get_ostreambuf(basic_ostream<_CharT, _Traits>&);
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The default template argument is declared in iosfwd
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass ostreambuf_iterator :
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  public iterator<output_iterator_tag, void, void, void, void> {
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _CharT                           char_type;
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Traits                          traits_type;
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Traits::int_type       int_type;
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_streambuf<_CharT, _Traits> streambuf_type;
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_ostream<_CharT, _Traits>   ostream_type;
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef output_iterator_tag              iterator_category;
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void                             value_type;
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void                             difference_type;
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void                             pointer;
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void                             reference;
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ostreambuf_iterator(streambuf_type* __buf) _STLP_NOTHROW : _M_buf(__buf), _M_ok(__buf!=0) {}
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //  ostreambuf_iterator(ostream_type& __o) _STLP_NOTHROW : _M_buf(__get_ostreambuf(__o)), _M_ok(_M_buf != 0) {}
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline ostreambuf_iterator(ostream_type& __o) _STLP_NOTHROW;
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ostreambuf_iterator<_CharT, _Traits>& operator=(char_type __c) {
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_ok = _M_ok && !traits_type::eq_int_type(_M_buf->sputc(__c),
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                               traits_type::eof());
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ostreambuf_iterator<_CharT, _Traits>& operator*()     { return *this; }
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ostreambuf_iterator<_CharT, _Traits>& operator++()    { return *this; }
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ostreambuf_iterator<_CharT, _Traits>& operator++(int) { return *this; }
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool failed() const { return !_M_ok; }
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  streambuf_type* _M_buf;
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool _M_ok;
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline ostreambuf_iterator<_CharT, _Traits>::ostreambuf_iterator(basic_ostream<_CharT, _Traits>& __o) _STLP_NOTHROW
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : _M_buf(_STLP_PRIV __get_ostreambuf(__o)), _M_ok(_M_buf != 0) {}
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT)
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS ostreambuf_iterator<char, char_traits<char> >;
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (INSTANTIATE_WIDE_STREAMS)
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS ostreambuf_iterator<wchar_t, char_traits<wchar_t> >;
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_TEMPLATE_EXPORT */
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES)
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline output_iterator_tag _STLP_CALL
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const ostreambuf_iterator<_CharT, _Traits>&) { return output_iterator_tag(); }
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_OSTREAMBUF_ITERATOR_H */
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
103