LCOV - code coverage report
Current view: top level - usr/include/boost/format - alt_sstream.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 10 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // ----------------------------------------------------------------------------
       2             : //  alt_sstream.hpp : alternative stringstream 
       3             : // ----------------------------------------------------------------------------
       4             : 
       5             : //  Copyright Samuel Krempp 2003. Use, modification, and distribution are
       6             : //  subject to the Boost Software License, Version 1.0. (See accompanying
       7             : //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       8             : 
       9             : //  See http://www.boost.org/libs/format for library home page
      10             : 
      11             : // ----------------------------------------------------------------------------
      12             : 
      13             : 
      14             : 
      15             : #ifndef BOOST_SK_ALT_SSTREAM_HPP
      16             : #define BOOST_SK_ALT_SSTREAM_HPP
      17             : 
      18             : #include <string>
      19             : #include <boost/format/detail/compat_workarounds.hpp>
      20             : #include <boost/utility/base_from_member.hpp>
      21             : #include <boost/shared_ptr.hpp>
      22             : #include <boost/config.hpp>
      23             : #include <boost/assert.hpp>
      24             : 
      25             : namespace boost {
      26             :     namespace io {
      27             : 
      28             :         template<class Ch, class Tr=::std::char_traits<Ch>, 
      29             :                  class Alloc=::std::allocator<Ch> >
      30             :         class basic_altstringbuf;
      31             : 
      32             :         template<class Ch, class Tr =::std::char_traits<Ch>, 
      33             :                  class Alloc=::std::allocator<Ch> >
      34             :         class basic_oaltstringstream;
      35             : 
      36             : 
      37             :         template<class Ch, class Tr, class Alloc>
      38             :         class basic_altstringbuf 
      39             :             : public ::std::basic_streambuf<Ch, Tr>
      40             :         {
      41             :             typedef ::std::basic_streambuf<Ch, Tr>  streambuf_t;
      42             :             typedef typename CompatAlloc<Alloc>::compatible_type compat_allocator_type;
      43             :             typedef typename CompatTraits<Tr>::compatible_type   compat_traits_type;
      44             :         public:
      45             :             typedef Ch     char_type;
      46             :             typedef Tr     traits_type;
      47             :             typedef typename compat_traits_type::int_type     int_type;
      48             :             typedef typename compat_traits_type::pos_type     pos_type;
      49             :             typedef typename compat_traits_type::off_type     off_type;
      50             :             typedef Alloc                     allocator_type;
      51             :             typedef ::std::basic_string<Ch, Tr, Alloc> string_type;
      52             :             typedef typename string_type::size_type    size_type;
      53             : 
      54             :             typedef ::std::streamsize streamsize;
      55             : 
      56             : 
      57           0 :             explicit basic_altstringbuf(std::ios_base::openmode mode
      58             :                                         = std::ios_base::in | std::ios_base::out)
      59           0 :                 : putend_(NULL), is_allocated_(false), mode_(mode) 
      60             :                 {}
      61             :             explicit basic_altstringbuf(const string_type& s,
      62             :                                         ::std::ios_base::openmode mode
      63             :                                         = ::std::ios_base::in | ::std::ios_base::out)
      64             :                 : putend_(NULL), is_allocated_(false), mode_(mode) 
      65             :                 { dealloc(); str(s); }
      66           0 :             virtual ~basic_altstringbuf() BOOST_NOEXCEPT_OR_NOTHROW
      67           0 :                 { dealloc(); }
      68             :             using streambuf_t::pbase;
      69             :             using streambuf_t::pptr;
      70             :             using streambuf_t::epptr;
      71             :             using streambuf_t::eback;
      72             :             using streambuf_t::gptr;
      73             :             using streambuf_t::egptr;
      74             :     
      75             :             void clear_buffer();
      76             :             void str(const string_type& s);
      77             : 
      78             :             // 0-copy access :
      79             :             Ch * begin() const; 
      80             :             size_type size() const;
      81             :             size_type cur_size() const; // stop at current pointer
      82             :             Ch * pend() const // the highest position reached by pptr() since creation
      83             :                 { return ((putend_ < pptr()) ? pptr() : putend_); }
      84           0 :             size_type pcount() const 
      85           0 :                 { return static_cast<size_type>( pptr() - pbase()) ;}
      86             : 
      87             :             // copy buffer to string :
      88             :             string_type str() const 
      89             :                 { return string_type(begin(), size()); }
      90             :             string_type cur_str() const 
      91             :                 { return string_type(begin(), cur_size()); }
      92             :         protected:
      93             :             explicit basic_altstringbuf (basic_altstringbuf * s,
      94             :                                          ::std::ios_base::openmode mode 
      95             :                                          = ::std::ios_base::in | ::std::ios_base::out)
      96             :                 : putend_(NULL), is_allocated_(false), mode_(mode) 
      97             :                 { dealloc(); str(s); }
      98             : 
      99             :             virtual pos_type seekoff(off_type off, ::std::ios_base::seekdir way, 
     100             :                                      ::std::ios_base::openmode which 
     101             :                                      = ::std::ios_base::in | ::std::ios_base::out);
     102             :             virtual pos_type seekpos (pos_type pos, 
     103             :                                       ::std::ios_base::openmode which 
     104             :                                       = ::std::ios_base::in | ::std::ios_base::out);
     105             :             virtual int_type underflow();
     106             :             virtual int_type pbackfail(int_type meta = compat_traits_type::eof());
     107             :             virtual int_type overflow(int_type meta = compat_traits_type::eof());
     108             :             void dealloc();
     109             :         private:
     110             :             enum { alloc_min = 256}; // minimum size of allocations
     111             : 
     112             :             Ch *putend_;  // remembers (over seeks) the highest value of pptr()
     113             :             bool is_allocated_;
     114             :             ::std::ios_base::openmode mode_;
     115             :             compat_allocator_type alloc_;  // the allocator object
     116             :         };
     117             : 
     118             : 
     119             : // ---   class basic_oaltstringstream ----------------------------------------
     120             :         template <class Ch, class Tr, class Alloc>
     121             :         class basic_oaltstringstream 
     122             :             : private base_from_member< shared_ptr< basic_altstringbuf< Ch, Tr, Alloc> > >,
     123             :               public ::std::basic_ostream<Ch, Tr>
     124             :         {
     125             :             class No_Op { 
     126             :                 // used as no-op deleter for (not-owner) shared_pointers
     127             :             public: 
     128             :                 template<class T>
     129           0 :                 const T & operator()(const T & arg) { return arg; }
     130             :             };
     131             :             typedef ::std::basic_ostream<Ch, Tr> stream_t;
     132             :             typedef boost::base_from_member<boost::shared_ptr<
     133             :                 basic_altstringbuf<Ch,Tr, Alloc> > > 
     134             :                 pbase_type;
     135             :             typedef ::std::basic_string<Ch, Tr, Alloc>  string_type;
     136             :             typedef typename string_type::size_type     size_type;
     137             :             typedef basic_altstringbuf<Ch, Tr, Alloc>   stringbuf_t;
     138             :         public:
     139             :             typedef Alloc  allocator_type;
     140             :             basic_oaltstringstream() 
     141             :                 : pbase_type(new stringbuf_t), stream_t(pbase_type::member.get())
     142             :                 { }
     143             :             basic_oaltstringstream(::boost::shared_ptr<stringbuf_t> buf) 
     144             :                 : pbase_type(buf), stream_t(pbase_type::member.get())
     145             :                 { }
     146           0 :             basic_oaltstringstream(stringbuf_t * buf) 
     147           0 :                 : pbase_type(buf, No_Op() ), stream_t(pbase_type::member.get())
     148           0 :                 { }
     149             :             stringbuf_t * rdbuf() const 
     150             :                 { return pbase_type::member.get(); }
     151             :             void clear_buffer() 
     152             :                 { rdbuf()->clear_buffer(); }
     153             : 
     154             :             // 0-copy access :
     155             :             Ch * begin() const 
     156             :                 { return rdbuf()->begin(); }
     157             :             size_type size() const 
     158             :                 { return rdbuf()->size(); }
     159             :             size_type cur_size() const // stops at current position
     160             :                 { return rdbuf()->cur_size(); }
     161             : 
     162             :             // copy buffer to string :
     163             :             string_type str()     const   // [pbase, epptr[
     164             :                 { return rdbuf()->str(); } 
     165             :             string_type cur_str() const   // [pbase, pptr[
     166             :                 { return rdbuf()->cur_str(); }
     167             :             void str(const string_type& s) 
     168             :                 { rdbuf()->str(s); }
     169             :         };
     170             : 
     171             :     } // N.S. io
     172             : } // N.S. boost
     173             : 
     174             : #include <boost/format/alt_sstream_impl.hpp>
     175             : 
     176             : #endif // include guard
     177             : 

Generated by: LCOV version 1.14