/* Copy a line from a buffer to an array: */ int NI_LineBufferToArray(NI_LineBuffer *buffer) { double *pb = buffer->buffer_data; char *pa; maybelong jj, length = buffer->line_length; pb += buffer->size1; for(jj = 0; jj < buffer->buffer_lines; jj++) { /* if all array lines are copied return: */ if (buffer->next_line == buffer->array_lines) break; pa = buffer->array_data; /* copy data from the buffer to the array: */ switch (buffer->array_type) { CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, Bool); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, UInt8); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, UInt16); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, UInt32); #if HAS_UINT64 CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, UInt64); #endif CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, Int8); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, Int16); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, Int32); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, Int64); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, Float32); CASE_COPY_LINE_TO_DATA(pb, pa, length, buffer->line_stride, Float64); default: PyErr_SetString(PyExc_RuntimeError, "array type not supported"); return 0; } /* move to the next line in the array: */ NI_ITERATOR_NEXT(buffer->iterator, buffer->array_data); /* number of lines copied: */ ++(buffer->next_line); /* move the buffer data pointer to the next line: */ pb += buffer->line_length + buffer->size1 + buffer->size2; } return 1; }
/* Copy a line from a buffer to an array: */ int NI_LineBufferToArray(NI_LineBuffer *buffer) { double *pb = buffer->buffer_data; char *pa; npy_intp jj, length = buffer->line_length; pb += buffer->size1; for(jj = 0; jj < buffer->buffer_lines; jj++) { /* if all array lines are copied return: */ if (buffer->next_line == buffer->array_lines) break; pa = buffer->array_data; /* copy data from the buffer to the array: */ switch (buffer->array_type) { CASE_COPY_LINE_TO_DATA(NPY_BOOL, npy_bool, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_UBYTE, npy_ubyte, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_USHORT, npy_ushort, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_UINT, npy_uint, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_ULONG, npy_ulong, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_ULONGLONG, npy_ulonglong, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_BYTE, npy_byte, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_SHORT, npy_short, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_INT, npy_int, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_LONG, npy_long, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_LONGLONG, npy_longlong, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_FLOAT, npy_float, pb, pa, length, buffer->line_stride); CASE_COPY_LINE_TO_DATA(NPY_DOUBLE, npy_double, pb, pa, length, buffer->line_stride); default: PyErr_Format(PyExc_RuntimeError, "array type %d not supported", buffer->array_type); return 0; } /* move to the next line in the array: */ NI_ITERATOR_NEXT(buffer->iterator, buffer->array_data); /* number of lines copied: */ ++(buffer->next_line); /* move the buffer data pointer to the next line: */ pb += buffer->line_length + buffer->size1 + buffer->size2; } return 1; }