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;
}
Beispiel #4
0
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);
}
Beispiel #5
0
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;
  }
}