comparison libinterp/octave-value/ov-bool-sparse.cc @ 28131:4c21f99b4ad5

handle interleaved complex data and new typed data access functions for mex * mexproto.h, mex.cc, mxarray.h (mxMakeArrayReal, mxMakeArrayComplex, mxGetDoubles, mxGetSingles, mxGetInt8s, mxGetInt16s, mxGetInt32s, mxGetInt64s, mxGetUint8s, mxGetUint16s, mxGetUint32s, mxGetUint64s, mxGetComplexDoubles, mxGetComplexSingles, mxSetDoubles, mxSetSingles, mxSetInt8s, mxSetInt16s, mxSetInt32s, mxSetInt64s, mxSetUint8s, mxSetUint16s, mxSetUint32s, mxSetUint64s, mxSetComplexDoubles, mxSetComplexSingles): New functions. Provide corresponding member functions in mxArray class hierarchy to handle the actual operations. (mxGetComplexInt8s, mxGetComplexInt16s, mxGetComplexInt32s, mxGetComplexInt64s, mxGetComplexUint8s, mxGetComplexUint16s, mxGetComplexUint32s, mxGetComplexUint64s, mxSetComplexInt8s, mxSetComplexInt16s, mxSetComplexInt32s, mxSetComplexInt64s, mxSetComplexUint8s, mxSetComplexUint16s, mxSetComplexUint32s, mxSetComplexUint64s): Add prototypes and functions, but leave commented out since we don't have complex integer data. (class mxArray_number, class mxArray_sparse): Handle interleaved complex data. In mxArray_octave_value and mxArray_matlab constructors, handle interleaved flag in constructor to determine data layout to use when creating mxArray_number or mxArray_sparse objects. (mex::make_value): Check flag in mex function to determine whether to create arrays with interleaved complex. * ov.h, ov.cc, ov-base.h, ov-base.cc, ov-base-diag.h, ov-base-diag.cc, ov-bool-mat.h, ov-bool-mat.cc, ov-bool-sparse.h, ov-bool-sparse.cc, ov-bool.h, ov-bool.cc, ov-cell.h, ov-cell.cc, ov-ch-mat.h, ov-ch-mat.cc, ov-class.h, ov-class.cc, ov-complex.h, ov-complex.cc, ov-cx-mat.h, ov-cx-mat.cc, ov-cx-sparse.h, ov-cx-sparse.cc, ov-float.h, ov-float.cc, ov-flt-complex.h, ov-flt-complex.cc, ov-flt-cx-mat.h, ov-flt-cx-mat.cc, ov-flt-re-mat.h, ov-flt-re-mat.cc, ov-intx.h, ov-lazy-idx.h, ov-perm.h, ov-perm.cc, ov-range.h, ov-range.cc, ov-re-mat.h, ov-re-mat.cc, ov-re-sparse.h, ov-re-sparse.cc, ov-scalar.h, ov-scalar.cc, ov-struct.h, ov-struct.cc: In all as_mxArray methods, handle new interleaved input to optionally create objects that will use interleaved complex data.
author John W. Eaton <jwe@octave.org>
date Tue, 18 Feb 2020 13:16:41 -0500
parents bd51beb6205e
children 0a6ed9dcd601
comparison
equal deleted inserted replaced
28130:0a88a4743096 28131:4c21f99b4ad5
800 800
801 return retval; 801 return retval;
802 } 802 }
803 803
804 mxArray * 804 mxArray *
805 octave_sparse_bool_matrix::as_mxArray (void) const 805 octave_sparse_bool_matrix::as_mxArray (bool interleaved) const
806 { 806 {
807 mwSize nz = nzmax (); 807 mwSize nz = nzmax ();
808 mxArray *retval = new mxArray (mxLOGICAL_CLASS, rows (), columns (), 808 mwSize nr = rows ();
809 nz, mxREAL); 809 mwSize nc = columns ();
810 bool *pr = static_cast<bool *> (retval->get_data ()); 810
811 mxArray *retval = new mxArray (interleaved, mxLOGICAL_CLASS, nr, nc, nz,
812 mxREAL);
813
814 mxLogical *pd = static_cast<mxLogical *> (retval->get_data ());
811 mwIndex *ir = retval->get_ir (); 815 mwIndex *ir = retval->get_ir ();
816
817 const bool *pdata = matrix.data ();
818 const octave_idx_type *pridx = matrix.ridx ();
819
820 for (mwIndex i = 0; i < nz; i++)
821 {
822 pd[i] = pdata[i];
823
824 ir[i] = pridx[i];
825 }
826
812 mwIndex *jc = retval->get_jc (); 827 mwIndex *jc = retval->get_jc ();
813 828
814 for (mwIndex i = 0; i < nz; i++) 829 const octave_idx_type *pcidx = matrix.cidx ();
815 { 830
816 pr[i] = matrix.data (i); 831 for (mwIndex i = 0; i < nc + 1; i++)
817 ir[i] = matrix.ridx (i); 832 jc[i] = pcidx[i];
818 }
819
820 for (mwIndex i = 0; i < columns () + 1; i++)
821 jc[i] = matrix.cidx (i);
822 833
823 return retval; 834 return retval;
824 } 835 }