| 117 | |
| 118 | template<class T, int HashCount> |
| 119 | int CNetBan::CBanPool<T, HashCount>::Remove(CBan<T> *pBan) |
| 120 | { |
| 121 | if(pBan == 0) |
| 122 | return -1; |
| 123 | |
| 124 | // remove from hash list |
| 125 | if(pBan->m_pHashNext) |
| 126 | pBan->m_pHashNext->m_pHashPrev = pBan->m_pHashPrev; |
| 127 | if(pBan->m_pHashPrev) |
| 128 | pBan->m_pHashPrev->m_pHashNext = pBan->m_pHashNext; |
| 129 | else |
| 130 | m_paaHashList[pBan->m_NetHash.m_HashIndex][pBan->m_NetHash.m_Hash] = pBan->m_pHashNext; |
| 131 | pBan->m_pHashNext = pBan->m_pHashPrev = 0; |
| 132 | |
| 133 | // remove from used list |
| 134 | if(pBan->m_pNext) |
| 135 | pBan->m_pNext->m_pPrev = pBan->m_pPrev; |
| 136 | if(pBan->m_pPrev) |
| 137 | pBan->m_pPrev->m_pNext = pBan->m_pNext; |
| 138 | else |
| 139 | m_pFirstUsed = pBan->m_pNext; |
| 140 | |
| 141 | // add to recycle list |
| 142 | if(m_pFirstFree) |
| 143 | m_pFirstFree->m_pPrev = pBan; |
| 144 | pBan->m_pPrev = 0; |
| 145 | pBan->m_pNext = m_pFirstFree; |
| 146 | m_pFirstFree = pBan; |
| 147 | |
| 148 | // update ban count |
| 149 | --m_CountUsed; |
| 150 | |
| 151 | return 0; |
| 152 | } |
| 153 | |
| 154 | template<class T, int HashCount> |
| 155 | void CNetBan::CBanPool<T, HashCount>::Update(CBan<CDataType> *pBan, const CBanInfo *pInfo) |
no outgoing calls
no test coverage detected