// (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 // toupper, tolower #include // tmpname, TMP_MAX, remove #include // rand, toupper, tolower (VC6) #include #include #include #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