00.webserver源码阅读--buffer

buffer

缓冲区封装类,避免对char数组的直接操作,晦涩难懂。

主要通过一些指针来指明读写位置,底层存储为vector<char>.

buffer在本项目中的主要应用:log模块、http模块

成员变量

  • std::vector< char> buf
    • 本质上buffer还是char数组
  • std::atomic< std::size_t> read_pos
    • 读的位置
  • std::atomic< std::size_t> write_pos
    • 写的位置

(219条消息) 【C++】atomic简介_林多的博客-CSDN博客_atomic函数

成员函数

  • 构造函数

    • 根据传入参数决定char数组大小,将read_pos和write_pos置为0
  • 析构函数

  • writable_bytes

    • 返回可以写的字节(字符)数
  • readable_bytes

    • 返回可以读的字节(字符)数
  • prependable_bytes

    • 返回在read_pos之前已占用的字符数
  • peek

    • 返回read_pos对应char数组的指针
  • ensure_writable

    • 确定数组可用空间大于len(不够,就调用make_space来扩展数组)
  • has_written

    • 根据写入内容的长度,移动write_pos
  • retrieve

    • 根据已读内容的长度,移动read_pos
  • retrieve_until

    • 将read_pos移动到end的前一个位置
  • retrieve_all

    • 数组置0,read_pos和write_pos置为0
  • retrieve_all_to_str

    • 将可读内容转为string
  • begin_write_const和begin_write

    • 返回write_pos对应的char数组指针
  • append

    • 将传入内容写的char数组
  • read_fd

    • 通过readv(集中读)来将fd的内容读到数组
  • write_fd

    • 将char数组可读内容写到fd
  • begin_ptr

    • 返回char数组的起始指针
  • make_space

    • 若剩余的空间小于len,则通过vector的resize函数进行扩容
    • 否则,通过移动char数组的内容来挪出空间
posted @ 2023-01-08 11:33  DavidJIAN  阅读(46)  评论(0)    收藏  举报