new Stream for StreamView

This commit is contained in:
Ivan Morozov
2022-08-03 17:23:53 +03:00
parent ad10681ba0
commit 58f2b9d3f0
12 changed files with 161 additions and 129 deletions

View File

@ -8,15 +8,15 @@ std::streamsize CFCPP::Length(const CFCPP::Stream& st)
if (st.get() == nullptr)
return 0;
auto curPos = st->tellg();
st->seekg(0, std::ios_base::end);
auto ssize = st->tellg();
st->seekg(curPos);
auto curPos = st->tell();
st->seek(0, std::ios_base::end);
auto ssize = st->tell();
st->seek(curPos);
return ssize;
}
CFCPP::Stream CFCPP::OpenStream(std::wstring filename, bool bRewrite)
CFCPP::Stream CFCPP::OpenFileStream(std::wstring filename, bool bRewrite)
{
BYTE* pUtf8 = nullptr;
std::streamsize lLen = 0;
@ -24,29 +24,26 @@ CFCPP::Stream CFCPP::OpenStream(std::wstring filename, bool bRewrite)
std::string utf8filename(pUtf8, pUtf8 + lLen);
delete [] pUtf8;
return OpenStream(utf8filename, bRewrite);
return OpenFileStream(utf8filename, bRewrite);
}
CFCPP::Stream CFCPP::OpenStream(std::string filename, bool bRewrite)
CFCPP::Stream CFCPP::OpenFileStream(std::string filename, bool bRewrite)
{
filename = CorrectUnixPath(filename);
CFCPP::Stream st;
if (bRewrite)
st.reset(new std::fstream(filename, std::ios::app | std::ios::out | std::ios::binary | std::ios::in));
st.reset(new FStreamWrapper(filename, std::ios::app | std::ios::out | std::ios::binary | std::ios::in));
else
st.reset(new std::fstream(filename, std::ios::in | std::ios::binary));
st.reset(new FStreamWrapper(filename, std::ios::in | std::ios::binary));
return st;
}
bool CFCPP::IsOpen(const Stream &st)
{
if (std::dynamic_pointer_cast<std::fstream>(st))
return std::static_pointer_cast<std::fstream>(st)->is_open();
if (std::dynamic_pointer_cast<std::stringstream>(st))
return st != nullptr;
if (std::dynamic_pointer_cast<FStreamWrapper>(st))
return std::static_pointer_cast<FStreamWrapper>(st)->is_open();
return false;
}
@ -61,3 +58,4 @@ std::string CFCPP::CorrectUnixPath(const std::string original)
return str;
#endif
}