Material: Fix memory leaks

This commit is contained in:
wmayer
2024-05-08 11:29:23 +02:00
committed by wwmayer
parent 5dc4a45afe
commit bf1fc57157
3 changed files with 16 additions and 15 deletions

View File

@@ -64,17 +64,18 @@ int Array2DPy::PyInit(PyObject* /*args*/, PyObject* /*kwd*/)
Py::List Array2DPy::getArray() const
{
Py::List list;
auto array = getMaterial2DArrayPtr()->getArray();
for (auto& row : array) {
Py::List* rowList = new Py::List();
Py::List rowList;
for (auto& column : *row) {
auto quantity =
new Base::QuantityPy(new Base::Quantity(column.value<Base::Quantity>()));
rowList->append(Py::Object(quantity));
rowList.append(Py::asObject(quantity));
}
list.append(*rowList);
list.append(rowList);
}
return list;
@@ -104,7 +105,7 @@ PyObject* Array2DPy::getRow(PyObject* args)
for (auto& column : *arrayRow) {
auto quantity =
new Base::QuantityPy(new Base::Quantity(column.value<Base::Quantity>()));
list.append(Py::Object(quantity));
list.append(Py::asObject(quantity));
}
return Py::new_reference_to(list);

View File

@@ -67,17 +67,17 @@ Py::List Array3DPy::getArray() const
auto array = getMaterial3DArrayPtr()->getArray();
for (auto& depth : array) {
Py::List* depthList = new Py::List();
Py::List depthList;
for (auto& row : *std::get<1>(depth)) {
Py::List* rowList = new Py::List();
Py::List rowList;
for (auto& column : *row) {
auto quantity = new Base::QuantityPy(new Base::Quantity(column));
rowList->append(Py::Object(quantity));
rowList.append(Py::asObject(quantity));
}
depthList->append(*rowList);
depthList.append(rowList);
}
list.append(*depthList);
list.append(depthList);
}
return list;

View File

@@ -163,17 +163,17 @@ PyObject* MaterialManagerPy::materialsWithModel(PyObject* args)
}
auto materials = getMaterialManagerPtr()->materialsWithModel(QString::fromStdString(uuid));
PyObject* dict = PyDict_New();
Py::Dict dict;
for (auto it = materials->begin(); it != materials->end(); it++) {
QString key = it->first;
auto material = it->second;
PyObject* materialPy = new MaterialPy(new Material(*material));
PyDict_SetItem(dict, PyUnicode_FromString(key.toStdString().c_str()), materialPy);
dict.setItem(key.toStdString(), Py::asObject(materialPy));
}
return dict;
return Py::new_reference_to(dict);
}
PyObject* MaterialManagerPy::materialsWithModelComplete(PyObject* args)
@@ -185,17 +185,17 @@ PyObject* MaterialManagerPy::materialsWithModelComplete(PyObject* args)
auto materials =
getMaterialManagerPtr()->materialsWithModelComplete(QString::fromStdString(uuid));
PyObject* dict = PyDict_New();
Py::Dict dict;
for (auto it = materials->begin(); it != materials->end(); it++) {
QString key = it->first;
auto material = it->second;
PyObject* materialPy = new MaterialPy(new Material(*material));
PyDict_SetItem(dict, PyUnicode_FromString(key.toStdString().c_str()), materialPy);
dict.setItem(key.toStdString(), Py::asObject(materialPy));
}
return dict;
return Py::new_reference_to(dict);
}
PyObject* MaterialManagerPy::save(PyObject* args, PyObject* kwds)