summaryrefslogtreecommitdiff
path: root/boost/test/utils/iterator/ifstream_line_iterator.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/test/utils/iterator/ifstream_line_iterator.hpp')
-rw-r--r--boost/test/utils/iterator/ifstream_line_iterator.hpp104
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
+