Skip to content

Commit

Permalink
Fix build warning in vertex iterator
Browse files Browse the repository at this point in the history
Move away from C style raw memory management.

```
/QGIS-e0de9c5c26c919cbdb3b9ecc3875ad4320d318b4/src/core/geometry/qgsabstractgeometry.cpp: In constructor 'QgsAbstractGeometry::vertex_iterator::vertex_iterator(const QgsAbstractGeometry*, int)':
/QGIS-e0de9c5c26c919cbdb3b9ecc3875ad4320d318b4/src/core/geometry/qgsabstractgeometry.cpp:321:44: warning: 'void* memset(void*, int, size_t)' clearing an object of non-trivial type 'struct QgsAbstractGeometry::vertex_iterator::Level'; use assignment or value-initialization instead [-Wclass-memaccess]
  321 |   ::memset( levels, 0, sizeof( Level ) * 3 );  // make sure we clean up also the padding areas (for memcmp test in operator==)
      |                                            ^
In file included from /QGIS-e0de9c5c26c919cbdb3b9ecc3875ad4320d318b4/src/core/geometry/qgsabstractgeometry.cpp:17:
/QGIS-e0de9c5c26c919cbdb3b9ecc3875ad4320d318b4/src/core/geometry/qgsabstractgeometry.h:852:16: note: 'struct QgsAbstractGeometry::vertex_iterator::Level' declared here
  852 |         struct Level
      |                ^~~~~
```
  • Loading branch information
m-kuhn committed Aug 8, 2020
1 parent 2b3b88c commit d38acb4
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 5 deletions.
5 changes: 2 additions & 3 deletions src/core/geometry/qgsabstractgeometry.cpp
Expand Up @@ -318,7 +318,7 @@ QgsAbstractGeometry *QgsAbstractGeometry::segmentize( double tolerance, Segmenta
QgsAbstractGeometry::vertex_iterator::vertex_iterator( const QgsAbstractGeometry *g, int index )
: depth( 0 )
{
::memset( levels, 0, sizeof( Level ) * 3 ); // make sure we clean up also the padding areas (for memcmp test in operator==)
levels.fill( Level() );
levels[0].g = g;
levels[0].index = index;

Expand Down Expand Up @@ -399,8 +399,7 @@ bool QgsAbstractGeometry::vertex_iterator::operator==( const QgsAbstractGeometry
{
if ( depth != other.depth )
return false;
int res = ::memcmp( levels, other.levels, sizeof( Level ) * ( depth + 1 ) );
return res == 0;
return std::equal( std::begin( levels ), std::begin( levels ) + depth + 1, std::begin( other.levels ) );
}

void QgsAbstractGeometry::vertex_iterator::digDown()
Expand Down
4 changes: 2 additions & 2 deletions src/core/geometry/qgsabstractgeometry.h
Expand Up @@ -855,8 +855,8 @@ class CORE_EXPORT QgsAbstractGeometry
int index = 0; //!< Ptr in the current geometry
};

Level levels[3]; //!< Stack of levels - three levels should be sufficient (e.g. part index, ring index, vertex index)
int depth = -1; //!< At what depth level are we right now
std::array<Level, 3> levels; //!< Stack of levels - three levels should be sufficient (e.g. part index, ring index, vertex index)
int depth = -1; //!< At what depth level are we right now

void digDown(); //!< Prepare the stack of levels so that it points to a leaf child geometry

Expand Down

0 comments on commit d38acb4

Please sign in to comment.