summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/pstream.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/pstream.h')
-rw-r--r--src/lib/netlist/plib/pstream.h44
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>