当前位置: 首页 > news >正文

苏宁易购网站建设的思路在线电影网站建设论文

苏宁易购网站建设的思路,在线电影网站建设论文,网站开发 文档,做暖暖视频免费观看免费网站项目完整版在#xff1a; 一、buffer模块#xff1a; 缓冲区模块 Buffer模块是一个缓冲区模块#xff0c;用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 二、提供的功能 存储数据#xff0c;取出数据 三、实现思想 1.实现换出去得有一块内存空间#xff0c;采…项目完整版在 一、buffer模块 缓冲区模块 Buffer模块是一个缓冲区模块用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 二、提供的功能 存储数据取出数据 三、实现思想 1.实现换出去得有一块内存空间采用vector ,vector底层是一个线性的内存空间 一要素 1.默认空间大小 2.当前的读取数据位置 3.当前的写入数据位置 二操作 写入位置 当前写入位置指向哪里从哪里开始写入 如果后续剩余空间不够了考虑整体缓冲区空闲空间是否足够因为读位置也会向后偏移前后有可能有空闲空间 足够将数据移动到起始位置 不够扩容从当前写位置开始扩容足够大小 数据一旦写入成功当前写位置向后偏移读取数据 当前的读取位置指向哪里就从哪里开始读取前提是有数据可读 可读数据大小当前写入位置减去当前读取位置 三框架设计 class buffer {private:std::vectorchar _buffer;// 位置是一个相对偏移量而不是绝对地址uint64_t _read_idx; // 读位置uint64_t _write_idx; // 写位置public:1. 获取当前写的位置2. 确保可写空间足够3. 获取前沿空间大小4. 获取后沿空间大小5. 将写入据位置向后移动指定长度6. 获取当前读取位置的地址7. 获取可读空间大小8. 将读位置向后移动指定长度9. clear四、实现代码 #include ctime #include cstring #include iostream #include vector #include cassert #include string using namespace std; #define BUFFER_SIZE 1024 class Buffer {private:std::vectorchar _buffer; // 使用vector进行内存空间管理uint64_t _read_idx; // 读偏移uint64_t _write_idx; // 写偏移public:Buffer():_read_idx(0),_write_idx(0),_buffer(BUFFER_SIZE) {}char* begin() {return *_buffer.begin();}// 获取当前写入起始地址char *writePosition() { return begin() _write_idx;}// 获取当前读取起始地址char *readPosition() { return begin() _read_idx; }// 获取缓冲区末尾空间大小 —— 写偏移之后的空闲空间总体大小减去写偏移uint64_t tailIdleSize() {return _buffer.size() - _write_idx; }// 获取缓冲区起始空间大小 —— 读偏移之前的空闲空间uint64_t handIdleSize() {return _read_idx ;}// 获取可读空间大小 写偏移 - 读偏移 uint64_t readAbleSize() {return _write_idx - _read_idx ;} // 将读偏移向后移动void moveReadOffset(uint64_t len) { // 向后移动大小必须小于可读数据大小assert(len readAbleSize());_read_idx len; }// 将写偏移向后移动void moveWriteOffset(uint64_t len) { assert(len tailIdleSize());_write_idx len;}void ensureWriteSpace(uint64_t len) {// 确保可写空间足够 整体空间够了就移动数据否则就扩容 if (tailIdleSize() len) return;// 不够的话 判断加上起始位置够不够,够了将数据移动到起始位置if (len tailIdleSize() handIdleSize()) {uint64_t rsz readAbleSize(); //帮当前数据大小先保存起来std::copy(readPosition(),readPosition() rsz,begin()); // 把可读数据拷贝到起始位置_read_idx 0; // 读归为0_write_idx rsz; // 可读数据大小是写的偏移量}else { // 总体空间不够需要扩容不移动数据直接给写偏移之后扩容足够空间即可_buffer.resize(_write_idx len);}}// 写入数据void Write(const void *data,uint64_t len) {ensureWriteSpace(len);const char *d (const char*) data;std::copy(d,d len,writePosition());}void WriteAndPush(void* data,uint64_t len) {Write(data,len);moveWriteOffset(len);}void WriteStringAndPush(const std::string data) {writeString(data);moveWriteOffset(data.size());}void writeString(const std::string data) {return Write(data.c_str(),data.size());}void writeBuffer(Buffer data) {return Write(data.readPosition(),data.readAbleSize());}void writeBufferAndPush(Buffer data) {writeBuffer(data);moveWriteOffset(data.readAbleSize());}std::string readAsString (uint64_t len) {assert(len readAbleSize());std::string str;str.resize(len);Read(str[0],len);return str;}void Read(void *buf,uint64_t len) {// 读取数据 1. 保证足够的空间 2.拷贝数据进去// 要求获取的大小必须小于可读数据大小assert(len readAbleSize());std::copy(readPosition(),readPosition() len,(char*)buf);}void readAndPop(void *buf,uint64_t len) {Read(buf,len);moveReadOffset(len);}// 逐步调试std::string ReadAsStringAndPop(uint64_t len) {assert(len readAbleSize());std::string str readAsString(len);moveReadOffset(len);return str;}char* FindCRLF() {char *res (char*)memchr(readPosition(),\n,readAbleSize());return res;}// 通常获取一行数据这种情况针对是std::string getLine() {char* pos FindCRLF();if (pos NULL) {return ;}// 1 为了把换行数据取出来return readAsString(pos - readPosition() 1);}std::string getLineAndPop() {std::string str getLine();moveReadOffset(str.size());return str;}void Clear() { // 清空缓冲区clear// 只需要将偏移量归0即可_read_idx 0;_write_idx 0;} };五、进行测试 #include server.hpp using namespace std; // 控制打印信息 #define INF 0 #define DBG 1 #define ERR 2 #define LOG_LEVEL INF#define LOG(level,format,...) do{\if (level LOG_LEVEL) break;\time_t t time(NULL);\struct tm *ltm localtime(t);\char tmp[23] {0};\strftime(tmp,31,%H:%M:%S,ltm);\fprintf(stdout,[%s,%s:%d] format \n,tmp,__FILE__,__LINE__,##__VA_ARGS__);\ }while(0)#define INF_LOG(format, ...) LOG(INF, format, ##__VA_ARGS__) #define DBG_LOG(format, ...) LOG(DBG, format, ##__VA_ARGS__) #define ERR_LOG(format, ...) LOG(ERR, format, ##__VA_ARGS__)int main() {Buffer buf;std::string str hello!;// buf.WriteStringAndPush(str);// Buffer buf1;// buf1.writeBufferAndPush(buf);// std::string tmp;// tmp buf1.ReadAsStringAndPop(buf.readAbleSize());// cout tmp endl;// cout buf.readAbleSize() endl;// cout buf1.readAbleSize() endl;for (int i 0; i 300; i ) {std::string str hello std::to_string(i) \n;buf.WriteStringAndPush(str);}while(buf.readAbleSize() 0) {string line buf.getLineAndPop();LOG(hello); }// string tmp;// tmp buf.ReadAsStringAndPop(buf.readAbleSize());// cout tmp endl;return 0; }中秋快乐
http://www.w-s-a.com/news/554519/

