Several commits about memcpy() and memset() from turol in idlib squashed

"Don't use memcpy in idMat2 constructor" up to "Don't use memset to zero
non-trivial type volumeIntegrals_t" from Turo Lamminen (in orig dhewm3
repo)
This commit is contained in:
Turo Lamminen 2021-01-25 11:44:50 +02:00 committed by Daniel Gibson
parent 0c481cd869
commit b18766e259
3 changed files with 42 additions and 11 deletions

View file

@ -123,7 +123,9 @@ idSurface::idSurface
ID_INLINE idSurface::idSurface( const idDrawVert *verts, const int numVerts, const int *indexes, const int numIndexes ) { ID_INLINE idSurface::idSurface( const idDrawVert *verts, const int numVerts, const int *indexes, const int numIndexes ) {
assert( verts != NULL && indexes != NULL && numVerts > 0 && numIndexes > 0 ); assert( verts != NULL && indexes != NULL && numVerts > 0 && numIndexes > 0 );
this->verts.SetNum( numVerts ); this->verts.SetNum( numVerts );
memcpy( this->verts.Ptr(), verts, numVerts * sizeof( verts[0] ) ); for (int i = 0; i < numVerts; i++) {
this->verts[i] = verts[i];
}
this->indexes.SetNum( numIndexes ); this->indexes.SetNum( numIndexes );
memcpy( this->indexes.Ptr(), indexes, numIndexes * sizeof( indexes[0] ) ); memcpy( this->indexes.Ptr(), indexes, numIndexes * sizeof( indexes[0] ) );
GenerateEdgeIndexes(); GenerateEdgeIndexes();

View file

@ -1409,7 +1409,10 @@ void idTraceModel::VolumeIntegrals( struct volumeIntegrals_s &integrals ) const
int i, a, b, c; int i, a, b, c;
float nx, ny, nz; float nx, ny, nz;
memset( &integrals, 0, sizeof(volumeIntegrals_t) ); integrals.T0 = 0.0f;
integrals.T1.Zero();
integrals.T2.Zero();
integrals.TP.Zero();
for ( i = 0; i < numPolys; i++ ) { for ( i = 0; i < numPolys; i++ ) {
poly = &polys[i]; poly = &polys[i];

View file

@ -135,7 +135,8 @@ ID_INLINE idMat2::idMat2( const float xx, const float xy, const float yx, const
} }
ID_INLINE idMat2::idMat2( const float src[ 2 ][ 2 ] ) { ID_INLINE idMat2::idMat2( const float src[ 2 ][ 2 ] ) {
memcpy( mat, src, 2 * 2 * sizeof( float ) ); mat[0].x = src[0][0]; mat[0].y = src[0][1];
mat[1].x = src[1][0]; mat[1].y = src[1][1];
} }
ID_INLINE const idVec2 &idMat2::operator[]( int index ) const { ID_INLINE const idVec2 &idMat2::operator[]( int index ) const {
@ -439,7 +440,9 @@ ID_INLINE idMat3::idMat3( const float xx, const float xy, const float xz, const
} }
ID_INLINE idMat3::idMat3( const float src[ 3 ][ 3 ] ) { ID_INLINE idMat3::idMat3( const float src[ 3 ][ 3 ] ) {
memcpy( mat, src, 3 * 3 * sizeof( float ) ); mat[0].x = src[0][0]; mat[0].y = src[0][1]; mat[0].z = src[0][2];
mat[1].x = src[1][0]; mat[1].y = src[1][1]; mat[1].z = src[1][2];
mat[2].x = src[2][0]; mat[2].y = src[2][1]; mat[2].z = src[2][2];
} }
ID_INLINE const idVec3 &idMat3::operator[]( int index ) const { ID_INLINE const idVec3 &idMat3::operator[]( int index ) const {
@ -596,7 +599,9 @@ ID_INLINE bool idMat3::operator!=( const idMat3 &a ) const {
} }
ID_INLINE void idMat3::Zero( void ) { ID_INLINE void idMat3::Zero( void ) {
memset( mat, 0, sizeof( idMat3 ) ); mat[0].x = 0.0f; mat[0].y = 0.0f; mat[0].z = 0.0f;
mat[1].x = 0.0f; mat[1].y = 0.0f; mat[1].z = 0.0f;
mat[2].x = 0.0f; mat[2].y = 0.0f; mat[2].z = 0.0f;
} }
ID_INLINE void idMat3::Identity( void ) { ID_INLINE void idMat3::Identity( void ) {
@ -882,7 +887,10 @@ ID_INLINE idMat4::idMat4( const idMat3 &rotation, const idVec3 &translation ) {
} }
ID_INLINE idMat4::idMat4( const float src[ 4 ][ 4 ] ) { ID_INLINE idMat4::idMat4( const float src[ 4 ][ 4 ] ) {
memcpy( mat, src, 4 * 4 * sizeof( float ) ); mat[0].x = src[0][0]; mat[0].y = src[0][1]; mat[0].z = src[0][2]; mat[0].w = src[0][3];
mat[1].x = src[1][0]; mat[1].y = src[1][1]; mat[1].z = src[1][2]; mat[1].w = src[1][3];
mat[2].x = src[2][0]; mat[2].y = src[2][1]; mat[2].z = src[2][2]; mat[2].w = src[2][3];
mat[3].x = src[3][0]; mat[3].y = src[3][1]; mat[3].z = src[3][2]; mat[3].w = src[3][3];
} }
ID_INLINE const idVec4 &idMat4::operator[]( int index ) const { ID_INLINE const idVec4 &idMat4::operator[]( int index ) const {
@ -1058,7 +1066,10 @@ ID_INLINE bool idMat4::operator!=( const idMat4 &a ) const {
} }
ID_INLINE void idMat4::Zero( void ) { ID_INLINE void idMat4::Zero( void ) {
memset( mat, 0, sizeof( idMat4 ) ); mat[0].x = 0.0f; mat[0].y = 0.0f; mat[0].z = 0.0f; mat[0].w = 0.0f;
mat[1].x = 0.0f; mat[1].y = 0.0f; mat[1].z = 0.0f; mat[1].w = 0.0f;
mat[2].x = 0.0f; mat[2].y = 0.0f; mat[2].z = 0.0f; mat[2].w = 0.0f;
mat[3].x = 0.0f; mat[3].y = 0.0f; mat[3].z = 0.0f; mat[3].w = 0.0f;
} }
ID_INLINE void idMat4::Identity( void ) { ID_INLINE void idMat4::Identity( void ) {
@ -1220,7 +1231,11 @@ ID_INLINE idMat5::idMat5( void ) {
} }
ID_INLINE idMat5::idMat5( const float src[ 5 ][ 5 ] ) { ID_INLINE idMat5::idMat5( const float src[ 5 ][ 5 ] ) {
memcpy( mat, src, 5 * 5 * sizeof( float ) ); mat[0].x = src[0][0]; mat[0].y = src[0][1]; mat[0].z = src[0][2]; mat[0].s = src[0][3]; mat[0].t = src[0][4];
mat[1].x = src[1][0]; mat[1].y = src[1][1]; mat[1].z = src[1][2]; mat[1].s = src[1][3]; mat[1].t = src[1][4];
mat[2].x = src[2][0]; mat[2].y = src[2][1]; mat[2].z = src[2][2]; mat[2].s = src[2][3]; mat[2].t = src[2][4];
mat[3].x = src[3][0]; mat[3].y = src[3][1]; mat[3].z = src[3][2]; mat[3].s = src[3][3]; mat[3].t = src[3][4];
mat[4].x = src[4][0]; mat[4].y = src[4][1]; mat[4].z = src[4][2]; mat[4].s = src[4][3]; mat[4].t = src[4][4];
} }
ID_INLINE idMat5::idMat5( const idVec5 &v0, const idVec5 &v1, const idVec5 &v2, const idVec5 &v3, const idVec5 &v4 ) { ID_INLINE idMat5::idMat5( const idVec5 &v0, const idVec5 &v1, const idVec5 &v2, const idVec5 &v3, const idVec5 &v4 ) {
@ -1383,7 +1398,11 @@ ID_INLINE bool idMat5::operator!=( const idMat5 &a ) const {
} }
ID_INLINE void idMat5::Zero( void ) { ID_INLINE void idMat5::Zero( void ) {
memset( mat, 0, sizeof( idMat5 ) ); mat[0].x = 0.0f; mat[0].y = 0.0f; mat[0].z = 0.0f; mat[0].s = 0.0f; mat[0].t = 0.0f;
mat[1].x = 0.0f; mat[1].y = 0.0f; mat[1].z = 0.0f; mat[1].s = 0.0f; mat[1].t = 0.0f;
mat[2].x = 0.0f; mat[2].y = 0.0f; mat[2].z = 0.0f; mat[2].s = 0.0f; mat[2].t = 0.0f;
mat[3].x = 0.0f; mat[3].y = 0.0f; mat[3].z = 0.0f; mat[3].s = 0.0f; mat[3].t = 0.0f;
mat[4].x = 0.0f; mat[4].y = 0.0f; mat[4].z = 0.0f; mat[4].s = 0.0f; mat[4].t = 0.0f;
} }
ID_INLINE void idMat5::Identity( void ) { ID_INLINE void idMat5::Identity( void ) {
@ -1537,7 +1556,12 @@ ID_INLINE idMat6::idMat6( const idVec6 &v0, const idVec6 &v1, const idVec6 &v2,
} }
ID_INLINE idMat6::idMat6( const float src[ 6 ][ 6 ] ) { ID_INLINE idMat6::idMat6( const float src[ 6 ][ 6 ] ) {
memcpy( mat, src, 6 * 6 * sizeof( float ) ); memcpy( mat[0].ToFloatPtr(), src[0], 6 * sizeof( float ) );
memcpy( mat[1].ToFloatPtr(), src[1], 6 * sizeof( float ) );
memcpy( mat[2].ToFloatPtr(), src[2], 6 * sizeof( float ) );
memcpy( mat[3].ToFloatPtr(), src[3], 6 * sizeof( float ) );
memcpy( mat[4].ToFloatPtr(), src[4], 6 * sizeof( float ) );
memcpy( mat[5].ToFloatPtr(), src[5], 6 * sizeof( float ) );
} }
ID_INLINE const idVec6 &idMat6::operator[]( int index ) const { ID_INLINE const idVec6 &idMat6::operator[]( int index ) const {
@ -1700,7 +1724,9 @@ ID_INLINE bool idMat6::operator!=( const idMat6 &a ) const {
} }
ID_INLINE void idMat6::Zero( void ) { ID_INLINE void idMat6::Zero( void ) {
memset( mat, 0, sizeof( idMat6 ) ); for (int i = 0; i < 6; i++) {
mat[i].Zero();
}
} }
ID_INLINE void idMat6::Identity( void ) { ID_INLINE void idMat6::Identity( void ) {