2025-11-27 16:46:48 +09:00

106 lines
2.5 KiB
C++

// ==========================================================================
// Template Implementation : COXCRCTableList
// ==========================================================================
// Source file : OXCRCChk.inl
// Version: 9.3
// Source : Kris Beerts
// Creation Date : 13th August 1996
// Last Modification : 13th August 1996
// //////////////////////////////////////////////////////////////////////////
// Definition of static members
#ifndef new
#define new DEBUG_NEW
#define _REMOVE_DEBUG_NEW
#endif
template<class VALUE>
inline
COXCRCTable<VALUE>::COXCRCTable(VALUE nPolynomial) :
m_pNextTable(NULL),
m_nPolynomial(nPolynomial)
// --- In: nPolynomial: the polynomial on which the table will be based on
// --- Out: none
// --- Returns: none
// --- Effect: constructs the template object and initialize the internal state
{
memset(values, 0, 256*sizeof(VALUE));
}
template<class VALUE>
inline
COXCRCTableList<VALUE>::COXCRCTableList() :
m_pTableList(NULL)
// --- In: none
// --- Out: none
// --- Returns: none
// --- Effect: constructs the list
{
}
template<class VALUE>
inline
COXCRCTableList<VALUE>::~COXCRCTableList()
// --- In: none
// --- Out: none
// --- Returns: none
// --- Effect: Destructs the template object
{
COXCRCTable<VALUE>* pTable = m_pTableList;
COXCRCTable<VALUE>* pNextTable = NULL;
// iterate the list and delete every table
while (pTable)
{
pNextTable = pTable->m_pNextTable;
delete pTable;
pTable = pNextTable;
}
}
template<class VALUE>
inline
COXCRCTable<VALUE>* COXCRCTableList<VALUE>::GetTable(VALUE nPolynomial)
// --- In: nPolynomial: the polynomial of the wanted table
// --- Out: none
// --- Returns: none
// --- Effect: Searches for the table with the specified polynomial.
// A new table is created if necessary.
{
COXCRCTable<VALUE>* pTable = m_pTableList;
COXCRCTable<VALUE>* pLastTable = NULL;
COXCRCTable<VALUE>* pNewTable = NULL;
// search for an existing table
while (pTable)
{
pLastTable = pTable;
// check polynomial
if (pTable->m_nPolynomial == nPolynomial)
return pTable;
pTable = pTable->m_pNextTable;
}
// if an existing table with this polynomial is not found a new one is created
pNewTable = CreateTable(nPolynomial);
// check if this is the first table in the list
if (pLastTable)
pLastTable->m_pNextTable = pNewTable;
else
m_pTableList = pNewTable;
return pNewTable;
}
#ifdef _REMOVE_DEBUG_NEW
#undef new
#undef _REMOVE_DEBUG_NEW
#endif