/* * Implement sequence slice sub-script for the type. */ static PyObject *sipArray_slice(PyObject *self, int left, int right) { sipArrayObject *array = (sipArrayObject *)self; fix_bounds(array->len, &left, &right); if (left == right) left = right = 0; return make_array(element(array, left), array->td, array->format, array->stride, right - left, (array->flags & ~SIP_OWNS_MEMORY), array->owner); }
/* * Implement sequence slice sub-script for the type. */ static PyObject *sipVoidPtr_slice(PyObject *self, int left, int right) { sipVoidPtrObject *v; if (check_size(self) < 0) return NULL; v = (sipVoidPtrObject *)self; fix_bounds(v->size, &left, &right); if (left == right) left = right = 0; return make_voidptr((char *)(v->voidptr) + left, right - left, v->rw); }
/* * Implement sequence assignment slice sub-script for the type. */ static int sipArray_ass_slice(PyObject *self, int left, int right, PyObject *value) { sipArrayObject *array = (sipArrayObject *)self; void *value_data; if (check_writable(array) < 0) return -1; fix_bounds(array->len, &left, &right); if ((value_data = get_slice(array, value, right - left)) == NULL) return -1; memmove(element(array, left), value_data, (right - left) * array->stride); return 0; }
/* * Implement sequence assignment slice sub-script for the type. */ static int sipVoidPtr_ass_slice(PyObject *self, int left, int right, PyObject *value) { sipVoidPtrObject *v; int value_size; void *value_ptr; if (check_rw(self) < 0 || check_size(self) < 0) return -1; if ((value_size = get_value_data(value, &value_ptr)) < 0) return -1; v = (sipVoidPtrObject *)self; fix_bounds(v->size, &left, &right); if (check_slice_size(right - left, value_size) < 0) return -1; memmove((char *)(v->voidptr) + left, value_ptr, right - left); return 0; }