| // (C) Copyright Gennadiy Rozental 2004-2008. |
| // Distributed under the Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| |
| // See http://www.boost.org/libs/test for the library home page. |
| // |
| // File : $RCSfile$ |
| // |
| // Version : $Revision: 49312 $ |
| // |
| // Description : |
| // *************************************************************************** |
| |
| #ifndef BOOST_IFSTREAM_LINE_ITERATOR_HPP_071894GER |
| #define BOOST_IFSTREAM_LINE_ITERATOR_HPP_071894GER |
| |
| // Boost |
| #include <boost/test/utils/iterator/istream_line_iterator.hpp> |
| |
| // STL |
| #include <fstream> |
| |
| #include <boost/test/detail/suppress_warnings.hpp> |
| |
| //____________________________________________________________________________// |
| |
| namespace boost { |
| |
| namespace unit_test { |
| |
| namespace ut_detail { |
| |
| // ************************************************************************** // |
| // ************** ifstream_holder ************** // |
| // ************************************************************************** // |
| |
| template<typename CharT> |
| class ifstream_holder { |
| public: |
| // Constructor |
| explicit ifstream_holder( basic_cstring<CharT const> file_name ) |
| { |
| if( file_name.is_empty() ) |
| return; |
| |
| m_stream.open( file_name.begin(), std::ios::in ); |
| } |
| |
| bool is_valid() |
| { |
| return m_stream.is_open(); |
| } |
| |
| protected: |
| #ifdef BOOST_CLASSIC_IOSTREAMS |
| typedef std::ifstream stream_t; |
| #else |
| typedef std::basic_ifstream<CharT,std::char_traits<CharT> > stream_t; |
| #endif |
| |
| // Data members |
| stream_t m_stream; |
| }; |
| |
| } // namespace ut_detail |
| |
| // ************************************************************************** // |
| // ************** basic_ifstream_line_iterator ************** // |
| // ************************************************************************** // |
| |
| #ifdef BOOST_MSVC |
| # pragma warning(push) |
| # pragma warning(disable: 4355) // 'this' : used in base member initializer list |
| #endif |
| |
| template<typename CharT> |
| class basic_ifstream_line_iterator : ut_detail::ifstream_holder<CharT>, public basic_istream_line_iterator<CharT> |
| { |
| public: |
| basic_ifstream_line_iterator( basic_cstring<CharT const> file_name, CharT delimeter ) |
| : ut_detail::ifstream_holder<CharT>( file_name ), basic_istream_line_iterator<CharT>( this->m_stream, delimeter ) {} |
| |
| explicit basic_ifstream_line_iterator( basic_cstring<CharT const> file_name = basic_cstring<CharT const>() ) |
| : ut_detail::ifstream_holder<CharT>( file_name ), basic_istream_line_iterator<CharT>( this->m_stream ) {} |
| }; |
| |
| #ifdef BOOST_MSVC |
| # pragma warning(default: 4355) |
| #endif |
| |
| typedef basic_ifstream_line_iterator<char> ifstream_line_iterator; |
| typedef basic_ifstream_line_iterator<wchar_t> wifstream_line_iterator; |
| |
| } // namespace unit_test |
| |
| } // namespace boost |
| |
| //____________________________________________________________________________// |
| |
| #include <boost/test/detail/enable_warnings.hpp> |
| |
| #endif // BOOST_IFSTREAM_LINE_ITERATOR_HPP_071894GER |
| |