Skip to content

Commit 9cc1a8c

Browse files
committedSep 13, 2018
Add unique_ptr in nodeIsBetweenFromOgcFilter
1 parent 65d50cd commit 9cc1a8c

File tree

1 file changed

+11
-17
lines changed

1 file changed

+11
-17
lines changed
 

‎src/core/qgsogcutils.cpp

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3464,50 +3464,44 @@ QgsExpressionNodeFunction *QgsOgcUtilsExpressionFromFilter::nodeFunctionFromOgcF
34643464
QgsExpressionNode *QgsOgcUtilsExpressionFromFilter::nodeIsBetweenFromOgcFilter( const QDomElement &element )
34653465
{
34663466
// <ogc:PropertyIsBetween> encode a Range check
3467-
QgsExpressionNode *operand = nullptr, *lowerBound = nullptr;
3468-
QgsExpressionNode *operand2 = nullptr, *upperBound = nullptr;
3467+
std::unique_ptr<QgsExpressionNode> operand;
3468+
std::unique_ptr<QgsExpressionNode> lowerBound;
3469+
std::unique_ptr<QgsExpressionNode> upperBound;
34693470

34703471
QDomElement operandElem = element.firstChildElement();
34713472
while ( !operandElem.isNull() )
34723473
{
34733474
if ( operandElem.tagName() == QLatin1String( "LowerBoundary" ) )
34743475
{
34753476
QDomElement lowerBoundElem = operandElem.firstChildElement();
3476-
lowerBound = nodeFromOgcFilter( lowerBoundElem );
3477+
lowerBound.reset( nodeFromOgcFilter( lowerBoundElem ) );
34773478
}
34783479
else if ( operandElem.tagName() == QLatin1String( "UpperBoundary" ) )
34793480
{
34803481
QDomElement upperBoundElem = operandElem.firstChildElement();
3481-
upperBound = nodeFromOgcFilter( upperBoundElem );
3482+
upperBound.reset( nodeFromOgcFilter( upperBoundElem ) );
34823483
}
34833484
else
34843485
{
34853486
// <ogc:expression>
3486-
// both operand and operand2 contain the same expression,
3487-
// they are respectively compared to lower bound and upper bound
3488-
operand = nodeFromOgcFilter( operandElem );
3489-
operand2 = nodeFromOgcFilter( operandElem );
3487+
operand.reset( nodeFromOgcFilter( operandElem ) );
34903488
}
34913489

3492-
if ( operand && lowerBound && operand2 && upperBound )
3490+
if ( operand && lowerBound && upperBound )
34933491
break;
34943492

34953493
operandElem = operandElem.nextSiblingElement();
34963494
}
34973495

3498-
if ( !operand || !lowerBound || !operand2 || !upperBound )
3496+
if ( !operand || !lowerBound || !upperBound )
34993497
{
3500-
delete operand;
3501-
delete lowerBound;
3502-
delete upperBound;
3503-
35043498
mErrorMessage = QObject::tr( "missing some required sub-elements in %1:PropertyIsBetween" ).arg( mPrefix );
35053499
return nullptr;
35063500
}
35073501

3508-
QgsExpressionNode *geOperator = new QgsExpressionNodeBinaryOperator( QgsExpressionNodeBinaryOperator::boGE, operand, lowerBound );
3509-
QgsExpressionNode *leOperator = new QgsExpressionNodeBinaryOperator( QgsExpressionNodeBinaryOperator::boLE, operand2, upperBound );
3510-
return new QgsExpressionNodeBinaryOperator( QgsExpressionNodeBinaryOperator::boAnd, geOperator, leOperator );
3502+
std::unique_ptr<QgsExpressionNode> leOperator( new QgsExpressionNodeBinaryOperator( QgsExpressionNodeBinaryOperator::boLE, operand->clone(), upperBound.release() ) );
3503+
std::unique_ptr<QgsExpressionNode> geOperator( new QgsExpressionNodeBinaryOperator( QgsExpressionNodeBinaryOperator::boGE, operand.release(), lowerBound.release() ) );
3504+
return new QgsExpressionNodeBinaryOperator( QgsExpressionNodeBinaryOperator::boAnd, geOperator.release(), leOperator.release() );
35113505
}
35123506

35133507
QString QgsOgcUtilsExpressionFromFilter::errorMessage() const

0 commit comments

Comments
 (0)
Please sign in to comment.