static types::InternalType* import_boolean_sparse(int dataset) { //get sparse dimensions int complex = 0; std::vector<int> pdims; int size = getDimsNode(dataset, &complex, pdims); //get non zeros count int nnz = 0; int datannz = getDataSetIdFromName(dataset, "__nnz__"); readInteger32Matrix(datannz, &nnz); if (nnz == 0) { closeList6(dataset); return new types::SparseBool(pdims[0], pdims[1]); } //get inner vector int datain = getDataSetIdFromName(dataset, "__inner__"); int dimin = 0; int sizein = getDatasetInfo(datain, &complex, &dimin, NULL); std::vector<int> dimsin(dimin); sizein = getDatasetInfo(datain, &complex, &dimin, dimsin.data()); std::vector<int> in(sizein); int ret = readInteger32Matrix(datain, in.data()); if (ret < 0) { closeList6(dataset); return nullptr; } //get outer vector int dataout = getDataSetIdFromName(dataset, "__outer__"); int dimout = 0; int sizeout = getDatasetInfo(dataout, &complex, &dimout, NULL); std::vector<int> dimsout(dimout); sizeout = getDatasetInfo(dataout, &complex, &dimout, dimsout.data()); std::vector<int> out(sizeout); ret = readInteger32Matrix(dataout, out.data()); if (ret < 0) { closeList6(dataset); return nullptr; } closeList6(dataset); return new types::SparseBool(pdims[0], pdims[1], nnz, in.data(), out.data()); }
static types::InternalType* import_sparse(int dataset) { types::Sparse* sp = nullptr; //get sparse dimensions int complex = 0; std::vector<int> pdims; int size = getDimsNode(dataset, &complex, pdims); //get non zeros count int nnz = 0; int datannz = getDataSetIdFromName(dataset, "__nnz__"); readInteger32Matrix(datannz, &nnz); if (nnz == 0) { closeList6(dataset); return new types::Sparse(pdims[0], pdims[1]); } //get inner vector int datain = getDataSetIdFromName(dataset, "__inner__"); int dimin = 0; int sizein = getDatasetInfo(datain, &complex, &dimin, NULL); std::vector<int> dimsin(dimin); sizein = getDatasetInfo(datain, &complex, &dimin, dimsin.data()); if (sizein < 0) { closeList6(dataset); return nullptr; } std::vector<int> in(sizein); int ret = readInteger32Matrix(datain, in.data()); if (ret < 0) { closeList6(dataset); return nullptr; } //get outer vector int dataout = getDataSetIdFromName(dataset, "__outer__"); int dimout = 0; int sizeout = getDatasetInfo(dataout, &complex, &dimout, NULL); std::vector<int> dimsout(dimout); sizeout = getDatasetInfo(dataout, &complex, &dimout, dimsout.data()); if (sizeout < 0) { closeList6(dataset); return nullptr; } std::vector<int> out(sizeout); ret = readInteger32Matrix(dataout, out.data()); if (ret < 0) { closeList6(dataset); return nullptr; } //get data int ddata = getDataSetIdFromName(dataset, "__data__"); int dimdata = 0; int sizedata = getDatasetInfo(ddata, &complex, &dimdata, NULL); std::vector<int> dimsdata(dimdata); sizedata = getDatasetInfo(ddata, &complex, &dimdata, dimsdata.data()); if (sizedata < 0) { closeList6(dataset); return nullptr; } std::vector<double> real(sizedata); if (complex) { std::vector<double> img(sizedata); ret = readDoubleComplexMatrix(ddata, real.data(), img.data()); if (ret < 0) { closeList6(dataset); return nullptr; } sp = new types::Sparse(pdims[0], pdims[1], nnz, in.data(), out.data(), real.data(), img.data()); } else { ret = readDoubleMatrix(ddata, real.data()); if (ret < 0) { closeList6(dataset); return nullptr; } sp = new types::Sparse(pdims[0], pdims[1], nnz, in.data(), out.data(), real.data(), nullptr); } closeList6(dataset); return sp; }