LCOV - app.info - /tools/gcc-4.5/include/c++/4.5.2/bits/ostream_insert.h

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-04-07 | 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