#define FILENAME_SIZE 33
class FILE_NAME_NODE
{
public:
ADDFILE_INFO_T m_FileName;
FILE_NAME_NODE * m_pNextFileName;
};
typedef FILE_NAME_NODE* PFILE_NAME_NODE
///////////////////////////////////////////
class FILE_NAME_QUEUE{
public:
FILE_NAME_QUEUE();
~FILE_NAME_QUEUE();
BOOL FilenameAdd(ADDFILE_INFO_T addfile);//add one to the end
UINT FilenameDel(); // delete the first
public:
PFILE_NAME_NODE pBeginFileName;
PFILE_NAME_NODE pEndFileName;
BOOL isEmpty;
CCriticalSection critical_section;
protected:
FILE_NAME_NODE m_FileNameNode[FILENAME_SIZE];
};
///////////////////////////////////////////
#include "FileName.h"
FILE_NAME_QUEUE::FILE_NAME_QUEUE()
{
pBeginFileName=m_FileNameNode;
pEndFileName=m_FileNameNode;
for (int i=0;i<(FILENAME_SIZE-1);i++)
{
m_FileNameNode[i].m_pNextFileName=&m_FileNameNode[i+1];
}
m_FileNameNode[FILENAME_SIZE-1].m_pNextFileName=m_FileNameNode;
isEmpty=TRUE;
}
FILE_NAME_QUEUE::~FILE_NAME_QUEUE()
{
// do nothing ,system default process
}
BOOL FILE_NAME_QUEUE::FilenameAdd(ADDFILE_INFO_T addfile)
{
critical_section.Lock();
pEndFileName->m_FileName=addfile;
pEndFileName=pEndFileName->m_pNextFileName;
if (pEndFileName==pBeginFileName)
{
critical_section.Unlock();
return FALSE;
}
isEmpty=FALSE;
critical_section.Unlock();
return TRUE;
}
UINT FILE_NAME_QUEUE::FilenameDel()
{
//pBeginFileName->m_FileName/*=NULL*/;
critical_section.Lock();
pBeginFileName=pBeginFileName->m_pNextFileName;
if (pBeginFileName==pEndFileName)
{
isEmpty=TRUE;
critical_section.Unlock();
return 1;
}
critical_section.Unlock();
return 0;
}