//------------------------------------------------------------------ // The masking function. It computes res = LUT(x) where // res = res[0], ..., res[n-1] and x = x[0], ..., x[n-1] s.t. // res[0] ^ ... ^ res[n-1] = LUT(x[0] ^ ... ^ x[n-1]) //------------------------------------------------------------------ void mask(T x[], T* res, int n) { T T0[sizeof(lut) / sizeof(T)][PARTITIONS]; T T1[sizeof(lut) / sizeof(T)][PARTITIONS]; const int lut_size = sizeof(lut) / sizeof(T); int u, i, j; for(u = 0; u < lut_size; u++) { T0[u][0] = lut[u]; for(i = 1; i < n; i++) { T0[u][i] = 0; } } for(i = 0; i < n - 1; i++) { for(u = 0; u < lut_size; u++) { for(j = 0; j < n; j++) { T1[u][j] = T0[u ^ x[i]][j]; } } for(u = 0; u < lut_size; u++) { refreshMasks(T0[u], T1[u], n); } } refreshMasks(res, T0[x[n - 1]], n); }
void TileMapLoader::onLoadComplete(ResTask* pTask) { if( pTask->result == ResResult_Ok ) { refreshTiles(); refreshMasks(); } for ( size_t i = 0;i<m_vTiles.size();++i ) { CC_SAFE_DELETE(m_vTiles[i]->img); CC_SAFE_DELETE(m_vTiles[i]); } m_vTiles.clear(); for ( size_t i = 0;i<m_vMasks.size();++i ) { CC_SAFE_DELETE(m_vMasks[i]->img); CC_SAFE_DELETE(m_vMasks[i]->mask_relation); CC_SAFE_DELETE(m_vMasks[i]); } m_vMasks.clear(); ResBase::onLoadComplete(pTask); delete this; }