diff options
Diffstat (limited to 'src/boost/libs/iostreams/test/detail/temp_file.hpp')
-rw-r--r-- | src/boost/libs/iostreams/test/detail/temp_file.hpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/boost/libs/iostreams/test/detail/temp_file.hpp b/src/boost/libs/iostreams/test/detail/temp_file.hpp new file mode 100644 index 00000000..e8605d0d --- /dev/null +++ b/src/boost/libs/iostreams/test/detail/temp_file.hpp @@ -0,0 +1,92 @@ +// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com) +// (C) Copyright 2004-2007 Jonathan Turkanis +// 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/iostreams for documentation. + +#ifndef BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED +#define BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED + +#include <cctype> // toupper, tolower +#include <cstdio> // tmpname, TMP_MAX, remove +#include <cstdlib> // rand, toupper, tolower (VC6) +#include <fstream> +#include <string> +#include <boost/filesystem/operations.hpp> +#include "./constants.hpp" + +#ifdef BOOST_NO_STDC_NAMESPACE +# undef toupper +# undef tolower +# undef remove +# undef rand +namespace std { + using ::toupper; using ::tolower; using ::remove; using ::rand; +} +#endif + +namespace boost { namespace iostreams { namespace test { + +// Represents a temp file, deleted upon destruction. +class temp_file { +public: + + // Constructs a temp file which does not initially exist. + temp_file() { set_name(); } + ~temp_file() { (void)std::remove(name_.c_str()); } + const ::std::string name() const { return name_; } + operator const ::std::string() const { return name_; } +private: + void set_name() { + name_ = boost::filesystem::unique_path().string(); + } + + ::std::string name_; +}; + +struct test_file : public temp_file { + test_file() + { + BOOST_IOS::openmode mode = + BOOST_IOS::out | BOOST_IOS::binary; + ::std::ofstream f(name().c_str(), mode); + const ::std::string n(name()); + const char* buf = narrow_data(); + for (int z = 0; z < data_reps; ++z) + f.write(buf, data_length()); + } +}; + + +struct uppercase_file : public temp_file { + uppercase_file() + { + BOOST_IOS::openmode mode = + BOOST_IOS::out | BOOST_IOS::binary; + ::std::ofstream f(name().c_str(), mode); + const char* buf = narrow_data(); + for (int z = 0; z < data_reps; ++z) + for (int w = 0; w < data_length(); ++w) + f.put((char) std::toupper(buf[w])); + } +}; + +struct lowercase_file : public temp_file { + lowercase_file() + { + BOOST_IOS::openmode mode = + BOOST_IOS::out | BOOST_IOS::binary; + ::std::ofstream f(name().c_str(), mode); + const char* buf = narrow_data(); + for (int z = 0; z < data_reps; ++z) + for (int w = 0; w < data_length(); ++w) + f.put((char) std::tolower(buf[w])); + } +}; + +//----------------------------------------------------------------------------// + +} } } // End namespaces test, iostreams, boost. + +#endif // #ifndef BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED |