Opened 7 years ago

Last modified 7 years ago

#6755 closed enhancement

Improve the efficiency of SHPCreateObject in shpopen.c — at Version 1

Reported by: sunxunfeng Owned by: warmerdam
Priority: normal Milestone:
Component: default Version: svn-trunk
Severity: normal Keywords:
Cc:

Description (last modified by sunxunfeng)

To Improve the efficiency of program(SHPCreateObject in shpopen.c) execution:

https://trac.osgeo.org/gdal/browser/trunk/gdal/ogr/ogrsf_frmts/shape/shpopen.c Rev 36763

From:

1516	if( nVertices > 0 )
1517	{
1518	    psObject->padfX = (double *) calloc(sizeof(double),nVertices);
1519	    psObject->padfY = (double *) calloc(sizeof(double),nVertices);
1520	    psObject->padfZ = (double *) calloc(sizeof(double),nVertices);
1521	    psObject->padfM = (double *) calloc(sizeof(double),nVertices);
1522	
1523	    for( i = 0; i < nVertices; i++ )
1524	    {
1525	        if( padfX != NULL )
1526	            psObject->padfX[i] = padfX[i];
1527	        if( padfY != NULL )
1528	            psObject->padfY[i] = padfY[i];
1529	        if( padfZ != NULL && bHasZ )
1530	            psObject->padfZ[i] = padfZ[i];
1531	        if( padfM != NULL && bHasM )
1532	            psObject->padfM[i] = padfM[i];
1533	    }
1534	    if( padfM != NULL && bHasM )
1535	        psObject->bMeasureIsUsed = TRUE;
1536	}

To:

1516    if( nVertices > 0 )
1517    {
1518        int nSize = sizeof(double) * nVertices;
1519        psObject->padfX = (double *) malloc(nSize);
1520        psObject->padfY = (double *) malloc(nSize);
1521        psObject->padfZ = (double *) malloc(nSize);
1522        psObject->padfM = (double *) malloc(nSize);
1523        if( padfX != NULL && psObject->padfX != NULL)
1524            memcpy(psObject->padfX, padfX, nSize);
1525        if( padfY != NULL && psObject->padfY != NULL)
1526            memcpy(psObject->padfY, padfY, nSize);
1527        if( padfZ != NULL && bHasZ && psObject->padfZ != NULL)
1528            memcpy(psObject->padfZ, padfZ, nSize);
1529        if( padfM != NULL && bHasM && psObject->padfM != NULL)
1530        {
1531            memcpy(psObject->padfM, padfM, nSize);
1532            psObject->bMeasureIsUsed = TRUE;
1533        }
1534    }

Change History (2)

comment:1 by sunxunfeng, 7 years ago

Description: modified (diff)

by sunxunfeng, 7 years ago

Attachment: shpopen.c.patch added

patch file of shpopen.c(Rev 36763)

Note: See TracTickets for help on using tickets.