/** \function closeCells
 * 	\param i è il valore y
 * 	\param j è il valore x
 *  \param pred funzione che controlla un predicato sulla cella
 *      La funzione controlla i 4 vicini 
 *            (x-1,y)
 *      (x,y-1) *** (x,y+1)
 *            (x+1,y)
 * 	e su ognuno di essi controlla il predicato pred.
 *  Se su (i,j) il pred è true, essa viene aggiunta all'array di cell_set
 * 	\retval un cell_set che contiene tutte le celle interono ad i,j che soddisfano pred
 * */
cell_set closeCells ( uint i, uint j, planet_t *p, bool(pred)(cell_t) ) {
	cell_set ret ;
	ret.n = 0;
		/* Controllo la cella (x,y-1) */
	ret.cells[ret.n][0] = VALID_INDEX( i-1, p->nrow );
	ret.cells[ret.n][1] = VALID_INDEX( j, p->ncol );
	if ( pred ( p->w[ ret.cells[ret.n][0] ][ ret.cells[ret.n][1] ] ) ) ret.n ++;
		/* Controllo la cella (x,y+1) */
	ret.cells[ret.n][0] = VALID_INDEX( i+1, p->nrow );
	ret.cells[ret.n][1] = VALID_INDEX( j, p->ncol );
	if ( pred ( p->w[ ret.cells[ret.n][0] ][ ret.cells[ret.n][1] ] ) ) ret.n ++;
		/* Controllo la cella (x-1,y) */
	ret.cells[ret.n][0] = VALID_INDEX( i, p->nrow );
	ret.cells[ret.n][1] = VALID_INDEX( j-1, p->ncol );
	if ( pred ( p->w[ ret.cells[ret.n][0] ][ ret.cells[ret.n][1] ] ) ) ret.n ++;
		/* Controllo la cella (x+1,y) */
	ret.cells[ret.n][0] = VALID_INDEX( i, p->nrow );
	ret.cells[ret.n][1] = VALID_INDEX( j+1, p->ncol );
	if ( pred ( p->w[ ret.cells[ret.n][0] ][ ret.cells[ret.n][1] ] ) ) ret.n ++;	
/*	#ifdef _DEBUG_
	printf("(%d,%d) where matrix[%d][%d] => [ ", i ,j, p->nrow, p->ncol );
	for ( i=0;i<ret.n; i++) printf("(%d,%d) ", ret.cells[i][0], ret.cells[i][1] );
	printf("]\n");
	#endif
*/	return ret;
}
Beispiel #2
0
static pic_value
pic_blob_bytevector_u8_ref(pic_state *pic)
{
  unsigned char *buf;
  int len, k;

  pic_get_args(pic, "bi", &buf, &len, &k);

  VALID_INDEX(pic, len, k);

  return pic_int_value(pic, buf[k]);
}
Beispiel #3
0
static pic_value
pic_blob_bytevector_u8_set(pic_state *pic)
{
  unsigned char *buf;
  int len, k, v;

  pic_get_args(pic, "bii", &buf, &len, &k, &v);

  if (v < 0 || v > 255)
    pic_error(pic, "byte out of range", 0);

  VALID_INDEX(pic, len, k);

  buf[k] = (unsigned char)v;

  return pic_undef_value(pic);
}