peek
lab0 的第一部分是模仿 telnet
的操作,用它给的 socket
实现去进行一个 http
的 GET
请求
每个 socket
都在 write
对面和 read
自己,这与后面实现的 StreamBytes
类不同
ByteStream
第二部分
按照要求,这是一个单线程读写 Stream
也就是说,同时只有一个 writer
和一个 reader
,而且 reader
读的还都是这个 writer
写的东西
这部分的主要问题在于 peek
函数
class Reader : public ByteStream
{
public:
std::string_view peek() const; // Peek at the next bytes in the buffer
函数是 const
的,说明没有副作用
返回值类型是 string_view
,这是一个引用,相当于 slice
这说明该函数应该返回自己内部数据的一个引用类型
然而 string_view
要求引用的数据是 contiguous
的,也就是说在内存里要挨着
如果我来定义这个 peek
我估计会返回一个迭代器
总之这样就只能用 vector
了,并且用它模拟一个环
然而新问题在于 peek
需要能返回多长的内容
如果返回迭代器就没有这个问题,但返回 string_view
代表返回的内容长度需要我来决定
额
既然用 vector
模拟环了,那么能返回的长度上限就不是 capacity
,而是从 head
到 vector.end()
之间,这样会导致 peek
不能保证 peek
到全部内容
...
然而这么写的话,测试都过了
不好说
在不 pop
的情况下,明显会出现有一部分内容永远无法 peek
到的情况
这应该不是一个好的定义
vector
模拟环
我计算下标的时候直接储存了单调递增的 head
和 tail
,虽然是 uint64
类型,但终究是有限数
...
不好说,感觉问题很大