summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/iostreams/test/detail/temp_file.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/iostreams/test/detail/temp_file.hpp')
-rw-r--r--src/boost/libs/iostreams/test/detail/temp_file.hpp92
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