summaryrefslogtreecommitdiffstats
path: root/source/core/slang-stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/slang-stream.cpp')
-rw-r--r--source/core/slang-stream.cpp162
1 files changed, 73 insertions, 89 deletions
diff --git a/source/core/slang-stream.cpp b/source/core/slang-stream.cpp
index 6507c2e56..ca7528f61 100644
--- a/source/core/slang-stream.cpp
+++ b/source/core/slang-stream.cpp
@@ -2,10 +2,11 @@
#ifdef _WIN32
#include <share.h>
#endif
-#include <thread>
#include "slang-io.h"
#include "slang-process.h"
+#include <thread>
+
namespace Slang
{
@@ -20,10 +21,8 @@ SlangResult Stream::readExactly(void* buffer, size_t length)
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FileStream !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-FileStream::FileStream() :
- m_handle(nullptr),
- m_fileAccess(FileAccess::None),
- m_endReached(false)
+FileStream::FileStream()
+ : m_handle(nullptr), m_fileAccess(FileAccess::None), m_endReached(false)
{
}
@@ -33,7 +32,11 @@ SlangResult FileStream::init(const String& fileName, FileMode fileMode)
return _init(fileName, fileMode, access, FileShare::None);
}
-SlangResult FileStream::init(const String& fileName, FileMode fileMode, FileAccess access, FileShare share)
+SlangResult FileStream::init(
+ const String& fileName,
+ FileMode fileMode,
+ FileAccess access,
+ FileShare share)
{
return _init(fileName, fileMode, access, share);
}
@@ -120,46 +123,35 @@ SlangResult FileStream::_init(
mode = "ab";
}
break;
- default:
- break;
+ default: break;
}
#ifdef _WIN32
// NOTE! This works because we know all the characters in the mode
// are encoded directly as the same value in a wchar_t.
- //
+ //
// Work out the length *including* terminating 0
const Index modeLength = Index(::strlen(mode)) + 1;
wchar_t wideMode[8];
SLANG_ASSERT(modeLength <= SLANG_COUNT_OF(wideMode));
- // Copy to wchar_t
- for (Index i = 0; i < modeLength ; ++i)
+ // Copy to wchar_t
+ for (Index i = 0; i < modeLength; ++i)
{
wideMode[i] = wchar_t(mode[i]);
}
-
+
int shFlag = _SH_DENYRW;
switch (share)
{
- case FileShare::None:
- shFlag = _SH_DENYRW;
- break;
- case FileShare::ReadOnly:
- shFlag = _SH_DENYWR;
- break;
- case FileShare::WriteOnly:
- shFlag = _SH_DENYRD;
- break;
- case FileShare::ReadWrite:
- shFlag = _SH_DENYNO;
- break;
- default:
- SLANG_ASSERT(!"Invalid file share mode.");
- return SLANG_FAIL;
+ case FileShare::None: shFlag = _SH_DENYRW; break;
+ case FileShare::ReadOnly: shFlag = _SH_DENYWR; break;
+ case FileShare::WriteOnly: shFlag = _SH_DENYRD; break;
+ case FileShare::ReadWrite: shFlag = _SH_DENYNO; break;
+ default: SLANG_ASSERT(!"Invalid file share mode."); return SLANG_FAIL;
}
if (share == FileShare::None)
-#pragma warning(suppress:4996)
+#pragma warning(suppress : 4996)
m_handle = _wfopen(fileName.toWString(), wideMode);
else
m_handle = _wfsopen(fileName.toWString(), wideMode, shFlag);
@@ -189,7 +181,7 @@ Int64 FileStream::getPosition()
return pos;
#elif defined(__APPLE__)
return ftell(m_handle);
-#else
+#else
fpos64_t pos;
fgetpos64(m_handle, &pos);
return *(Int64*)(&pos);
@@ -201,18 +193,10 @@ SlangResult FileStream::seek(SeekOrigin seekOrigin, Int64 offset)
int fseekOrigin;
switch (seekOrigin)
{
- case SeekOrigin::Start:
- fseekOrigin = SEEK_SET;
- break;
- case SeekOrigin::End:
- fseekOrigin = SEEK_END;
- break;
- case SeekOrigin::Current:
- fseekOrigin = SEEK_CUR;
- break;
- default:
- SLANG_ASSERT(!"Unsupported seek origin.");
- return SLANG_FAIL;
+ case SeekOrigin::Start: fseekOrigin = SEEK_SET; break;
+ case SeekOrigin::End: fseekOrigin = SEEK_END; break;
+ case SeekOrigin::Current: fseekOrigin = SEEK_CUR; break;
+ default: SLANG_ASSERT(!"Unsupported seek origin."); return SLANG_FAIL;
}
// If endReached is intended to be like feof - then doing a seek will reset it
@@ -301,18 +285,10 @@ SlangResult MemoryStreamBase::seek(SeekOrigin origin, Int64 offset)
Int64 pos = 0;
switch (origin)
{
- case SeekOrigin::Start:
- pos = offset;
- break;
- case SeekOrigin::End:
- pos = Int64(m_contentsSize) + offset;
- break;
- case SeekOrigin::Current:
- pos = Int64(m_position) + offset;
- break;
- default:
- SLANG_ASSERT(!"Unsupported seek origin.");
- return SLANG_E_NOT_IMPLEMENTED;
+ case SeekOrigin::Start: pos = offset; break;
+ case SeekOrigin::End: pos = Int64(m_contentsSize) + offset; break;
+ case SeekOrigin::Current: pos = Int64(m_position) + offset; break;
+ default: SLANG_ASSERT(!"Unsupported seek origin."); return SLANG_E_NOT_IMPLEMENTED;
}
m_atEnd = false;
@@ -338,7 +314,7 @@ SlangResult MemoryStreamBase::read(void* buffer, size_t length, size_t& outReadB
if (maxRead == 0 && length > 0)
{
// At end of stream
- m_atEnd = true;
+ m_atEnd = true;
return SLANG_OK;
}
@@ -353,7 +329,7 @@ SlangResult MemoryStreamBase::read(void* buffer, size_t length, size_t& outReadB
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! OwnedMemoryStream !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-SlangResult OwnedMemoryStream::write(const void * buffer, size_t length)
+SlangResult OwnedMemoryStream::write(const void* buffer, size_t length)
{
if (!canWrite())
{
@@ -406,7 +382,8 @@ SlangResult BufferedReadStream::seek(SeekOrigin origin, Int64 offset)
// So we could seek backwards up to -m_startIndex.
// We don't worry about this here, for simplicity sake.
- if (origin == SeekOrigin::End || origin == SeekOrigin::Start || offset < 0 || offset >= Int64(getCount()))
+ if (origin == SeekOrigin::End || origin == SeekOrigin::Start || offset < 0 ||
+ offset >= Int64(getCount()))
{
// Empty the buffer
_resetBuffer();
@@ -420,8 +397,9 @@ SlangResult BufferedReadStream::seek(SeekOrigin origin, Int64 offset)
}
SlangResult BufferedReadStream::read(void* inBuffer, size_t length, size_t& outReadBytes)
-{
- // If the buffer has no data and the read size is larger than the default read size - may as well just read directly into the output buffer
+{
+ // If the buffer has no data and the read size is larger than the default read size - may as
+ // well just read directly into the output buffer
if (getCount() == 0 && length > m_defaultReadSize)
{
return m_stream->read(inBuffer, length, outReadBytes);
@@ -542,20 +520,21 @@ SlangResult BufferedReadStream::update()
}
else
{
- // Make sure we have the space
+ // Make sure we have the space
const Index prevCount = m_buffer.getCount();
m_buffer.setCount(prevCount + m_defaultReadSize);
m_buffer.setCount(prevCount);
}
}
-
+
{
const Index prevCount = m_buffer.getCount();
m_buffer.setCount(prevCount + m_defaultReadSize);
size_t readBytes = 0;
- const SlangResult res = m_stream->read(m_buffer.getBuffer() + prevCount, m_defaultReadSize, readBytes);
+ const SlangResult res =
+ m_stream->read(m_buffer.getBuffer() + prevCount, m_defaultReadSize, readBytes);
m_buffer.setCount(prevCount + Index(readBytes));
@@ -591,41 +570,37 @@ SlangResult BufferedReadStream::readUntilContains(size_t size)
SlangResult StreamUtil::readAndWrite(
Stream* writeStream,
ArrayView<Byte> bytesToWrite,
- Stream* readStream, List<Byte>& outReadBytes,
+ Stream* readStream,
+ List<Byte>& outReadBytes,
Stream* errStream,
List<Byte>& outErrBytes)
{
- std::thread writeThread([&]()
+ std::thread writeThread(
+ [&]()
{
writeStream->write(bytesToWrite.getBuffer(), (size_t)bytesToWrite.getCount());
writeStream->close();
});
SlangResult readResult = SLANG_OK;
- std::thread readThread([&]()
- {
- readResult = readAll(readStream, 1024, outReadBytes);
- });
- std::thread readErrThread([&]()
- {
- readAll(errStream, 1024, outErrBytes);
- });
+ std::thread readThread([&]() { readResult = readAll(readStream, 1024, outReadBytes); });
+ std::thread readErrThread([&]() { readAll(errStream, 1024, outErrBytes); });
writeThread.join();
readThread.join();
readErrThread.join();
return readResult;
}
-/* static */SlangResult StreamUtil::readAll(Stream* stream, size_t readSize, List<Byte>& ioBytes)
+/* static */ SlangResult StreamUtil::readAll(Stream* stream, size_t readSize, List<Byte>& ioBytes)
{
while (!stream->isEnd())
{
SLANG_RETURN_ON_FAIL(read(stream, readSize, ioBytes));
}
-
+
return SLANG_OK;
}
-/* static */SlangResult StreamUtil::read(Stream* stream, size_t readSize, List<Byte>& ioBytes)
+/* static */ SlangResult StreamUtil::read(Stream* stream, size_t readSize, List<Byte>& ioBytes)
{
readSize = (readSize <= 0) ? 1024 : readSize;
@@ -635,7 +610,8 @@ SlangResult StreamUtil::readAndWrite(
ioBytes.setCount(prevCount + readSize);
size_t readBytesCount;
- SLANG_RETURN_ON_FAIL(stream->read(ioBytes.getBuffer() + prevCount, readSize, readBytesCount));
+ SLANG_RETURN_ON_FAIL(
+ stream->read(ioBytes.getBuffer() + prevCount, readSize, readBytesCount));
ioBytes.setCount(prevCount + Index(readBytesCount));
if (readBytesCount == 0)
@@ -645,7 +621,7 @@ SlangResult StreamUtil::readAndWrite(
}
}
-/* static */SlangResult StreamUtil::discard(Stream* stream)
+/* static */ SlangResult StreamUtil::discard(Stream* stream)
{
Byte buf[1024];
const Index bufSize = SLANG_COUNT_OF(buf);
@@ -654,7 +630,7 @@ SlangResult StreamUtil::readAndWrite(
{
size_t readBytesCount;
SLANG_RETURN_ON_FAIL(stream->read(buf, bufSize, readBytesCount));
-
+
if (readBytesCount == 0)
{
return SLANG_OK;
@@ -662,7 +638,7 @@ SlangResult StreamUtil::readAndWrite(
}
}
-/* static */SlangResult StreamUtil::discardAll(Stream* stream)
+/* static */ SlangResult StreamUtil::discardAll(Stream* stream)
{
while (!stream->isEnd())
{
@@ -672,7 +648,10 @@ SlangResult StreamUtil::readAndWrite(
}
-/* static */SlangResult StreamUtil::readOrDiscard(Stream* stream, size_t readSize, List<Byte>* ioBytes)
+/* static */ SlangResult StreamUtil::readOrDiscard(
+ Stream* stream,
+ size_t readSize,
+ List<Byte>* ioBytes)
{
if (ioBytes)
{
@@ -684,7 +663,10 @@ SlangResult StreamUtil::readAndWrite(
}
}
-/* static */SlangResult StreamUtil::readOrDiscardAll(Stream* stream, size_t readSize, List<Byte>* ioBytes)
+/* static */ SlangResult StreamUtil::readOrDiscardAll(
+ Stream* stream,
+ size_t readSize,
+ List<Byte>* ioBytes)
{
if (ioBytes)
{
@@ -700,10 +682,10 @@ static FILE* _getFileFromStdStreamType(StdStreamType stdStream)
{
switch (stdStream)
{
- case StdStreamType::ErrorOut: return stderr;
- case StdStreamType::Out: return stdout;
- case StdStreamType::In: return stdin;
- default: return nullptr;
+ case StdStreamType::ErrorOut: return stderr;
+ case StdStreamType::Out: return stdout;
+ case StdStreamType::In: return stdin;
+ default: return nullptr;
}
}
@@ -711,14 +693,16 @@ static int _getBufferOptions(StreamBufferStyle style)
{
switch (style)
{
- case StreamBufferStyle::None: return _IONBF;
- case StreamBufferStyle::Line: return _IOLBF;
- default:
- case StreamBufferStyle::Full: return _IOFBF;
+ case StreamBufferStyle::None: return _IONBF;
+ case StreamBufferStyle::Line: return _IOLBF;
+ default:
+ case StreamBufferStyle::Full: return _IOFBF;
}
}
-/* static */SlangResult StreamUtil::setStreamBufferStyle(StdStreamType stdStream, StreamBufferStyle style)
+/* static */ SlangResult StreamUtil::setStreamBufferStyle(
+ StdStreamType stdStream,
+ StreamBufferStyle style)
{
FILE* file = _getFileFromStdStreamType(stdStream);