C++ Utilities  4.16.0
Useful C++ classes and routines such as argument parser, IO and conversion utilities
nativefilestream.h
Go to the documentation of this file.
1 #ifndef IOUTILITIES_NATIVE_FILE_STREAM
2 #define IOUTILITIES_NATIVE_FILE_STREAM
3 
4 #include "../global.h"
5 
6 #ifdef CPP_UTILITIES_USE_NATIVE_FILE_BUFFER
7 #include <iostream>
8 #include <memory>
9 #include <streambuf>
10 #include <string>
11 #else
12 #endif
13 #include <fstream>
14 
15 namespace IoUtilities {
16 
17 #ifdef CPP_UTILITIES_USE_NATIVE_FILE_BUFFER
18 
19 class CPP_UTILITIES_EXPORT NativeFileStream : public std::iostream {
20 public:
22  NativeFileStream(const std::string &path, std::ios_base::openmode openMode);
23  NativeFileStream(int fileDescriptor, std::ios_base::openmode openMode);
26 
27  bool is_open() const;
28  void open(const std::string &path, std::ios_base::openmode openMode);
29  void openFromFileDescriptor(int fileDescriptor, std::ios_base::openmode openMode);
30  void close();
31  FILE fileHandle();
32 
33  static std::unique_ptr<std::basic_streambuf<char>> makeFileBuffer(const std::string &path, ios_base::openmode openMode);
34  static std::unique_ptr<std::basic_streambuf<char>> makeFileBuffer(int fileDescriptor, ios_base::openmode openMode);
35 #ifdef PLATFORM_WINDOWS
36  static std::unique_ptr<wchar_t[]> makeWidePath(const std::string &path);
37 #endif
38 
39 private:
40  void setFileBuffer(std::unique_ptr<std::basic_streambuf<char>> buffer);
41 
42  std::unique_ptr<std::basic_streambuf<char>> m_filebuf;
43  FILE m_fileHandle;
44 };
45 
46 inline NativeFileStream::NativeFileStream(const std::string &path, ios_base::openmode openMode)
48 {
49  open(path, openMode);
50 }
51 
52 inline NativeFileStream::NativeFileStream(int fileDescriptor, ios_base::openmode openMode)
54 {
55  openFromFileDescriptor(fileDescriptor, openMode);
56 }
57 
63 inline FILE NativeFileStream::fileHandle()
64 {
65  return m_fileHandle;
66 }
67 
68 #else // CPP_UTILITIES_USE_NATIVE_FILE_BUFFER
69 
70 using NativeFileStream = std::fstream;
71 
72 #endif
73 
74 } // namespace IoUtilities
75 
76 #endif // IOUTILITIES_NATIVE_FILE_STREAM
std::fstream NativeFileStream
Contains utility classes helping to read and write streams.
Definition: binaryreader.h:10
#define CPP_UTILITIES_EXPORT
Marks the symbol to be exported by the c++utilities library.