int p8est_quadrant_touches_edge (const p4est_quadrant_t * q, int edge, int inside) { int quad_contact[P4EST_FACES]; int axis, side, incount; p4est_qcoord_t lower, upper; P4EST_ASSERT (0 <= edge && edge < 12); axis = edge / 4; if (q->level == P4EST_MAXLEVEL) { P4EST_ASSERT (p4est_quadrant_is_node (q, inside)); lower = 0; upper = P4EST_ROOT_LEN - (int) inside; } else { if (!inside) { P4EST_ASSERT (p4est_quadrant_is_extended (q)); lower = -P4EST_QUADRANT_LEN (q->level); upper = P4EST_ROOT_LEN; } else { P4EST_ASSERT (p4est_quadrant_is_valid (q)); lower = 0; upper = P4EST_LAST_OFFSET (q->level); } } quad_contact[0] = (q->x == lower); quad_contact[1] = (q->x == upper); quad_contact[2] = (q->y == lower); quad_contact[3] = (q->y == upper); quad_contact[4] = (q->z == lower); quad_contact[5] = (q->z == upper); incount = 0; if (axis != 0) { side = edge & 1; incount += quad_contact[side]; } if (axis != 1) { side = (axis == 0) ? (edge & 1) : ((edge >> 1) & 1); incount += quad_contact[2 + side]; }
static void p4est_points_init (p4est_t * p4est, p4est_topidx_t which_tree, p4est_quadrant_t * quadrant) { p4est_points_state_t *s = (p4est_points_state_t *) p4est->user_pointer; p4est_locidx_t *qdata = (p4est_locidx_t *) quadrant->p.user_data; p4est_quadrant_t *p; qdata[0] = s->current; while (s->current < s->num_points) { p = s->points + s->current; P4EST_ASSERT (p->p.which_tree >= which_tree); if (p->p.which_tree > which_tree) { break; } P4EST_ASSERT (p4est_quadrant_is_node (p, 1)); P4EST_ASSERT (p4est_quadrant_compare (quadrant, p) < 0); if (!p4est_quadrant_contains_node (quadrant, p)) { break; } ++s->current; } qdata[1] = s->current; }