📄 buffer.~cpp
字号:
#include "buffer.h"
#include <mem.h>
CBUFFER::CBUFFER()
{
Initialize();
}
CBUFFER::~CBUFFER()
{
for(int i=0;i<C_MAX_BUFFERNUM;i++)
{
if(m_pointerbuff->data!=NULL)
delete m_pointerbuff->data;
m_pointerbuff++;
} //*/
}
void CBUFFER::Initialize()
{
linktable.InitList(ReadHead);
linktable.InitList(WriteHead);
m_pointerbuff=m_buff;
for(int i=0;i<C_MAX_BUFFERNUM;i++)
{
m_pointerbuff->data=NULL;
m_pointerbuff->datalen=0;
m_pointerbuff++;
//初始化可写索引表可写状态
AppendWriteTable(i);
}
m_pointerbuff=m_buff;
}
//==============================================================================
//may be read index table
int CBUFFER::AppendReadTable(int index)
{
linktable.InsertList(ReadHead,index,1); //从表头插入
return E_OK;
}
int CBUFFER::DeleteReadTable(int index)
{
linktable.DeleteList(ReadHead,index,1); //从表头删除
return E_OK;
}
int CBUFFER::FindReadNode()
{
if(linktable.ListEmpty(ReadHead)==true) return E_FALSE;
int index=linktable.GetElem(ReadHead,1);
return index;
}
//may be write index table
int CBUFFER::AppendWriteTable(int index)
{
linktable.InsertList(WriteHead,index,1); //从表头插入
return E_OK;
}
//
int CBUFFER::DeleteWriteTable(int index)
{
linktable.DeleteList(WriteHead,index,1); //从表头删除
return E_OK;
}
//
int CBUFFER::FindWriteNode()
{
if(linktable.ListEmpty(WriteHead)==true) return E_FALSE;
int index=linktable.GetElem(WriteHead,1);
return index;
}
//==============================================================================
//
int CBUFFER::WriteData(unsigned char *data,int len)
{
int index;
index=FindWriteNode();
//printf("findwritehead index is %d \n",index);
if(index==E_FALSE) return E_FALSE;
if(m_buff[index].data==NULL)
m_buff[index].data=new unsigned char[len];
else
memset(m_buff[index].data,0,m_buff[index].datalen);
memcpy(m_buff[index].data,data,len);
m_buff[index].datalen =len;
//加锁
bufferlock.Lock();
//删除可写入结点,添加可读取结点信息
DeleteWriteTable(index);
//printf("delete write index !!!!!!!!!!\n");
//添加可读取结点
AppendReadTable(index);
//解锁
bufferlock.Unlock();
return E_OK;
}
//
unsigned char *CBUFFER::ReadData(int number)
{
if(number>C_MAX_BUFFERNUM) return NULL;
//加锁
bufferlock.Lock();
DeleteReadTable(number);
//printf("delete read index !!!!!!!!! \n");
AppendWriteTable(number);
//解锁
bufferlock.Unlock();
if(m_buff[number].data==NULL) return NULL;
return m_buff[number].data;
}
//
unsigned char *CBUFFER::ReadData()
{
int index;
index=FindReadNode();
//printf("findreadhead index is %d \n",index);
if(index==E_FALSE) return NULL;
//加锁
bufferlock.Lock();
//
DeleteReadTable(index);
//printf("delete read index !!!!!!!!! \n");
AppendWriteTable(index);
//解锁
bufferlock.Unlock();
if(m_buff[index].data==NULL) return NULL;
return m_buff[index].data;
}
int CBUFFER::IsEmpty()
{
//如果读取信息索引表是空,表示BUFFER此时为空
if(linktable.ListEmpty(ReadHead)==true)
return E_OK;
else
return E_FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -