static bool read_poly(int dataset, VarInfo6& info) { int complex = 0; int size = getDimsNode(dataset, &complex, info.pdims); info.size = 0; //open __refs__ node int refs = getDataSetIdFromName(dataset, "__refs__"); for (int i = 0; i < size; ++i) { std::string polyname(std::to_string(i)); int poly = getDataSetIdFromName(refs, polyname.data()); //get dims complex = 0; int dims = 0; int ret = getDatasetInfo(poly, &complex, &dims, NULL); if (ret < 0) { return false; } std::vector<int> d(dims); int datasize = getDatasetInfo(poly, &complex, &dims, d.data()); info.size += datasize * sizeof(double) * (complex + 1); } closeList6(refs); closeList6(dataset); generateInfo(info); return true; }
static types::InternalType* import_poly(int dataset) { //get poly dims node int complex = 0; std::vector<int> pdims; int size = getDimsNode(dataset, &complex, pdims); //get variable name char* var = NULL; int varname = getDataSetIdFromName(dataset, "__varname__"); readStringMatrix(varname, &var); wchar_t* wvar = to_wide_string(var); std::wstring wvarname(wvar); FREE(wvar); freeStringMatrix(varname, &var); types::Polynom* p = new types::Polynom(wvarname, static_cast<int>(pdims.size()), pdims.data()); types::SinglePoly** pss = p->get(); //open __refs__ node int refs = getDataSetIdFromName(dataset, "__refs__"); size = p->getSize(); //loop on children for (int i = 0; i < size; ++i) { //forge name std::string polyname(std::to_string(i)); int poly = getDataSetIdFromName(refs, polyname.data()); //get dims complex = 0; int dims = 0; int ret = getDatasetInfo(poly, &complex, &dims, NULL); if (ret < 0) { return nullptr; } std::vector<int> d(dims); int datasize = getDatasetInfo(poly, &complex, &dims, d.data()); types::SinglePoly* ss = NULL; //get coef if (dims == 0 || datasize <= 0) { ss = new types::SinglePoly(); } else if (complex) { double* real = NULL; double* img = NULL; //create singlepoly ss = new types::SinglePoly(&real, &img, datasize - 1); readDoubleComplexMatrix(poly, real, img); } else { double* real = NULL; ss = new types::SinglePoly(&real, datasize - 1); readDoubleMatrix(poly, real); } pss[i] = ss; } closeList6(refs); closeList6(dataset); return p; }