static EndGamePosIndex encode_kk_ondiag_noflip5m3e(EndGameKey key) { UINT pi2 = EndGameKeyDefinition::s_offDiagPosToIndex[key.getPosition(2)]; UINT pi3 = EndGameKeyDefinition::s_offDiagPosToIndex[key.getPosition(3)]; UINT pi4 = EndGameKeyDefinition::s_offDiagPosToIndex[key.getPosition(4)]; SORT3(pi2, pi3, pi4); /* pi2 < pi3 < pi4 */ return ADDPIT(key, ADD3EQUAL(KK_ONDIAG_2MEN(key), KK_ONDIAG_POSCOUNT, pi2, pi3, pi4)) + START_RANGE_KK_ONDIAG_P234_BELOWDIAG - MININDEX; }
/* *********************************************************** */ void mlib_median_row_3x3rsep_d64( mlib_u8 *pdst, void **psl, mlib_filter_state * fs) { mlib_s32 nchan = fs->nchan, cmask = fs->cmask, size = fs->size; mlib_d64 *dl, *sl; mlib_d64 mask, d1, d2, d3, d4, d5; mlib_d64 *buff1, *buff2, *buff3; mlib_s32 i, k; buff1 = (fs->buff_row)[fs->buff_ind - 2]; buff2 = (fs->buff_row)[fs->buff_ind - 1]; buff3 = (fs->buff_row)[fs->buff_ind]; for (k = 0; k < nchan; k++) { if (!(cmask & (1 << (nchan - 1 - k)))) continue; dl = (mlib_d64 *)pdst + k; sl = (mlib_d64 *)psl[2] + k; for (i = 0; i < size; i++) { d1 = sl[i * nchan - nchan]; d2 = sl[i * nchan]; d3 = sl[i * nchan + nchan]; d4 = buff1[i * nchan]; d5 = buff2[i * nchan]; SORT3(d1, d2, d3, SORT2_d64); buff3[i * nchan] = d2; SORT3(d4, d2, d5, SORT2_d64); dl[i * nchan] = d2; } buff1++; buff2++; buff3++; } if (++(fs->buff_ind) >= 5) (fs->buff_ind) -= 3; }
static EndGamePosIndex encode_kkp2_ondiag_noflip6m3e(EndGameKey key) { const EndGamePosIndex maxAddr = KKP2_ONDIAG_POSCOUNT; UINT pi3 = EndGameKeyDefinition::s_offDiagPosToIndex[key.getPosition(3)]; UINT pi4 = EndGameKeyDefinition::s_offDiagPosToIndex[key.getPosition(4)]; UINT pi5 = EndGameKeyDefinition::s_offDiagPosToIndex[key.getPosition(5)]; SORT3(pi3, pi4, pi5); /* pi3 < pi4 < pi5 */ return ADDPIT(key, ADD3EQUAL(KKP2_ONDIAG_3MEN(key), maxAddr, pi3, pi4, pi5)) + START_RANGE_KKP2_ONDIAG_P345_BELOWDIAG - MININDEX; }
inline int32 uint32_sort3(uint32 *p) { int32 key = 0; uint32 work; if (p[0] < p[1]) key += 1; if (p[0] < p[2]) key += 2; if (p[1] < p[2]) key += 4; SORT3(p, work); return(key); }
inline void uint32_sort234_copy(uint32 *out, uint32 *p, uint32 num) { uint32 ii; uint32 work; for (ii = 0; ii < num; ii++) { out[ii] = p[ii]; } switch (num) { case 2: SORT2(out, work); break; case 3: SORT3(out, work); break; case 4: SORT4(out, work); break; } }