Boost C++ 库

……世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

动态缓冲区要求 (版本 1) - Boost C++ 函数库
PrevUpHomeNext

动态缓冲区封装了内存存储,可以根据需要自动调整大小,内存被划分为输入序列和输出序列。这些内存区域是动态缓冲区序列的内部,但提供对元素的直接访问,以便它们可以有效地与 I/O 操作一起使用,例如套接字的 sendreceive 操作。写入动态缓冲区序列对象的输出序列的数据将附加到同一对象的输入序列的末尾。

动态缓冲区类型 X 除了满足下面列出的要求外,还必须满足 MoveConstructible (C++ 标准, [moveconstructible]) 类型的要求。

在下表中,X 表示动态缓冲区类,x 表示类型为 X& 的值,x1 表示类型为 const X& 的值,n 表示类型为 size_t 的值,u 表示标识符。

表 13. DynamicBuffer_v1 要求

表达式

type

断言/注
前提/后置条件

X::const_buffers_type

满足 ConstBufferSequence 要求的类型。

此类型表示与输入序列关联的内存。

X::mutable_buffers_type

满足 MutableBufferSequence 要求的类型。

此类型表示与输出序列关联的内存。

x1.size()

size_t

返回输入序列的大小(以字节为单位)。

x1.max_size()

size_t

返回允许的最大值,即输入序列和输出序列大小之和。

x1.capacity()

size_t

返回动态缓冲区在不需要重新分配的情况下可以容纳的输入序列和输出序列大小的最大之和。

x1.data()

X::const_buffers_type

返回一个常量缓冲区序列 u,该序列表示与输入序列关联的内存,并且 buffer_size(u) == size()

x.prepare(n)

X::mutable_buffers_type

要求:size() + n <= max_size()

返回一个可变缓冲区序列 u,表示输出序列,并且 buffer_size(u) == n。动态缓冲区根据需要重新分配内存。使用 data()prepare() 之前获取的所有常量或可变缓冲区序列都将失效。

抛出:如果 size() + n > max_size(),则抛出 length_error

x.commit(n)

将输出序列开头 n 字节追加到输入序列的末尾。输出序列的剩余部分将被丢弃。如果 n 大于输出序列的大小,则将整个输出序列追加到输入序列。使用 data()prepare() 之前获取的所有常量或可变缓冲区序列都将失效。

x.consume(n)

从输入序列的开头删除 n 字节。如果 n 大于输入序列的大小,则删除整个输入序列。使用 data()prepare() 之前获取的所有常量或可变缓冲区序列都将失效。



PrevUpHomeNext