LCOV - code coverage report
Current view: directory - tools/gcc-4.5/include/c++/4.5.2/bits - ostream_insert.h (source / functions) Found Hit Coverage
Test: app.info Lines: 33 0 0.0 %
Date: 2012-06-02 Functions: 3 0 0.0 %

       1                 : // Helpers for ostream inserters -*- C++ -*-
       2                 : 
       3                 : // Copyright (C) 2007, 2008, 2009 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 ostream_insert.h
      26                 :  *  This is an internal header file, included by other library headers.
      27                 :  *  You should not attempt to use it directly.
      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 <cxxabi-forced.h>
      37                 : 
      38                 : _GLIBCXX_BEGIN_NAMESPACE(std)
      39                 : 
      40                 :   template<typename _CharT, typename _Traits>
      41                 :     inline void
      42               0 :     __ostream_write(basic_ostream<_CharT, _Traits>& __out,
      43                 :                     const _CharT* __s, streamsize __n)
      44                 :     {
      45                 :       typedef basic_ostream<_CharT, _Traits>       __ostream_type;      
      46                 :       typedef typename __ostream_type::ios_base    __ios_base;
      47                 : 
      48               0 :       const streamsize __put = __out.rdbuf()->sputn(__s, __n);
      49               0 :       if (__put != __n)
      50               0 :         __out.setstate(__ios_base::badbit);
      51               0 :     }
      52                 : 
      53                 :   template<typename _CharT, typename _Traits>
      54                 :     inline void
      55               0 :     __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n)
      56                 :     {
      57                 :       typedef basic_ostream<_CharT, _Traits>       __ostream_type;      
      58                 :       typedef typename __ostream_type::ios_base    __ios_base;
      59                 : 
      60               0 :       const _CharT __c = __out.fill();
      61               0 :       for (; __n > 0; --__n)
      62                 :         {
      63               0 :           const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c);
      64               0 :           if (_Traits::eq_int_type(__put, _Traits::eof()))
      65                 :             {
      66               0 :               __out.setstate(__ios_base::badbit);
      67               0 :               break;
      68                 :             }
      69                 :         }
      70               0 :     }
      71                 : 
      72                 :   template<typename _CharT, typename _Traits>
      73                 :     basic_ostream<_CharT, _Traits>&
      74               0 :     __ostream_insert(basic_ostream<_CharT, _Traits>& __out,
      75                 :                      const _CharT* __s, streamsize __n)
      76                 :     {
      77                 :       typedef basic_ostream<_CharT, _Traits>       __ostream_type;
      78                 :       typedef typename __ostream_type::ios_base    __ios_base;
      79                 : 
      80               0 :       typename __ostream_type::sentry __cerb(__out);
      81               0 :       if (__cerb)
      82                 :         {
      83                 :           __try
      84                 :             {
      85               0 :               const streamsize __w = __out.width();
      86               0 :               if (__w > __n)
      87                 :                 {
      88                 :                   const bool __left = ((__out.flags()
      89                 :                                         & __ios_base::adjustfield)
      90               0 :                                        == __ios_base::left);
      91               0 :                   if (!__left)
      92               0 :                     __ostream_fill(__out, __w - __n);
      93               0 :                   if (__out.good())
      94               0 :                     __ostream_write(__out, __s, __n);
      95               0 :                   if (__left && __out.good())
      96               0 :                     __ostream_fill(__out, __w - __n);
      97                 :                 }
      98                 :               else
      99               0 :                 __ostream_write(__out, __s, __n);
     100               0 :               __out.width(0);
     101                 :             }
     102               0 :           __catch(__cxxabiv1::__forced_unwind&)
     103                 :             {
     104               0 :               __out._M_setstate(__ios_base::badbit);
     105               0 :               __throw_exception_again;
     106                 :             }
     107               0 :           __catch(...)
     108               0 :             { __out._M_setstate(__ios_base::badbit); }
     109                 :         }
     110               0 :       return __out;
     111                 :     }
     112                 : 
     113                 :   // Inhibit implicit instantiations for required instantiations,
     114                 :   // which are defined via explicit instantiations elsewhere.
     115                 :   // NB:  This syntax is a GNU extension.
     116                 : #if _GLIBCXX_EXTERN_TEMPLATE
     117                 :   extern template ostream& __ostream_insert(ostream&, const char*, streamsize);
     118                 : 
     119                 : #ifdef _GLIBCXX_USE_WCHAR_T
     120                 :   extern template wostream& __ostream_insert(wostream&, const wchar_t*,
     121                 :                                              streamsize);
     122                 : #endif
     123                 : #endif
     124                 : 
     125                 : _GLIBCXX_END_NAMESPACE
     126                 : 
     127                 : #endif /* _OSTREAM_INSERT_H */

Generated by: LCOV version 1.7