]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/spirit/home/karma/stream/ostream_iterator.hpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / boost / spirit / home / karma / stream / ostream_iterator.hpp
CommitLineData
7c673cae
FG
1// Copyright (c) 2001-2011 Hartmut Kaiser
2//
3// Distributed under the Boost Software License, Version 1.0. (See accompanying
4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#if !defined(BOOST_SPIRIT_KARMA_OSTREAM_ITERATOR_MAY_26_2007_1016PM)
7#define BOOST_SPIRIT_KARMA_OSTREAM_ITERATOR_MAY_26_2007_1016PM
8
9#if defined(_MSC_VER)
10#pragma once
11#endif
12
13#include <iterator>
14
15///////////////////////////////////////////////////////////////////////////////
16namespace boost { namespace spirit { namespace karma
17{
18 ///////////////////////////////////////////////////////////////////////////
19 // We need our own implementation of an ostream_iterator just to be able
20 // to access the wrapped ostream, which is necessary for the
21 // stream_generator, where we must generate the output using the original
22 // ostream to retain possibly registered facets.
23 ///////////////////////////////////////////////////////////////////////////
24 template <
25 typename T, typename Elem = char
26 , typename Traits = std::char_traits<Elem> >
27 class ostream_iterator
7c673cae
FG
28 {
29 public:
11fdf7f2
TL
30 typedef std::output_iterator_tag iterator_category;
31 typedef void value_type;
32 typedef void difference_type;
33 typedef void pointer;
34 typedef void reference;
7c673cae
FG
35 typedef Elem char_type;
36 typedef Traits traits_type;
37 typedef std::basic_ostream<Elem, Traits> ostream_type;
38 typedef ostream_iterator<T, Elem, Traits> self_type;
39
40 ostream_iterator(ostream_type& os_, Elem const* delim_ = 0)
41 : os(&os_), delim(delim_) {}
42
43 self_type& operator= (T const& val)
44 {
45 *os << val;
46 if (0 != delim)
47 *os << delim;
48 return *this;
49 }
50
51 self_type& operator*() { return *this; }
52 self_type& operator++() { return *this; }
53 self_type operator++(int) { return *this; }
54
55 // expose underlying stream
56 ostream_type& get_ostream() { return *os; }
57 ostream_type const& get_ostream() const { return *os; }
58
59 // expose good bit of underlying stream object
60 bool good() const { return get_ostream().good(); }
61
62 protected:
63 ostream_type *os;
64 Elem const* delim;
65 };
66
67}}}
68
69#endif