OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [bits/] [ostream_insert.h] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// Helpers for ostream inserters -*- C++ -*-
2
 
3
// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4
//
5
// This file is part of the GNU ISO C++ Library.  This library is free
6
// software; you can redistribute it and/or modify it under the
7
// terms of the GNU General Public License as published by the
8
// Free Software Foundation; either version 3, or (at your option)
9
// any later version.
10
 
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
// GNU General Public License for more details.
15
 
16
// Under Section 7 of GPL version 3, you are granted additional
17
// permissions described in the GCC Runtime Library Exception, version
18
// 3.1, as published by the Free Software Foundation.
19
 
20
// You should have received a copy of the GNU General Public License and
21
// a copy of the GCC Runtime Library Exception along with this program;
22
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
// <http://www.gnu.org/licenses/>.
24
 
25
/** @file bits/ostream_insert.h
26
 *  This is an internal header file, included by other library headers.
27
 *  Do not attempt to use it directly. @headername{ostream}
28
 */
29
 
30
#ifndef _OSTREAM_INSERT_H
31
#define _OSTREAM_INSERT_H 1
32
 
33
#pragma GCC system_header
34
 
35
#include <iosfwd>
36
#include <bits/cxxabi_forced.h>
37
 
38
namespace std _GLIBCXX_VISIBILITY(default)
39
{
40
_GLIBCXX_BEGIN_NAMESPACE_VERSION
41
 
42
  template<typename _CharT, typename _Traits>
43
    inline void
44
    __ostream_write(basic_ostream<_CharT, _Traits>& __out,
45
                    const _CharT* __s, streamsize __n)
46
    {
47
      typedef basic_ostream<_CharT, _Traits>       __ostream_type;
48
      typedef typename __ostream_type::ios_base    __ios_base;
49
 
50
      const streamsize __put = __out.rdbuf()->sputn(__s, __n);
51
      if (__put != __n)
52
        __out.setstate(__ios_base::badbit);
53
    }
54
 
55
  template<typename _CharT, typename _Traits>
56
    inline void
57
    __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n)
58
    {
59
      typedef basic_ostream<_CharT, _Traits>       __ostream_type;
60
      typedef typename __ostream_type::ios_base    __ios_base;
61
 
62
      const _CharT __c = __out.fill();
63
      for (; __n > 0; --__n)
64
        {
65
          const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c);
66
          if (_Traits::eq_int_type(__put, _Traits::eof()))
67
            {
68
              __out.setstate(__ios_base::badbit);
69
              break;
70
            }
71
        }
72
    }
73
 
74
  template<typename _CharT, typename _Traits>
75
    basic_ostream<_CharT, _Traits>&
76
    __ostream_insert(basic_ostream<_CharT, _Traits>& __out,
77
                     const _CharT* __s, streamsize __n)
78
    {
79
      typedef basic_ostream<_CharT, _Traits>       __ostream_type;
80
      typedef typename __ostream_type::ios_base    __ios_base;
81
 
82
      typename __ostream_type::sentry __cerb(__out);
83
      if (__cerb)
84
        {
85
          __try
86
            {
87
              const streamsize __w = __out.width();
88
              if (__w > __n)
89
                {
90
                  const bool __left = ((__out.flags()
91
                                        & __ios_base::adjustfield)
92
                                       == __ios_base::left);
93
                  if (!__left)
94
                    __ostream_fill(__out, __w - __n);
95
                  if (__out.good())
96
                    __ostream_write(__out, __s, __n);
97
                  if (__left && __out.good())
98
                    __ostream_fill(__out, __w - __n);
99
                }
100
              else
101
                __ostream_write(__out, __s, __n);
102
              __out.width(0);
103
            }
104
          __catch(__cxxabiv1::__forced_unwind&)
105
            {
106
              __out._M_setstate(__ios_base::badbit);
107
              __throw_exception_again;
108
            }
109
          __catch(...)
110
            { __out._M_setstate(__ios_base::badbit); }
111
        }
112
      return __out;
113
    }
114
 
115
  // Inhibit implicit instantiations for required instantiations,
116
  // which are defined via explicit instantiations elsewhere.
117
#if _GLIBCXX_EXTERN_TEMPLATE
118
  extern template ostream& __ostream_insert(ostream&, const char*, streamsize);
119
 
120
#ifdef _GLIBCXX_USE_WCHAR_T
121
  extern template wostream& __ostream_insert(wostream&, const wchar_t*,
122
                                             streamsize);
123
#endif
124
#endif
125
 
126
_GLIBCXX_END_NAMESPACE_VERSION
127
} // namespace std
128
 
129
#endif /* _OSTREAM_INSERT_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.