?? 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 + -