Browse Source

python: use const self where possible in Trade binding lambdas.

Even though Python is as constless as it can get, it still feels a bit
weird to have readonly properties take a non-const self reference.
next
Vladimír Vondruš 2 years ago
parent
commit
21b643e87f
  1. 82
      src/python/magnum/trade.cpp

82
src/python/magnum/trade.cpp

@ -884,13 +884,13 @@ void trade(py::module_& m) {
py::class_<Trade::MeshData, Trade::PyDataHolder<Trade::MeshData>>{m, "MeshData", "Mesh data"} py::class_<Trade::MeshData, Trade::PyDataHolder<Trade::MeshData>>{m, "MeshData", "Mesh data"}
.def_property_readonly("primitive", &Trade::MeshData::primitive, "Primitive") .def_property_readonly("primitive", &Trade::MeshData::primitive, "Primitive")
.def_property_readonly("index_data_flags", [](Trade::MeshData& self) { .def_property_readonly("index_data_flags", [](const Trade::MeshData& self) {
return Trade::DataFlag(Containers::enumCastUnderlyingType(self.indexDataFlags())); return Trade::DataFlag(Containers::enumCastUnderlyingType(self.indexDataFlags()));
}, "Index data flags") }, "Index data flags")
.def_property_readonly("vertex_data_flags", [](Trade::MeshData& self) { .def_property_readonly("vertex_data_flags", [](const Trade::MeshData& self) {
return Trade::DataFlag(Containers::enumCastUnderlyingType(self.vertexDataFlags())); return Trade::DataFlag(Containers::enumCastUnderlyingType(self.vertexDataFlags()));
}, "Vertex data flags") }, "Vertex data flags")
.def_property_readonly("index_data", [](Trade::MeshData& self) { .def_property_readonly("index_data", [](const Trade::MeshData& self) {
return Containers::pyArrayViewHolder(self.indexData(), py::cast(self)); return Containers::pyArrayViewHolder(self.indexData(), py::cast(self));
}, "Raw index data") }, "Raw index data")
.def_property_readonly("mutable_index_data", [](Trade::MeshData& self) { .def_property_readonly("mutable_index_data", [](Trade::MeshData& self) {
@ -902,7 +902,7 @@ void trade(py::module_& m) {
}, "Mutable raw index data") }, "Mutable raw index data")
/** @todo direct access to MeshAttributeData, once making custom /** @todo direct access to MeshAttributeData, once making custom
MeshData is desired */ MeshData is desired */
.def_property_readonly("vertex_data", [](Trade::MeshData& self) { .def_property_readonly("vertex_data", [](const Trade::MeshData& self) {
return Containers::pyArrayViewHolder(self.vertexData(), py::cast(self)); return Containers::pyArrayViewHolder(self.vertexData(), py::cast(self));
}, "Raw vertex data") }, "Raw vertex data")
.def_property_readonly("mutable_vertex_data", [](Trade::MeshData& self) { .def_property_readonly("mutable_vertex_data", [](Trade::MeshData& self) {
@ -913,35 +913,35 @@ void trade(py::module_& m) {
return Containers::pyArrayViewHolder(self.mutableVertexData(), py::cast(self)); return Containers::pyArrayViewHolder(self.mutableVertexData(), py::cast(self));
}, "Mutable raw vertex data") }, "Mutable raw vertex data")
.def_property_readonly("is_indexed", &Trade::MeshData::isIndexed, "Whether the mesh is indexed") .def_property_readonly("is_indexed", &Trade::MeshData::isIndexed, "Whether the mesh is indexed")
.def_property_readonly("index_count", [](Trade::MeshData& self) { .def_property_readonly("index_count", [](const Trade::MeshData& self) {
if(!self.isIndexed()) { if(!self.isIndexed()) {
PyErr_SetString(PyExc_AttributeError, "mesh is not indexed"); PyErr_SetString(PyExc_AttributeError, "mesh is not indexed");
throw py::error_already_set{}; throw py::error_already_set{};
} }
return self.indexCount(); return self.indexCount();
}, "Index count") }, "Index count")
.def_property_readonly("index_type", [](Trade::MeshData& self) { .def_property_readonly("index_type", [](const Trade::MeshData& self) {
if(!self.isIndexed()) { if(!self.isIndexed()) {
PyErr_SetString(PyExc_AttributeError, "mesh is not indexed"); PyErr_SetString(PyExc_AttributeError, "mesh is not indexed");
throw py::error_already_set{}; throw py::error_already_set{};
} }
return self.indexType(); return self.indexType();
}, "Index type") }, "Index type")
.def_property_readonly("index_offset", [](Trade::MeshData& self) { .def_property_readonly("index_offset", [](const Trade::MeshData& self) {
if(!self.isIndexed()) { if(!self.isIndexed()) {
PyErr_SetString(PyExc_AttributeError, "mesh is not indexed"); PyErr_SetString(PyExc_AttributeError, "mesh is not indexed");
throw py::error_already_set{}; throw py::error_already_set{};
} }
return self.indexOffset(); return self.indexOffset();
}, "Index offset") }, "Index offset")
.def_property_readonly("index_stride", [](Trade::MeshData& self) { .def_property_readonly("index_stride", [](const Trade::MeshData& self) {
if(!self.isIndexed()) { if(!self.isIndexed()) {
PyErr_SetString(PyExc_AttributeError, "mesh is not indexed"); PyErr_SetString(PyExc_AttributeError, "mesh is not indexed");
throw py::error_already_set{}; throw py::error_already_set{};
} }
return self.indexStride(); return self.indexStride();
}, "Index stride") }, "Index stride")
.def_property_readonly("indices", [](Trade::MeshData& self) { .def_property_readonly("indices", [](/*const*/ Trade::MeshData& self) {
if(!self.isIndexed()) { if(!self.isIndexed()) {
PyErr_SetString(PyExc_AttributeError, "mesh is not indexed"); PyErr_SetString(PyExc_AttributeError, "mesh is not indexed");
throw py::error_already_set{}; throw py::error_already_set{};
@ -986,14 +986,14 @@ void trade(py::module_& m) {
py::kw_only{}, /* new in pybind11 2.6 */ py::kw_only{}, /* new in pybind11 2.6 */
#endif #endif
py::arg("morph_target_id")) py::arg("morph_target_id"))
.def("attribute_name", [](Trade::MeshData& self, UnsignedInt id) { .def("attribute_name", [](const Trade::MeshData& self, UnsignedInt id) {
if(id < self.attributeCount()) if(id < self.attributeCount())
return self.attributeName(id); return self.attributeName(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Attribute name", py::arg("id")) }, "Attribute name", py::arg("id"))
.def("attribute_id", [](Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) { .def("attribute_id", [](const Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) {
if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId)) if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId))
return *found; return *found;
@ -1008,14 +1008,14 @@ void trade(py::module_& m) {
py::kw_only{}, /* new in pybind11 2.6 */ py::kw_only{}, /* new in pybind11 2.6 */
#endif #endif
py::arg("id") = 0, py::arg("morph_target_id") = -1) py::arg("id") = 0, py::arg("morph_target_id") = -1)
.def("attribute_id", [](Trade::MeshData& self, UnsignedInt id) { .def("attribute_id", [](const Trade::MeshData& self, UnsignedInt id) {
if(id < self.attributeCount()) if(id < self.attributeCount())
return self.attributeId(id); return self.attributeId(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Attribute ID in a set of attributes of the same name", py::arg("id")) }, "Attribute ID in a set of attributes of the same name", py::arg("id"))
.def("attribute_format", [](Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) { .def("attribute_format", [](const Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) {
if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId)) if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId))
return self.attributeFormat(*found); return self.attributeFormat(*found);
@ -1030,14 +1030,14 @@ void trade(py::module_& m) {
py::kw_only{}, /* new in pybind11 2.6 */ py::kw_only{}, /* new in pybind11 2.6 */
#endif #endif
py::arg("id") = 0, py::arg("morph_target_id") = -1) py::arg("id") = 0, py::arg("morph_target_id") = -1)
.def("attribute_format", [](Trade::MeshData& self, UnsignedInt id) { .def("attribute_format", [](const Trade::MeshData& self, UnsignedInt id) {
if(id < self.attributeCount()) if(id < self.attributeCount())
return self.attributeFormat(id); return self.attributeFormat(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Attribute format", py::arg("id")) }, "Attribute format", py::arg("id"))
.def("attribute_offset", [](Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) { .def("attribute_offset", [](const Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) {
if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId)) if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId))
return self.attributeOffset(*found); return self.attributeOffset(*found);
@ -1052,14 +1052,14 @@ void trade(py::module_& m) {
py::kw_only{}, /* new in pybind11 2.6 */ py::kw_only{}, /* new in pybind11 2.6 */
#endif #endif
py::arg("id") = 0, py::arg("morph_target_id") = -1) py::arg("id") = 0, py::arg("morph_target_id") = -1)
.def("attribute_offset", [](Trade::MeshData& self, UnsignedInt id) { .def("attribute_offset", [](const Trade::MeshData& self, UnsignedInt id) {
if(id < self.attributeCount()) if(id < self.attributeCount())
return self.attributeOffset(id); return self.attributeOffset(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Attribute offset", py::arg("id")) }, "Attribute offset", py::arg("id"))
.def("attribute_stride", [](Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) { .def("attribute_stride", [](const Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) {
if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId)) if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId))
return self.attributeStride(*found); return self.attributeStride(*found);
@ -1074,14 +1074,14 @@ void trade(py::module_& m) {
py::kw_only{}, /* new in pybind11 2.6 */ py::kw_only{}, /* new in pybind11 2.6 */
#endif #endif
py::arg("id") = 0, py::arg("morph_target_id") = -1) py::arg("id") = 0, py::arg("morph_target_id") = -1)
.def("attribute_stride", [](Trade::MeshData& self, UnsignedInt id) { .def("attribute_stride", [](const Trade::MeshData& self, UnsignedInt id) {
if(id < self.attributeCount()) if(id < self.attributeCount())
return self.attributeStride(id); return self.attributeStride(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Attribute stride", py::arg("id")) }, "Attribute stride", py::arg("id"))
.def("attribute_array_size", [](Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) { .def("attribute_array_size", [](const Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) {
if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId)) if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId))
return self.attributeArraySize(*found); return self.attributeArraySize(*found);
@ -1096,14 +1096,14 @@ void trade(py::module_& m) {
py::kw_only{}, /* new in pybind11 2.6 */ py::kw_only{}, /* new in pybind11 2.6 */
#endif #endif
py::arg("id") = 0, py::arg("morph_target_id") = -1) py::arg("id") = 0, py::arg("morph_target_id") = -1)
.def("attribute_array_size", [](Trade::MeshData& self, UnsignedInt id) { .def("attribute_array_size", [](const Trade::MeshData& self, UnsignedInt id) {
if(id < self.attributeCount()) if(id < self.attributeCount())
return self.attributeArraySize(id); return self.attributeArraySize(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u attributes", id, self.attributeCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Attribute array size", py::arg("id")) }, "Attribute array size", py::arg("id"))
.def("attribute", [](Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) { .def("attribute", [](/*const*/ Trade::MeshData& self, Trade::MeshAttribute name, UnsignedInt id, Int morphTargetId) {
if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId)) { if(const Containers::Optional<UnsignedInt> found = self.findAttributeId(name, id, morphTargetId)) {
/** @todo handle arrays (return a 2D view, and especially /** @todo handle arrays (return a 2D view, and especially
annotate the return type properly in the docs) */ annotate the return type properly in the docs) */
@ -1125,7 +1125,7 @@ void trade(py::module_& m) {
py::kw_only{}, /* new in pybind11 2.6 */ py::kw_only{}, /* new in pybind11 2.6 */
#endif #endif
py::arg("id") = 0, py::arg("morph_target_id") = -1) py::arg("id") = 0, py::arg("morph_target_id") = -1)
.def("attribute", [](Trade::MeshData& self, UnsignedInt id) { .def("attribute", [](/*const*/ Trade::MeshData& self, UnsignedInt id) {
if(id < self.attributeCount()) { if(id < self.attributeCount()) {
/** @todo handle arrays (return a 2D view, and especially /** @todo handle arrays (return a 2D view, and especially
annotate the return type properly in the docs) */ annotate the return type properly in the docs) */
@ -1336,7 +1336,7 @@ void trade(py::module_& m) {
corrade::enumOperators(sceneFieldFlag); corrade::enumOperators(sceneFieldFlag);
py::class_<Trade::SceneData, Trade::PyDataHolder<Trade::SceneData>>{m, "SceneData", "Scene data"} py::class_<Trade::SceneData, Trade::PyDataHolder<Trade::SceneData>>{m, "SceneData", "Scene data"}
.def_property_readonly("data_flags", [](Trade::SceneData& self) { .def_property_readonly("data_flags", [](const Trade::SceneData& self) {
return Trade::DataFlag(Containers::enumCastUnderlyingType(self.dataFlags())); return Trade::DataFlag(Containers::enumCastUnderlyingType(self.dataFlags()));
}, "Data flags") }, "Data flags")
/** @todo expose raw data at all? compared to meshes there's no use /** @todo expose raw data at all? compared to meshes there's no use
@ -1353,70 +1353,70 @@ void trade(py::module_& m) {
overload *before* the UnsignedInt overload, otherwise the integer overload *before* the UnsignedInt overload, otherwise the integer
overload gets picked even if an enum is passed from Python, causing overload gets picked even if an enum is passed from Python, causing
massive suffering */ massive suffering */
.def("field_name", [](Trade::SceneData& self, UnsignedInt id) { .def("field_name", [](const Trade::SceneData& self, UnsignedInt id) {
if(id < self.fieldCount()) if(id < self.fieldCount())
return self.fieldName(id); return self.fieldName(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Field name", py::arg("id")) }, "Field name", py::arg("id"))
.def("field_flags", [](Trade::SceneData& self, Trade::SceneField fieldName) { .def("field_flags", [](const Trade::SceneData& self, Trade::SceneField fieldName) {
if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName))
return Trade::SceneFieldFlag(Containers::enumCastUnderlyingType(self.fieldFlags(*foundField))); return Trade::SceneFieldFlag(Containers::enumCastUnderlyingType(self.fieldFlags(*foundField)));
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Flags of a named field", py::arg("name")) }, "Flags of a named field", py::arg("name"))
.def("field_flags", [](Trade::SceneData& self, UnsignedInt id) { .def("field_flags", [](const Trade::SceneData& self, UnsignedInt id) {
if(id < self.fieldCount()) if(id < self.fieldCount())
return Trade::SceneFieldFlag(Containers::enumCastUnderlyingType(self.fieldFlags(id))); return Trade::SceneFieldFlag(Containers::enumCastUnderlyingType(self.fieldFlags(id)));
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Field flags", py::arg("id")) }, "Field flags", py::arg("id"))
.def("field_type", [](Trade::SceneData& self, Trade::SceneField fieldName) { .def("field_type", [](const Trade::SceneData& self, Trade::SceneField fieldName) {
if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName))
return self.fieldType(*foundField); return self.fieldType(*foundField);
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Type of a named field", py::arg("name")) }, "Type of a named field", py::arg("name"))
.def("field_type", [](Trade::SceneData& self, UnsignedInt id) { .def("field_type", [](const Trade::SceneData& self, UnsignedInt id) {
if(id < self.fieldCount()) if(id < self.fieldCount())
return self.fieldType(id); return self.fieldType(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Field type", py::arg("id")) }, "Field type", py::arg("id"))
.def("field_size", [](Trade::SceneData& self, Trade::SceneField fieldName) { .def("field_size", [](const Trade::SceneData& self, Trade::SceneField fieldName) {
if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName))
return self.fieldSize(*foundField); return self.fieldSize(*foundField);
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Number of entries in a named field", py::arg("name")) }, "Number of entries in a named field", py::arg("name"))
.def("field_size", [](Trade::SceneData& self, UnsignedInt id) { .def("field_size", [](const Trade::SceneData& self, UnsignedInt id) {
if(id < self.fieldCount()) if(id < self.fieldCount())
return self.fieldSize(id); return self.fieldSize(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Number of entries in a field", py::arg("id")) }, "Number of entries in a field", py::arg("id"))
.def("field_array_size", [](Trade::SceneData& self, Trade::SceneField fieldName) { .def("field_array_size", [](const Trade::SceneData& self, Trade::SceneField fieldName) {
if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName))
return self.fieldArraySize(*foundField); return self.fieldArraySize(*foundField);
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Array size of a named field", py::arg("name")) }, "Array size of a named field", py::arg("name"))
.def("field_array_size", [](Trade::SceneData& self, UnsignedInt id) { .def("field_array_size", [](const Trade::SceneData& self, UnsignedInt id) {
if(id < self.fieldCount()) if(id < self.fieldCount())
return self.fieldArraySize(id); return self.fieldArraySize(id);
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Field array size", py::arg("id")) }, "Field array size", py::arg("id"))
.def("field_id", [](Trade::SceneData& self, Trade::SceneField name) { .def("field_id", [](const Trade::SceneData& self, Trade::SceneField name) {
if(const Containers::Optional<UnsignedInt> found = self.findFieldId(name)) if(const Containers::Optional<UnsignedInt> found = self.findFieldId(name))
return *found; return *found;
@ -1424,7 +1424,7 @@ void trade(py::module_& m) {
throw py::error_already_set{}; throw py::error_already_set{};
}, "Absolute ID of a named field", py::arg("name")) }, "Absolute ID of a named field", py::arg("name"))
.def("has_field", &Trade::SceneData::hasField, "Whether the scene has given field") .def("has_field", &Trade::SceneData::hasField, "Whether the scene has given field")
.def("field_object_offset", [](Trade::SceneData& self, Trade::SceneField fieldName, UnsignedLong object, std::size_t offset) { .def("field_object_offset", [](const Trade::SceneData& self, Trade::SceneField fieldName, UnsignedLong object, std::size_t offset) {
if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) { if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) {
if(object >= self.mappingBound()) { if(object >= self.mappingBound()) {
PyErr_Format(PyExc_IndexError, "index %llu out of range for %llu objects", object, self.mappingBound()); PyErr_Format(PyExc_IndexError, "index %llu out of range for %llu objects", object, self.mappingBound());
@ -1444,7 +1444,7 @@ void trade(py::module_& m) {
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Offset of an object in given name field", py::arg("field_name"), py::arg("object"), py::arg("offset") = 0) }, "Offset of an object in given name field", py::arg("field_name"), py::arg("object"), py::arg("offset") = 0)
.def("field_object_offset", [](Trade::SceneData& self, UnsignedInt fieldId, UnsignedLong object, std::size_t offset) { .def("field_object_offset", [](const Trade::SceneData& self, UnsignedInt fieldId, UnsignedLong object, std::size_t offset) {
if(fieldId >= self.fieldCount()) { if(fieldId >= self.fieldCount()) {
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", fieldId, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", fieldId, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
@ -1463,7 +1463,7 @@ void trade(py::module_& m) {
PyErr_Format(PyExc_LookupError, "object %llu not found in field %S starting at offset %zu", object, py::cast(self.fieldName(fieldId)).ptr(), offset); PyErr_Format(PyExc_LookupError, "object %llu not found in field %S starting at offset %zu", object, py::cast(self.fieldName(fieldId)).ptr(), offset);
throw py::error_already_set{}; throw py::error_already_set{};
}, "Offset of an object in given field", py::arg("field_id"), py::arg("object"), py::arg("offset") = 0) }, "Offset of an object in given field", py::arg("field_id"), py::arg("object"), py::arg("offset") = 0)
.def("has_field_object", [](Trade::SceneData& self, Trade::SceneField fieldName, UnsignedLong object) { .def("has_field_object", [](const Trade::SceneData& self, Trade::SceneField fieldName, UnsignedLong object) {
if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) { if(const Containers::Optional<UnsignedInt> foundField = self.findFieldId(fieldName)) {
if(object >= self.mappingBound()) { if(object >= self.mappingBound()) {
PyErr_Format(PyExc_IndexError, "index %llu out of range for %llu objects", object, self.mappingBound()); PyErr_Format(PyExc_IndexError, "index %llu out of range for %llu objects", object, self.mappingBound());
@ -1475,7 +1475,7 @@ void trade(py::module_& m) {
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(fieldName).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Whether a scene field has given object", py::arg("field_name"), py::arg("object")) }, "Whether a scene field has given object", py::arg("field_name"), py::arg("object"))
.def("has_field_object", [](Trade::SceneData& self, UnsignedInt fieldId, UnsignedLong object) { .def("has_field_object", [](const Trade::SceneData& self, UnsignedInt fieldId, UnsignedLong object) {
if(fieldId >= self.fieldCount()) { if(fieldId >= self.fieldCount()) {
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", fieldId, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", fieldId, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
@ -1486,7 +1486,7 @@ void trade(py::module_& m) {
} }
return self.hasFieldObject(fieldId, object); return self.hasFieldObject(fieldId, object);
}, "Whether a scene field has given object", py::arg("field_id"), py::arg("object")) }, "Whether a scene field has given object", py::arg("field_id"), py::arg("object"))
.def("mapping", [](Trade::SceneData& self, Trade::SceneField name) { .def("mapping", [](/*const*/ Trade::SceneData& self, Trade::SceneField name) {
if(const Containers::Optional<UnsignedInt> found = self.findFieldId(name)) { if(const Containers::Optional<UnsignedInt> found = self.findFieldId(name)) {
return sceneMappingView(self, self.mapping(*found)); return sceneMappingView(self, self.mapping(*found));
} }
@ -1494,7 +1494,7 @@ void trade(py::module_& m) {
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(name).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(name).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Object mapping data for given named field", py::arg("name")) }, "Object mapping data for given named field", py::arg("name"))
.def("mapping", [](Trade::SceneData& self, UnsignedInt id) { .def("mapping", [](/*const*/ Trade::SceneData& self, UnsignedInt id) {
if(id < self.fieldCount()) if(id < self.fieldCount())
return sceneMappingView(self, self.mapping(id)); return sceneMappingView(self, self.mapping(id));
@ -1523,7 +1523,7 @@ void trade(py::module_& m) {
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Mutable object mapping data for given field", py::arg("name")) }, "Mutable object mapping data for given field", py::arg("name"))
.def("field", [](Trade::SceneData& self, Trade::SceneField name) { .def("field", [](/*const*/ Trade::SceneData& self, Trade::SceneField name) {
if(const Containers::Optional<UnsignedInt> found = self.findFieldId(name)) { if(const Containers::Optional<UnsignedInt> found = self.findFieldId(name)) {
/** @todo handle arrays (return a 2D (bit) view) */ /** @todo handle arrays (return a 2D (bit) view) */
if(self.fieldArraySize(*found) != 0) { if(self.fieldArraySize(*found) != 0) {
@ -1539,7 +1539,7 @@ void trade(py::module_& m) {
PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(name).ptr(), self.fieldCount()); PyErr_Format(PyExc_KeyError, "%S not found among %u fields", py::cast(name).ptr(), self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};
}, "Data for given named field", py::arg("name")) }, "Data for given named field", py::arg("name"))
.def("field", [](Trade::SceneData& self, UnsignedInt id) { .def("field", [](/*const*/ Trade::SceneData& self, UnsignedInt id) {
if(id >= self.fieldCount()) { if(id >= self.fieldCount()) {
PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount()); PyErr_Format(PyExc_IndexError, "index %u out of range for %u fields", id, self.fieldCount());
throw py::error_already_set{}; throw py::error_already_set{};

Loading…
Cancel
Save