相关文章:

  • 了解做房产广告的网站手机版官方网站的建设
  • 如何与别的网站做友情链接做网站排名大概要多少钱
  • 东莞市锂电池网站建设HTML5怎么做自适应网站
  • 江苏城乡建设学校网站群晖建立wordpress
  • wordpress导入网站模板seo自学网官网
  • 购物网站服务器带宽北京网站开发周期
  • 同性做视频网站网站怎么添加栏目
  • 新余网站设计seo自学网站
  • 新乡个人网站建设价格wordpress数据插件
  • 你是网站设计有限公司的项目经理网站推广的重要性
  • 网站定制开发怎么写泸州设计公司有哪些
  • 上海网站建设zj kt迅速编程做网站
  • 郑州服装 网站建设网站栏目合理性
  • 平面设计在线网站最新汽油价格调整最新消息
  • 刷单网站建设wordpress缩略图 裁剪
  • 视差 网站泰州公司做网站
  • 广州网站优化系统怎么做淘客网站
  • 类似凡科互动的网站wordpress网站下载
  • 临沂网站制作公司安卓app开发实例教程
  • 泰州做网站 泰公网络科技公司网站升级中html
  • 如何做授权网站网站设计心得
  • 网站排名快速上升wordpress自动标签页
  • 做的好的手机网站有哪些万网域名交易
  • 网站怎么做漂亮点做陶瓷的公司网站
  • 软件开发设计制作网站下载自己怎么做视频收费网站
  • 江苏省建设安全协会网站天津网站建设哪家公司好
  • 资源类网站怎么做的网站上线准备工作
  • 长沙专业网站建设怎么做企业建站公司服务
  • 肇庆市有限公司网站建设手机直接看的网站有哪些
  • 织梦修改网站后备份英语作文模板高中