C++ Utilities 5.24.7
Useful C++ classes and routines such as argument parser, IO and conversion utilities
Loading...
Searching...
No Matches
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#endif
12#include <fstream>
13
14namespace CppUtilities {
15
16#ifdef CPP_UTILITIES_USE_NATIVE_FILE_BUFFER
17
18class CPP_UTILITIES_EXPORT NativeFileStream : public std::iostream {
19public:
20#ifdef PLATFORM_WINDOWS
21 using Handle = void *;
22#endif
23 struct CPP_UTILITIES_EXPORT FileBuffer {
24 FileBuffer(std::basic_streambuf<char> *buffer);
25 FileBuffer(const std::string &path, ios_base::openmode openMode);
26 FileBuffer(int fileDescriptor, ios_base::openmode openMode);
27
28 std::unique_ptr<std::basic_streambuf<char>> buffer;
29#ifdef PLATFORM_WINDOWS
30 Handle handle = nullptr;
31#endif
32 int descriptor = -1;
33 };
34
36 NativeFileStream(const std::string &path, std::ios_base::openmode openMode);
37 NativeFileStream(int fileDescriptor, std::ios_base::openmode openMode);
38 NativeFileStream(NativeFileStream &&);
39 ~NativeFileStream() override;
40
41 bool is_open() const;
42 bool isOpen() const;
43 void open(const std::string &path, std::ios_base::openmode openMode);
44 void open(int fileDescriptor, std::ios_base::openmode openMode);
45 void close();
46 int fileDescriptor();
47#ifdef PLATFORM_WINDOWS
48 Handle fileHandle();
49 static std::unique_ptr<wchar_t[]> makeWidePath(const std::string &path);
50#endif
51
52private:
53 void setData(FileBuffer data, std::ios_base::openmode openMode);
54
55 FileBuffer m_data;
56 std::ios_base::openmode m_openMode;
57};
58
62inline NativeFileStream::NativeFileStream(const std::string &path, ios_base::openmode openMode)
64{
65 open(path, openMode);
66}
67
71inline NativeFileStream::NativeFileStream(int fileDescriptor, ios_base::openmode openMode)
73{
74 open(fileDescriptor, openMode);
75}
76
81inline int NativeFileStream::fileDescriptor()
82{
83 return m_data.descriptor;
84}
85
86#ifdef PLATFORM_WINDOWS
91inline NativeFileStream::Handle NativeFileStream::fileHandle()
92{
93 return m_data.handle;
94}
95#endif
96
101inline bool NativeFileStream::is_open() const
102{
103 return isOpen();
104}
105
106#else // CPP_UTILITIES_USE_NATIVE_FILE_BUFFER
107
108using NativeFileStream = std::fstream;
109
110#endif
111
112} // namespace CppUtilities
113
114#endif // IOUTILITIES_NATIVE_FILE_STREAM
#define CPP_UTILITIES_EXPORT
Marks the symbol to be exported by the c++utilities library.
Definition global.h:14
Contains all utilities provides by the c++utilities library.
IntegralType stringToNumber(const StringType &string, BaseType base=10)
Converts the given string to an unsigned/signed number assuming string uses the specified base.
std::fstream NativeFileStream