diff options
author | 2020-06-06 20:41:11 +0200 | |
---|---|---|
committer | 2020-06-06 20:43:10 +0200 | |
commit | 3f9bb5d1eae63463ee7b193d8544a98f36a2fe55 (patch) | |
tree | 914031a1938ce104f0169193e4d797a107c13d35 /src/lib/netlist/plib/pstream.h | |
parent | c891603d86f08eecc7e7d9620fd4211173461aec (diff) |
netlist: Enable utf7 filenames on windows. (nw)
Diffstat (limited to 'src/lib/netlist/plib/pstream.h')
-rw-r--r-- | src/lib/netlist/plib/pstream.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h index 04ca9e4344c..e5fc0e24b80 100644 --- a/src/lib/netlist/plib/pstream.h +++ b/src/lib/netlist/plib/pstream.h @@ -21,6 +21,7 @@ #include <ios> #include <iostream> #include <sstream> +#include <fstream> #include <type_traits> #include <vector> @@ -261,6 +262,49 @@ inline void copystream(std::ostream &dest, std::istream &src) } } +/// +/// \brief utf8 filename aware ifstream wrapper +/// +class ifstream : public std::ifstream +{ +public: +#ifdef _WIN32 + template <typename T> + explicit ifstream(const pstring_t<T> name, ios_base::openmode mode = ios_base::in) + : std::ifstream(reinterpret_cast<const wchar_t *>(pstring_t<putf16_traits>(name).c_str()), mode) + { + } +#else + template <typename T> + explicit ifstream(const pstring_t<T> name, ios_base::openmode mode = ios_base::in) + : std::ifstream(pstring_t<putf8_traits>(name).c_str(), mode) + { + } +#endif +}; + +/// +/// \brief utf8 filename aware ofstream wrapper +/// +class ofstream : public std::ofstream +{ +public: +#ifdef _WIN32 + template <typename T> + explicit ofstream(const pstring_t<T> name, ios_base::openmode mode = ios_base::in) + : std::ofstream(reinterpret_cast<const wchar_t *>(pstring_t<putf16_traits>(name).c_str()), mode) + { + } +#else + template <typename T> + explicit ofstream(const pstring_t<T> name, ios_base::openmode mode = ios_base::in) + : std::ofstream(pstring_t<putf8_traits>(name).c_str(), mode) + { + } +#endif +}; + + struct perrlogger { template <typename ... Args> |