本文整理汇总了C++中IStream::CanWrite方法的典型用法代码示例。如果您正苦于以下问题:C++ IStream::CanWrite方法的具体用法?C++ IStream::CanWrite怎么用?C++ IStream::CanWrite使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IStream
的用法示例。
在下文中一共展示了IStream::CanWrite方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ReadToStream
size_t IStream::ReadToStream(size_t size, IStream& dest, size_t bufferSize/*=1024*/)const
{
RETURN_ZERO_IF_FALSE(CanRead() && dest.CanWrite());
if (dest.IsPtrAvailable())//could directly write
{
dest.ReserveLeftSize(size);
byte* buffer = dest.MutablePtr();
MemoryData destBuffer = MemoryData::FromStatic(buffer, size);
return ReadDataTo(destBuffer, DataReadingMode::AlwaysCopy);
}
else
{
//should use temp buffer
size_t count = 0;
size_t realBufferSize = Math::Min(LeftLength(), bufferSize, size);
MemoryData tempBuffer = MemoryData::Alloc(realBufferSize);
do
{
size_t readSize = Math::Min(size, realBufferSize);
tempBuffer.ForceSetSize(readSize);
readSize = ReadDataTo(tempBuffer, DataReadingMode::AlwaysCopy);
BREAK_IF_ZERO(readSize);
tempBuffer.ForceSetSize(readSize);
count += dest.WriteData(tempBuffer);
tempBuffer.ForceSetSize(realBufferSize);
size -= readSize;
} while (size > 0);
return count;
}
}
示例2: CopyTo
size_t IStream::CopyTo(IStream& dest, size_t bufferSize/*=1024*/)const
{
RETURN_ZERO_IF_FALSE(CanRead() && dest.CanWrite());
size_t realBufferSize = Math::Min(LeftLength(), bufferSize);
size_t count = 0;
MemoryData buffer = MemoryData::Alloc(realBufferSize);
do
{
size_t readSize = ReadDataTo(buffer, DataReadingMode::AlwaysCopy);
BREAK_IF_ZERO(readSize);
buffer.ForceSetSize(readSize);
count += dest.WriteData(buffer);
buffer.ForceSetSize(realBufferSize);
} while (true);
return count;
}