本文整理汇总了C++中StreamBuffer::Swap方法的典型用法代码示例。如果您正苦于以下问题:C++ StreamBuffer::Swap方法的具体用法?C++ StreamBuffer::Swap怎么用?C++ StreamBuffer::Swap使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StreamBuffer
的用法示例。
在下文中一共展示了StreamBuffer::Swap方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CutOff
StreamBuffer StreamBuffer::CutOff(std::size_t uSize){
StreamBuffer sbufRet;
if(x_uSize <= uSize){
sbufRet.Swap(*this);
} else {
auto pNode = x_lstBuffers.GetFirst();
std::size_t uTotal = 0; // 这是 [x_lstBuffers.GetFirst(), pNode) 的字节数,不含零头。
while(uTotal < uSize){
ASSERT(pNode);
auto &vBuffer = pNode->Get();
const std::size_t uRemaining = uSize - uTotal;
const auto uAvail = vBuffer.m_uWrite - vBuffer.m_uRead;
if(uRemaining < uAvail){
auto &vNewBuffer = xChunk::PushPooled(sbufRet.x_lstBuffers);
vNewBuffer.m_uRead = 0;
vNewBuffer.m_uWrite = uRemaining;
std::memcpy(vNewBuffer.m_abyData, vBuffer.m_abyData + vBuffer.m_uRead, uRemaining);
vBuffer.m_uRead += uRemaining;
sbufRet.x_uSize += uRemaining;
x_uSize -= uRemaining;
break;
}
uTotal += uAvail;
pNode = pNode->GetNext();
}
sbufRet.x_lstBuffers.Splice(sbufRet.x_lstBuffers.GetFirst(),
x_lstBuffers, x_lstBuffers.GetFirst(), pNode);
sbufRet.x_uSize += uTotal;
x_uSize -= uTotal;
}
return sbufRet;
}