Lines Matching defs:src
256 last_dim_is_contiguous(const Py_buffer *dest, const Py_buffer *src)
258 assert(dest->ndim > 0 && src->ndim > 0);
260 !HAVE_SUBOFFSETS_IN_LAST_DIM(src) &&
262 src->strides[src->ndim-1] == src->itemsize);
272 equiv_format(const Py_buffer *dest, const Py_buffer *src)
276 assert(dest->format && src->format);
278 sfmt = src->format[0] == '@' ? src->format+1 : src->format;
281 dest->itemsize != src->itemsize) {
292 equiv_shape(const Py_buffer *dest, const Py_buffer *src)
296 if (dest->ndim != src->ndim)
300 if (dest->shape[i] != src->shape[i])
312 equiv_structure(const Py_buffer *dest, const Py_buffer *src)
314 if (!equiv_format(dest, src) ||
315 !equiv_shape(dest, src)) {
389 copy_single(PyMemoryViewObject *self, const Py_buffer *dest, const Py_buffer *src)
396 if (!equiv_structure(dest, src))
399 if (!last_dim_is_contiguous(dest, src)) {
409 src->buf, src->strides, src->suboffsets,
418 /* Recursively copy src to dest. Both buffers must have the same basic
422 copy_buffer(const Py_buffer *dest, const Py_buffer *src)
428 if (!equiv_structure(dest, src))
431 if (!last_dim_is_contiguous(dest, src)) {
441 src->buf, src->strides, src->suboffsets,
476 /* Copy src to a contiguous representation. order is one of 'C', 'F' (Fortran)
477 or 'A' (Any). Assumptions: src has PyBUF_FULL information, src->ndim >= 1,
478 len(mem) == src->len. */
480 buffer_to_contiguous(char *mem, const Py_buffer *src, char order)
486 assert(src->ndim >= 1);
487 assert(src->shape != NULL);
488 assert(src->strides != NULL);
490 strides = PyMem_Malloc(src->ndim * (sizeof *src->strides));
497 dest = *src;
514 ret = copy_buffer(&dest, src);
527 init_shared_values(Py_buffer *dest, const Py_buffer *src)
529 dest->obj = src->obj;
530 dest->buf = src->buf;
531 dest->len = src->len;
532 dest->itemsize = src->itemsize;
533 dest->readonly = src->readonly;
534 dest->format = src->format ? src->format : "B";
535 dest->internal = src->internal;
540 init_shape_strides(Py_buffer *dest, const Py_buffer *src)
544 if (src->ndim == 0) {
549 if (src->ndim == 1) {
550 dest->shape[0] = src->shape ? src->shape[0] : src->len / src->itemsize;
551 dest->strides[0] = src->strides ? src->strides[0] : src->itemsize;
555 for (i = 0; i < src->ndim; i++)
556 dest->shape[i] = src->shape[i];
557 if (src->strides) {
558 for (i = 0; i < src->ndim; i++)
559 dest->strides[i] = src->strides[i];
567 init_suboffsets(Py_buffer *dest, const Py_buffer *src)
571 if (src->suboffsets == NULL) {
575 for (i = 0; i < src->ndim; i++)
576 dest->suboffsets[i] = src->suboffsets[i];
652 Return a new memoryview that is registered with mbuf. If src is NULL,
653 use mbuf->master as the underlying buffer. Otherwise, use src.
660 mbuf_add_view(_PyManagedBufferObject *mbuf, const Py_buffer *src)
665 if (src == NULL)
666 src = &mbuf->master;
668 if (src->ndim > PyBUF_MAX_NDIM) {
675 mv = memory_alloc(src->ndim);
680 init_shared_values(dest, src);
681 init_shape_strides(dest, src);
682 init_suboffsets(dest, src);
693 need to be initialized. Use 'ndim' instead of src->ndim to determine the
698 mbuf_add_incomplete_view(_PyManagedBufferObject *mbuf, const Py_buffer *src,
704 if (src == NULL)
705 src = &mbuf->master;
714 init_shared_values(dest, src);
829 Return a memoryview that is based on a contiguous copy of src.
830 Assumptions: src has PyBUF_FULL_RO information, src->ndim > 0.
834 of src->shape, src->strides and src->suboffsets.
835 2) src->format is copied to the master buffer and released
841 memory_from_contiguous_copy(const Py_buffer *src, char order)
849 assert(src->ndim > 0);
850 assert(src->shape != NULL);
852 bytes = PyBytes_FromStringAndSize(NULL, src->len);
861 if (mbuf_copy_format(mbuf, src->format) < 0) {
866 mv = (PyMemoryViewObject *)mbuf_add_incomplete_view(mbuf, NULL, src->ndim);
874 dest->itemsize = src->itemsize;
877 for (i = 0; i < src->ndim; i++) {
878 dest->shape[i] = src->shape[i];
892 if (copy_buffer(dest, src) < 0) {
983 PyBuffer_ToContiguous(void *buf, const Py_buffer *src, Py_ssize_t len, char order)
990 if (len != src->len) {
996 if (PyBuffer_IsContiguous(src, order)) {
997 memcpy((char *)buf, src->buf, len);
1002 fb = PyMem_Malloc(sizeof *fb + 3 * src->ndim * (sizeof *fb->array));
1007 fb->view.ndim = src->ndim;
1009 fb->view.strides = fb->array + src->ndim;
1010 fb->view.suboffsets = fb->array + 2 * src->ndim;
1012 init_shared_values(&fb->view, src);
1013 init_shape_strides(&fb->view, src);
1014 init_suboffsets(&fb->view, src);
1016 src = &fb->view;
1018 ret = buffer_to_contiguous(buf, src, order);
1768 #define PACK_SINGLE(ptr, src, type) \
1771 x = (type)src; \
2181 Py_buffer *src = VIEW_ADDR(self);
2201 bytes = PyBytes_FromStringAndSize(NULL, src->len);
2205 if (PyBuffer_ToContiguous(PyBytes_AS_STRING(bytes), src, src->len, ord) < 0) {
2241 Py_buffer *src = VIEW_ADDR(self);
2248 return _Py_strhex_with_sep(src->buf, src->len, sep, bytes_per_sep);
2251 bytes = PyBytes_FromStringAndSize(NULL, src->len);
2255 if (PyBuffer_ToContiguous(PyBytes_AS_STRING(bytes), src, src->len, 'C') < 0) {
2536 Py_buffer src;
2589 if (PyObject_GetBuffer(value, &src, PyBUF_FULL_RO) < 0)
2603 ret = copy_single(self, &dest, &src);
2606 PyBuffer_Release(&src);