diff --git a/.gitignore b/.gitignore index 2bb291a85d061372e684672e789c38cc317cb802..08e87cbb9d5d4d9bf71d9df3b568cc58f6e02d0f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ build* *.swp .settings +cppcheck.log diff --git a/CI/ci-cppcheck.sh b/CI/ci-cppcheck.sh index b3648a6afd2dd8ac9e647d1e38a0a518f1b1d4a3..9337e331bb89f6d70cd6e8a4649f15df90dc04c4 100755 --- a/CI/ci-cppcheck.sh +++ b/CI/ci-cppcheck.sh @@ -13,22 +13,14 @@ WARNING='\033[0;93m' echo -e "${OUTPUT}" echo "==============================================================================" echo "Running cppcheck" +echo -n "Version: " +cppcheck --version echo "==============================================================================" echo -e "${NC}" echo "Please Wait ..." # Run cppcheck and output into file -cppcheck --enable=all . -I src -i Doc/ --force --suppress=missingIncludeSystem --quiet -Umin -Umax -UBMPOSTFIX -DOPENVOLUMEMESHDLLEXPORT="" &> cppcheck.log - -echo -e "${OUTPUT}" -echo "==============================================================================" -echo "CPPCHECK Messages" -echo "==============================================================================" -echo -e "${NC}" - - -# Echo output to command line for simple analysis via gitlab -cat cppcheck.log +cppcheck --enable=all . -I src -i Doc/ --force --suppress=missingIncludeSystem --inline-suppr --quiet -Umin -Umax -UBMPOSTFIX -DOPENVOLUMEMESHDLLEXPORT="" 2>&1 | tee cppcheck.log COUNT=$(wc -l < cppcheck.log ) diff --git a/src/OpenVolumeMesh/Core/PropertyDefines.hh b/src/OpenVolumeMesh/Core/PropertyDefines.hh index 9ef0cef4244250f6ba6235fad26112b6df297303..859ec7ea8a504da101df0ee6843591d8fb059385 100644 --- a/src/OpenVolumeMesh/Core/PropertyDefines.hh +++ b/src/OpenVolumeMesh/Core/PropertyDefines.hh @@ -85,11 +85,11 @@ template class PropertyTT : public PropertyPtr, Entity> { public: template - PropertyTT(MeshT *mesh, const std::string& _name, const T _def = T()) + PropertyTT(MeshT *mesh, const std::string& _name, const T &_def = T()) : PropertyTT(std::move(mesh->template request_property(_name, _def))) {} using PropertyHandleT = OpenVolumeMesh::PropHandleT; - PropertyTT(const std::string& _name, const std::string& _internal_type_name, ResourceManager& _resMan, PropertyHandleT _handle, const T _def = T()); + PropertyTT(const std::string& _name, const std::string& _internal_type_name, ResourceManager& _resMan, PropertyHandleT _handle, const T &_def = T()); ~PropertyTT() override = default; BaseProperty* clone(ResourceManager &_resMan, OpenVolumeMeshHandle _handle) const override; const std::string entityType() const override { return entityTypeName(); } diff --git a/src/OpenVolumeMesh/Core/PropertyDefinesT_impl.hh b/src/OpenVolumeMesh/Core/PropertyDefinesT_impl.hh index d7e83d4ddcdb195371af68ed82f5c51913c90781..323212b62fb23180616cf65b47a6706b7a088042 100644 --- a/src/OpenVolumeMesh/Core/PropertyDefinesT_impl.hh +++ b/src/OpenVolumeMesh/Core/PropertyDefinesT_impl.hh @@ -42,7 +42,7 @@ namespace OpenVolumeMesh { template -PropertyTT::PropertyTT(const std::string& _name, const std::string& _internal_type_name, ResourceManager& _resMan, PropertyHandleT _handle, const T _def) : +PropertyTT::PropertyTT(const std::string& _name, const std::string& _internal_type_name, ResourceManager& _resMan, PropertyHandleT _handle, const T &_def) : PropertyPtr, Entity>(new OpenVolumeMeshPropertyT(_name, _internal_type_name, _def), _resMan, _handle) { } diff --git a/src/OpenVolumeMesh/Core/TopologyKernel.cc b/src/OpenVolumeMesh/Core/TopologyKernel.cc index 66180619008a41b3c6386f9cd4e8900202b97407..da783c38a4c81c22939fbddd6ec0647fcb130561 100644 --- a/src/OpenVolumeMesh/Core/TopologyKernel.cc +++ b/src/OpenVolumeMesh/Core/TopologyKernel.cc @@ -468,6 +468,7 @@ CellHandle TopologyKernel::add_cell(const std::vector& _halfface //======================================================================================== /// Set the vertices of an edge +// cppcheck-suppress unusedFunction ; public interface void TopologyKernel::set_edge(const EdgeHandle& _eh, const VertexHandle& _fromVertex, const VertexHandle& _toVertex) { assert(_fromVertex.is_valid() && (size_t)_fromVertex.idx() < n_vertices() && !is_deleted(_fromVertex)); @@ -502,6 +503,7 @@ void TopologyKernel::set_edge(const EdgeHandle& _eh, const VertexHandle& _fromVe //======================================================================================== /// Set the half-edges of a face +// cppcheck-suppress unusedFunction ; public interface void TopologyKernel::set_face(const FaceHandle& _fh, const std::vector& _hes) { Face& f = face(_fh); @@ -542,6 +544,7 @@ void TopologyKernel::set_face(const FaceHandle& _fh, const std::vector& _hfs) { Cell& c = cell(_ch); @@ -1954,6 +1957,7 @@ void TopologyKernel::delete_multiple_cells(const std::vector& _tag) { //======================================================================================== +// cppcheck-suppress unusedFunction ; public interface CellIter TopologyKernel::delete_cell_range(const CellIter& _first, const CellIter& _last) { assert(_first >= cells_begin()); diff --git a/src/OpenVolumeMesh/FileManager/FileManager.cc b/src/OpenVolumeMesh/FileManager/FileManager.cc index d06e6e0b97dfa2ef3a2507c1678ac2e71a78842f..2f3005b5a29dd6130eac6beed26ae4eb39d23dee 100644 --- a/src/OpenVolumeMesh/FileManager/FileManager.cc +++ b/src/OpenVolumeMesh/FileManager/FileManager.cc @@ -184,6 +184,7 @@ bool FileManager::isHexahedralMesh(const std::string& _filename) const { return true; } +// cppcheck-suppress unusedFunction ; public interface bool FileManager::isTetrahedralMesh(const std::string& _filename) const { std::ifstream iff(_filename.c_str(), std::ios::in); diff --git a/src/OpenVolumeMesh/Geometry/Vector11T.hh b/src/OpenVolumeMesh/Geometry/Vector11T.hh index 7de3d22795040972da3690f21acfdf05f0d19dcf..ccad37a6c20d7afd58ecbfde6da51361d95770ba 100644 --- a/src/OpenVolumeMesh/Geometry/Vector11T.hh +++ b/src/OpenVolumeMesh/Geometry/Vector11T.hh @@ -121,7 +121,9 @@ class VectorT { typename = typename std::enable_if::type, typename = typename std::enable_if< are_convertible_to::value>::type> - constexpr VectorT(T... vs) : values_ { {static_cast(vs)...} } { + // cppcheck-suppress noExplicitConstructor ; only applies to unimportant DIM==1 + constexpr VectorT(T... vs) : values_ { {static_cast(vs)...} } + { static_assert(sizeof...(T) == DIM, "Invalid number of components specified in constructor."); static_assert(are_convertible_to::value, @@ -176,7 +178,9 @@ class VectorT { template::value>> - vector_type& operator=(const VectorT& _rhs) { + // cppcheck-suppress operatorEqRetRefThis ; false positive + vector_type& operator=(const VectorT& _rhs) + { std::transform(_rhs.data(), _rhs.data() + DIM, data(), [](OtherScalar rhs) { return static_cast(std::move(rhs)); diff --git a/src/OpenVolumeMesh/Mesh/HexahedralMeshIterators.cc b/src/OpenVolumeMesh/Mesh/HexahedralMeshIterators.cc index 74e2e258efb40677e46b45442d630fb201b2bf10..e569db1becd69dc983a0bfe5d3972f30ed87f044 100644 --- a/src/OpenVolumeMesh/Mesh/HexahedralMeshIterators.cc +++ b/src/OpenVolumeMesh/Mesh/HexahedralMeshIterators.cc @@ -235,10 +235,12 @@ HexVertexIter::HexVertexIter(const CellHandle& _ref_h, BaseIter(_mesh, _ref_h, _max_laps) { assert(_ref_h.is_valid()); - assert(_mesh->cell(_ref_h).halffaces().size() == 6); + + HexahedralMeshTopologyKernel::Cell cell = _mesh->cell(_ref_h); + assert(cell.halffaces().size() == 6); // Get first half-face - HalfFaceHandle curHF = *_mesh->cell(_ref_h).halffaces().begin(); + HalfFaceHandle curHF = *cell.halffaces().begin(); assert(curHF.is_valid()); // Get first half-edge diff --git a/src/OpenVolumeMesh/Mesh/TetrahedralMeshIterators.cc b/src/OpenVolumeMesh/Mesh/TetrahedralMeshIterators.cc index 408cf782431b566609afe24706829277d5141801..dc5261caa2a7fd200bbd53025794ad1ab7d34039 100644 --- a/src/OpenVolumeMesh/Mesh/TetrahedralMeshIterators.cc +++ b/src/OpenVolumeMesh/Mesh/TetrahedralMeshIterators.cc @@ -32,14 +32,6 @@ * * \*===========================================================================*/ -/*===========================================================================*\ - * * - * $Revision$ * - * $Date$ * - * $LastChangedBy$ * - * * -\*===========================================================================*/ - #include #include "TetrahedralMeshIterators.hh" @@ -58,10 +50,13 @@ TetVertexIter::TetVertexIter(const CellHandle& _ref_h, BaseIter(_mesh, _ref_h, _max_laps) { assert(_ref_h.is_valid()); - assert(_mesh->cell(_ref_h).halffaces().size() == 4); + + TetrahedralMeshTopologyKernel::Cell cell = _mesh->cell(_ref_h); + + assert(cell.halffaces().size() == 4); // Get first half-face - HalfFaceHandle curHF = *_mesh->cell(_ref_h).halffaces().begin(); + HalfFaceHandle curHF = *cell.halffaces().begin(); assert(curHF.is_valid()); // Get first half-edge diff --git a/src/OpenVolumeMesh/Mesh/TetrahedralMeshTopologyKernel.cc b/src/OpenVolumeMesh/Mesh/TetrahedralMeshTopologyKernel.cc index 68f52436d93611e0aabf4928abe93c948d25ddc8..2c5ec1286098b1c451441c210743b8e33047aeb0 100644 --- a/src/OpenVolumeMesh/Mesh/TetrahedralMeshTopologyKernel.cc +++ b/src/OpenVolumeMesh/Mesh/TetrahedralMeshTopologyKernel.cc @@ -330,6 +330,7 @@ void TetrahedralMeshTopologyKernel::collapse_edge(HalfEdgeHandle _heh) // swapPropertyElements(halfedge_props_begin(), halfedge_props_end(), source, destination); //} +// cppcheck-suppress unusedFunction ; public interface VertexHandle TetrahedralMeshTopologyKernel::collapse_edge(HalfEdgeHandle _heh) { bool deferred_deletion_tmp = deferred_deletion_enabled(); @@ -355,10 +356,8 @@ VertexHandle TetrahedralMeshTopologyKernel::collapse_edge(HalfEdgeHandle _heh) for (VertexCellIter vc_it = vc_iter(from_vh); vc_it.valid(); ++vc_it) incidentCells.push_back(*vc_it); - for (unsigned int i = 0; i < incidentCells.size(); ++i) + for (const CellHandle &ch: incidentCells) { - CellHandle ch = incidentCells[i]; - if (collapsingCells.find(ch) != collapsingCells.end()) continue; @@ -366,9 +365,9 @@ VertexHandle TetrahedralMeshTopologyKernel::collapse_edge(HalfEdgeHandle _heh) std::vector newHalffaces; - for (unsigned int i = 0; i < 4; ++i) + for (unsigned int hf_idx = 0; hf_idx < 4; ++hf_idx) { - Face hf = halfface(c.halffaces()[i]); + Face hf = halfface(c.halffaces()[hf_idx]); std::vector newHalfedges; for (unsigned int j = 0; j < 3; ++j) @@ -384,7 +383,7 @@ VertexHandle TetrahedralMeshTopologyKernel::collapse_edge(HalfEdgeHandle _heh) HalfFaceHandle hfh = add_halfface(newHalfedges); newHalffaces.push_back(hfh); - swap_halfface_properties(c.halffaces()[i], hfh); + swap_halfface_properties(c.halffaces()[hf_idx], hfh); } delete_cell(ch); @@ -422,6 +421,7 @@ VertexHandle TetrahedralMeshTopologyKernel::collapse_edge(HalfEdgeHandle _heh) } +// cppcheck-suppress unusedFunction ; public interface void TetrahedralMeshTopologyKernel::split_edge(HalfEdgeHandle _heh, VertexHandle _vh) { bool deferred_deletion_tmp = deferred_deletion_enabled(); @@ -450,6 +450,7 @@ void TetrahedralMeshTopologyKernel::split_edge(HalfEdgeHandle _heh, VertexHandle } +// cppcheck-suppress unusedFunction ; public interface void TetrahedralMeshTopologyKernel::split_face(FaceHandle _fh, VertexHandle _vh) { bool deferred_deletion_tmp = deferred_deletion_enabled(); @@ -562,6 +563,7 @@ std::vector TetrahedralMeshTopologyKernel::get_halfface_vertices(H return std::vector(); } +// cppcheck-suppress unusedFunction ; public interface std::vector TetrahedralMeshTopologyKernel::get_halfface_vertices(HalfFaceHandle hfh, HalfEdgeHandle heh) const { std::vector vertices;