diff options
Diffstat (limited to 'boost/test/utils/iterator/ifstream_line_iterator.hpp')
-rw-r--r-- | boost/test/utils/iterator/ifstream_line_iterator.hpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/boost/test/utils/iterator/ifstream_line_iterator.hpp b/boost/test/utils/iterator/ifstream_line_iterator.hpp new file mode 100644 index 0000000000..3005ef14c1 --- /dev/null +++ b/boost/test/utils/iterator/ifstream_line_iterator.hpp @@ -0,0 +1,104 @@ +// (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 + |