/** \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; }
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]); }
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); }