@@ -54,21 +54,15 @@ class WebAssemblyInterface_EXPORT InputStreamBase
54
54
std::istream *
55
55
GetPointer ()
56
56
{
57
- return m_IStream;
57
+ return m_IStream. get () ;
58
58
}
59
59
60
60
void
61
61
SetJSON (const std::string & json)
62
62
{
63
- if (m_DeleteIStream && m_IStream != nullptr )
64
- {
65
- delete m_IStream;
66
- }
67
- m_DeleteIStream = false ;
68
- m_WasmStringStream = WasmStringStream::New ();
69
- m_WasmStringStream->SetJSON (json.c_str ());
70
-
71
- m_IStream = &(m_WasmStringStream->GetStringStream ());
63
+ const auto wasmStringStream = WasmStringStream::New ();
64
+ wasmStringStream->SetJSON (json.c_str ());
65
+ m_IStream = std::make_unique<std::stringstream>(std::move (wasmStringStream->GetStringStream ()));
72
66
}
73
67
74
68
virtual void
@@ -78,28 +72,20 @@ class WebAssemblyInterface_EXPORT InputStreamBase
78
72
void
79
73
SetFile (const std::string & fileName, const std::ios_base::openmode openMode)
80
74
{
81
- if (m_DeleteIStream && m_IStream != nullptr )
82
- {
83
- delete m_IStream;
84
- }
85
- m_IStream = new std::ifstream (fileName, openMode);
86
- m_DeleteIStream = true ;
75
+ m_IStream = std::make_unique<std::ifstream>(fileName, openMode);
87
76
}
88
77
89
78
InputStreamBase () = default ;
90
- virtual ~InputStreamBase ()
91
- {
92
- if (m_DeleteIStream && m_IStream != nullptr )
93
- {
94
- delete m_IStream;
95
- }
96
- }
97
79
98
- private:
99
- std::istream * m_IStream{ nullptr };
100
- bool m_DeleteIStream{ false };
80
+ // Move semantics for its derived classes:
81
+ InputStreamBase (InputStreamBase &&) = default ;
82
+ InputStreamBase &
83
+ operator =(InputStreamBase &&) = default ;
101
84
102
- WasmStringStream::Pointer m_WasmStringStream;
85
+ virtual ~InputStreamBase () = default ;
86
+
87
+ private:
88
+ std::unique_ptr<std::istream> m_IStream;
103
89
};
104
90
105
91
0 commit comments