vsip_vview_si* (vsip_mdiagview_si)( const vsip_mview_si* v, int idiag) { vsip_index i = (idiag < 0) ? -idiag : 0, /* row index of origin */ j = (idiag > 0) ? idiag : 0; /* col index of origin */ vsip_length n_row = v->col_length - i; /* # rows from origin to end */ vsip_length n_col = v->row_length - j; /* # cols from origin to end */ return vsip_vbind_si( v->block, v->offset + i * v->col_stride + j * v->row_stride, v->row_stride + v->col_stride, (n_row < n_col) ? n_row : n_col); }
vsip_vview_si *vsip_tvectview_si( const vsip_tview_si *v, vsip_tvslice slice, vsip_index i, vsip_index j) { vsip_vview_si *vview = (vsip_vview_si*)NULL; vsip_block_si *block = v->block; vsip_offset offset = v->offset; if(slice == VSIP_TVX){ offset += i * v->z_stride + j * v->y_stride; vview = vsip_vbind_si(block,offset,v->x_stride,v->x_length); } else if(slice == VSIP_TVY) { offset += i * v->z_stride + j * v->x_stride; vview = vsip_vbind_si(block,offset,v->y_stride,v->y_length); } else if(slice == VSIP_TVZ){ offset += i * v->y_stride + j * v->x_stride; vview = vsip_vbind_si(block,offset,v->z_stride,v->z_length); } return vview; }