|
CircularBufferPutToMem | 整数型 | |
|
lp | 整数型 | | | |
pData | 整数型 | | | | Index | 整数型 | | | | count | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
buffer | CIRCULARBUFFER_STREAM | | |
pOld | 整数型 | | |
srcIndex | 整数型 | | |
bytesToProcess | 整数型 | | |
chunk | 整数型 | | |
如果真 (count ≤ 0
)调试输出 (“计数必须为正。”)返回 (0
)pOld = _SWAP_CIRCULARBUFFER_STREAM (buffer, lp)
如果真 (buffer.Size + count > buffer.Capacity
)调试输出 (“缓冲区没有足够的容量来放置新项目。”)_SWAP_CIRCULARBUFFER_STREAM (buffer, pOld
)返回 (0
)InterlockedIncrement (buffer.ref)srcIndex = Index
bytesToProcess = count
判断循环首 (bytesToProcess > 0
)chunk =
取较小值 (buffer.Capacity - buffer.Tail, bytesToProcess
)RtlMoveMemory (buffer.pBuffer + buffer.Tail, pData + srcIndex, chunk
)
判断 (buffer.Tail + chunk = buffer.Capacity
)InterlockedExchange (buffer.Tail, 0
)
InterlockedExchangeAdd (buffer.Tail, chunk
)InterlockedExchangeAdd (buffer.Size, chunk)srcIndex = srcIndex + chunk
bytesToProcess = bytesToProcess - chunk
判断循环尾 ()CircularBufferFree (lp
)_SWAP_CIRCULARBUFFER_STREAM (buffer, pOld
)返回 (count
)|
CircularBufferGetBytesFoIndex | 字节集 | |
|
lp | 整数型 | | | |
Index | 整数型 | | | | count | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
buffer | CIRCULARBUFFER_STREAM | | |
pOld | 整数型 | | |
bytesCopied | 整数型 | | |
dstIndex | 整数型 | | |
chunk | 整数型 | | |
arybyte | 字节集 | | |
pData | 整数型 | | |
如果真 (Index < 0
)调试输出 (“指定偏移量必须为正 ”)返回 ({ })
如果真 (count < 0
)调试输出 (“指定的长度必须为正。”)返回 ({ })pOld = _SWAP_CIRCULARBUFFER_STREAM (buffer, lp)
如果真 (count > buffer.Size
)调试输出 (“环形缓冲区的内容不足以进行读取/读取操作。”)_SWAP_CIRCULARBUFFER_STREAM (buffer, pOld
)返回 ({ })InterlockedIncrement (buffer.ref)bytesCopied = 0
dstIndex = Index
arybyte =
取空白字节集 (count
)pData =
取指针_字节集型 (arybyte
)
判断循环首 (count > 0
)chunk =
取较小值 (buffer.Capacity - buffer.Head, count
)RtlMoveMemory (pData + dstIndex, buffer.pBuffer + buffer.Head, chunk
)
判断 (buffer.Head + chunk = buffer.Capacity
)InterlockedExchange (buffer.Head, 0
)
InterlockedExchangeAdd (buffer.Head, chunk
)InterlockedExchangeAdd (buffer.Size, -chunk)dstIndex = dstIndex + chunk
bytesCopied = bytesCopied + chunk
count = count - chunk
判断循环尾 ()CircularBufferFree (lp
)_SWAP_CIRCULARBUFFER_STREAM (buffer, pOld
)返回 (arybyte
)