c++缓冲区 vBufferChar.hpp
//vbuffer_char.hpp
//vov
#ifndef V_BUFFER_CHAR_HPP
#define V_BUFFER_CHAR_HPP
#include <iostream>
#include <vector>
#include <cstring>
#define BUFFER_CAPACITY (16000)
class vBufferChar
{
std::vector<char> buffer_;
int data_size_;
public:
vBufferChar();
vBufferChar(int size);
~vBufferChar();
int read(char* data,int size);
void write(const char* data,int size);
//get size of storge data
int size();
//get size of buffer
int capacity();
private:
//copy constructor
vBufferChar(const vBufferChar& t) {}
//assignment constructor
vBufferChar& operator=(const vBufferChar& t) {}
int GetFromBeg(char* data,int size);
void DelFromBeg(int size);
void AddFromEnd(const char* data,int size);
};
//public
vBufferChar::vBufferChar() {
buffer_=std::vector<char>(BUFFER_CAPACITY,0);
data_size_=0;
}
vBufferChar::vBufferChar(int size) {
buffer_=std::vector<char>((size>0)?size:BUFFER_CAPACITY,0);
data_size_=0;
}
vBufferChar::~vBufferChar() {
}
int vBufferChar::size() {
return data_size_;
}
int vBufferChar::capacity() {
return buffer_.size();
}
int vBufferChar::read(char* data,int size) {
if(!data || size<=0) {
return 0;
}
int read_size=GetFromBeg(data,size);
if(read_size>0) {
DelFromBeg(read_size);
}
return read_size;
}
void vBufferChar::write(const char* data,int size) {
if(!data || size<=0) {
return;
}
if(size <=(buffer_.size()-data_size_)) {
AddFromEnd(data,size);
return;
}
if(size>=buffer_.size()) {
std::cout<<"[vBufferChar]write:loss data-1:"<<data_size_+(size-buffer_.size())<<std::endl;
DelFromBeg(data_size_);
AddFromEnd(data+(size-buffer_.size()),buffer_.size());
return;
}
if((size>(buffer_.size()-data_size_)) && (size <buffer_.size())) {
std::cout<<"[vBufferChar]write:loss data-2:"<<size-(buffer_.size()-data_size_)<<std::endl;
DelFromBeg(size-(buffer_.size()-data_size_));
AddFromEnd(data,size);
return;
}
}
//private
int vBufferChar::GetFromBeg(char* data,int size) {
if(size<=0) {
return 0;
}
int size_can_read=(size<data_size_)?size:data_size_;
memcpy(data,buffer_.data(),size_can_read);
return size_can_read;
}
void vBufferChar::DelFromBeg(int size) {
if(size<=0) {
return;
}
int size_delete=(size<data_size_)?size:data_size_;
data_size_-=size_delete;
memcpy(buffer_.data(),buffer_.data()+size_delete,data_size_);
return;
}
void vBufferChar::AddFromEnd(const char* data,int size) {
if(size<=0||size>(buffer_.size()-data_size_)) {
return;
}
memcpy(buffer_.data()+data_size_,data,size);
data_size_+=size;
}
#endif
c++缓冲区 vBufferChar.hpp的更多相关文章
- boost 循环缓冲区
boost 循环缓冲区 #include <boost/circular_buffer.hpp> int _tmain(int argc, _TCHAR* argv[]) { boost: ...
- scanf()中清除输入缓冲区的几种方法归纳
应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种 ...
- php缓冲区详解
什么是缓冲区(buffer)? 简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料. 其实缓冲区最 ...
- 缓冲区溢出利用——捕获eip的傻瓜式指南
[译文] 摘要:为一个简单的有漏洞程序写一个简单的缓冲区溢出EXP,聚焦于遇到的问题和关键性的教训,提供详细而彻底的描述 内容表:1. I pity the fool, who can't smash ...
- SEED信息安全实验系列:缓冲区溢出漏洞实验
缓冲区溢出漏洞实验 本课程详细出自http://www.shiyanlou.com/courses/231,转载请注明出处. 一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情 ...
- Apache service named reported the following error(OS 10055)由于系统缓冲区空间不足或队列已满解决办法?
apache启动失败报错: The Apache service named reported the following error:>>> AH00451: no listeni ...
- c/c++ 缓冲区的刷新
利用string 对象查看缓冲区的变化,因为每个string对象在输入时会以空格作为分界. #include<iostream> #include<string> using ...
- PHP的输出缓冲区(转)
什么是缓冲区?简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料.其实缓冲区最本质的作用就是,协调 ...
- Java NIO2:缓冲区
什么是缓冲区 一个缓冲区对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索.缓冲区像前篇文章讨论的那样被写满和释放,对于每个非布尔原始数据类型都有一个缓 ...
随机推荐
- Git在公司内部的使用规范
Git在公司内部的使用规范 目录 Git在公司内部的使用规范 1.版本定义 2.系统开发环境 3. 分支定义 4.Commit 日志规范 5.开发工作流程: 5.1.常规分支debug流程: 5.2. ...
- 基于 HTML5 WebGL 与 GIS 的智慧机场大数据可视化分析【转载】
前言:大数据,人工智能,工业物联网,5G 已经或者正在潜移默化地改变着我们的生活.在信息技术快速发展的时代,谁能抓住数据的核心,利用有效的方法对数据做数据挖掘和数据分析,从数据中发现趋势,谁就能做到精 ...
- Django实现简单的用户添加、删除、修改等功能
一. Django必要的知识点补充 1. templates和static文件夹及其配置 1.1 templates文件夹 所有的HTML文件默认都放在templates文件夹下. 1.2 stati ...
- 文本编辑器之kindeditor
摘要:最近在自己学习搭建网站的时候,突然要搭建网站的时候发现了一个好东西,那就是kindeditor这个文本编辑器,这个编辑器简单好用,而且很小,并且是开源的. 文本编辑器介绍 KindEditor ...
- NBL小可爱纪念赛「 第一弹 」 游记(部分题解)
比赛链接 洛谷:禁止含有侮辱性质的比赛 . ??? 反正我觉得,gyx挺危险的 不说废话. 首先,比赛经验,前几个小时不打,跟着刷榜. 一看 T1. 发现是道水题,直接切掉了. 然后看到了 T2. 感 ...
- 北邮oj 97. 二叉排序树
97. 二叉排序树 时间限制 1000 ms 内存限制 65536 KB 题目描述 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 若左子树非空,则左子树上所有节 ...
- mysql系列--sql实现原理
count(*) MyISAM 引擎把⼀个表的总⾏数存在了磁盘上,因此执⾏ count(*) 的时候会直接返回这个数,效率很⾼:但是加了条件则不能快速返回⽽ InnoDB 引擎就麻烦了,它执⾏ cou ...
- 决战Leetcode: easy part(1-50)
本博客是个人原创的针对leetcode上的problem的解法,所有solution都基本通过了leetcode的官方Judging,个别未通过的例外情况会在相应部分作特别说明. 欢迎互相交流! em ...
- SpringBoot安装与配置
1.环境准备 1.1.Maven安装配置 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. 下载Maven可执行文件 cd /usr/local ...
- 编译原理:非确定的自动机NFA确定化为DFA
1.设有 NFA M=( {0,1,2,3}, {a,b},f,0,{3} ),其中 f(0,a)={0,1} f(0,b)={0} f(1,b)={2} f(2,b)={3} 画出状态转换矩阵 ...