⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer.~cpp

📁 一个高速缓冲类(缓冲池)
💻 ~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 + -