Skip to content

Commit 75896d9

Browse files
committedMay 22, 2013
QgsExpression takes const QgsFeature as pointer and by reference
1 parent e9e06b9 commit 75896d9

File tree

3 files changed

+142
-134
lines changed

3 files changed

+142
-134
lines changed
 

‎python/core/qgsexpression.sip

+11-11
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ class QgsExpression
2828

2929
//! Evaluate the feature and return the result
3030
//! @note prepare() should be called before calling this method
31-
QVariant evaluate( QgsFeature* f = NULL );
31+
QVariant evaluate( const QgsFeature* f = NULL );
3232

3333
//! Evaluate the feature and return the result
3434
//! @note this method does not expect that prepare() has been called on this instance
35-
QVariant evaluate( QgsFeature* f, const QgsFields& fields );
35+
QVariant evaluate( const QgsFeature* f, const QgsFields& fields );
3636

3737
//! Returns true if an error occurred when evaluating last input
3838
bool hasEvalError() const;
@@ -136,7 +136,7 @@ class QgsExpression
136136
/** The help text for the function. */
137137
QString helptext();
138138

139-
virtual QVariant func(const QVariantList& values, QgsFeature* f, QgsExpression* parent) = 0;
139+
virtual QVariant func(const QVariantList& values, const QgsFeature* f, QgsExpression* parent) = 0;
140140
};
141141

142142
static const QList<QgsExpression::Function *> &Functions();
@@ -185,7 +185,7 @@ class QgsExpression
185185
virtual QgsExpression::NodeType nodeType() const = 0;
186186
// abstract virtual eval function
187187
// errors are reported to the parent
188-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f ) = 0;
188+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f ) = 0;
189189

190190
// abstract virtual preparation function
191191
// errors are reported to the parent
@@ -242,7 +242,7 @@ class QgsExpression
242242

243243
virtual QgsExpression::NodeType nodeType() const;
244244
virtual bool prepare( QgsExpression* parent, const QgsFields &fields );
245-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
245+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
246246
virtual QString dump() const;
247247

248248
virtual QStringList referencedColumns() const;
@@ -262,7 +262,7 @@ class QgsExpression
262262

263263
virtual QgsExpression::NodeType nodeType() const;
264264
virtual bool prepare( QgsExpression* parent, const QgsFields &fields );
265-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
265+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
266266
virtual QString dump() const;
267267

268268
virtual QStringList referencedColumns() const;
@@ -282,7 +282,7 @@ class QgsExpression
282282

283283
virtual QgsExpression::NodeType nodeType() const;
284284
virtual bool prepare( QgsExpression* parent, const QgsFields &fields );
285-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
285+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
286286
virtual QString dump() const;
287287

288288
virtual QStringList referencedColumns() const;
@@ -302,7 +302,7 @@ class QgsExpression
302302

303303
virtual QgsExpression::NodeType nodeType() const;
304304
virtual bool prepare( QgsExpression* parent, const QgsFields &fields );
305-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
305+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
306306
virtual QString dump() const;
307307

308308
virtual QStringList referencedColumns() const;
@@ -319,7 +319,7 @@ class QgsExpression
319319

320320
virtual QgsExpression::NodeType nodeType() const;
321321
virtual bool prepare( QgsExpression* parent, const QgsFields &fields );
322-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
322+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
323323
virtual QString dump() const;
324324

325325
virtual QStringList referencedColumns() const;
@@ -336,7 +336,7 @@ class QgsExpression
336336

337337
virtual QgsExpression::NodeType nodeType() const;
338338
virtual bool prepare( QgsExpression* parent, const QgsFields &fields );
339-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
339+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
340340
virtual QString dump() const;
341341

342342
virtual QStringList referencedColumns() const;
@@ -363,7 +363,7 @@ class QgsExpression
363363
~NodeCondition();
364364

365365
virtual QgsExpression::NodeType nodeType() const;
366-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
366+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
367367
virtual bool prepare( QgsExpression* parent, const QgsFields &fields );
368368
virtual QString dump() const;
369369

‎src/core/qgsexpression.cpp

+110-110
Large diffs are not rendered by default.

‎src/core/qgsexpression.h

+21-13
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,19 @@ class CORE_EXPORT QgsExpression
113113

114114
//! Evaluate the feature and return the result
115115
//! @note prepare() should be called before calling this method
116-
QVariant evaluate( QgsFeature* f = NULL );
116+
QVariant evaluate( const QgsFeature* f = NULL );
117+
118+
//! Evaluate the feature and return the result
119+
//! @note prepare() should be called before calling this method
120+
inline QVariant evaluate( const QgsFeature& f ) { return evaluate( &f ); }
121+
122+
//! Evaluate the feature and return the result
123+
//! @note this method does not expect that prepare() has been called on this instance
124+
QVariant evaluate( const QgsFeature* f, const QgsFields& fields );
117125

118126
//! Evaluate the feature and return the result
119127
//! @note this method does not expect that prepare() has been called on this instance
120-
QVariant evaluate( QgsFeature* f, const QgsFields& fields );
128+
inline QVariant evaluate( const QgsFeature& f, const QgsFields& fields ) { return evaluate( &f, fields ); }
121129

122130
//! Returns true if an error occurred when evaluating last input
123131
bool hasEvalError() const { return !mEvalErrorString.isNull(); }
@@ -223,7 +231,7 @@ class CORE_EXPORT QgsExpression
223231
static const char* BinaryOperatorText[];
224232
static const char* UnaryOperatorText[];
225233

226-
typedef QVariant( *FcnEval )( const QVariantList& values, QgsFeature* f, QgsExpression* parent );
234+
typedef QVariant( *FcnEval )( const QVariantList& values, const QgsFeature* f, QgsExpression* parent );
227235

228236

229237
/**
@@ -245,7 +253,7 @@ class CORE_EXPORT QgsExpression
245253
/** The help text for the function. */
246254
QString helptext() { return mHelpText.isEmpty() ? QgsExpression::helptext( mName ) : mHelpText; }
247255

248-
virtual QVariant func( const QVariantList& values, QgsFeature* f, QgsExpression* parent ) = 0;
256+
virtual QVariant func( const QVariantList& values, const QgsFeature* f, QgsExpression* parent ) = 0;
249257

250258
bool operator==( const Function& other ) const
251259
{
@@ -269,7 +277,7 @@ class CORE_EXPORT QgsExpression
269277
StaticFunction( QString fnname, int params, FcnEval fcn, QString group, QString helpText = QString(), bool usesGeometry = false )
270278
: Function( fnname, params, group, helpText, usesGeometry ), mFnc( fcn ) {}
271279

272-
virtual QVariant func( const QVariantList& values, QgsFeature* f, QgsExpression* parent )
280+
virtual QVariant func( const QVariantList& values, const QgsFeature* f, QgsExpression* parent )
273281
{
274282
return mFnc( values, f, parent );
275283
}
@@ -330,7 +338,7 @@ class CORE_EXPORT QgsExpression
330338
virtual NodeType nodeType() const = 0;
331339
// abstract virtual eval function
332340
// errors are reported to the parent
333-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f ) = 0;
341+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f ) = 0;
334342

335343
// abstract virtual preparation function
336344
// errors are reported to the parent
@@ -401,7 +409,7 @@ class CORE_EXPORT QgsExpression
401409

402410
virtual NodeType nodeType() const { return ntUnaryOperator; }
403411
virtual bool prepare( QgsExpression* parent, const QgsFields& fields );
404-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
412+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
405413
virtual QString dump() const;
406414

407415
virtual QStringList referencedColumns() const { return mOperand->referencedColumns(); }
@@ -425,7 +433,7 @@ class CORE_EXPORT QgsExpression
425433

426434
virtual NodeType nodeType() const { return ntBinaryOperator; }
427435
virtual bool prepare( QgsExpression* parent, const QgsFields& fields );
428-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
436+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
429437
virtual QString dump() const;
430438

431439
virtual QStringList referencedColumns() const { return mOpLeft->referencedColumns() + mOpRight->referencedColumns(); }
@@ -455,7 +463,7 @@ class CORE_EXPORT QgsExpression
455463

456464
virtual NodeType nodeType() const { return ntInOperator; }
457465
virtual bool prepare( QgsExpression* parent, const QgsFields& fields );
458-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
466+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
459467
virtual QString dump() const;
460468

461469
virtual QStringList referencedColumns() const { QStringList lst( mNode->referencedColumns() ); foreach ( Node* n, mList->list() ) lst.append( n->referencedColumns() ); return lst; }
@@ -480,7 +488,7 @@ class CORE_EXPORT QgsExpression
480488

481489
virtual NodeType nodeType() const { return ntFunction; }
482490
virtual bool prepare( QgsExpression* parent, const QgsFields& fields );
483-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
491+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
484492
virtual QString dump() const;
485493

486494
virtual QStringList referencedColumns() const { QStringList lst; if ( !mArgs ) return lst; foreach ( Node* n, mArgs->list() ) lst.append( n->referencedColumns() ); return lst; }
@@ -502,7 +510,7 @@ class CORE_EXPORT QgsExpression
502510

503511
virtual NodeType nodeType() const { return ntLiteral; }
504512
virtual bool prepare( QgsExpression* parent, const QgsFields& fields );
505-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
513+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
506514
virtual QString dump() const;
507515

508516
virtual QStringList referencedColumns() const { return QStringList(); }
@@ -522,7 +530,7 @@ class CORE_EXPORT QgsExpression
522530

523531
virtual NodeType nodeType() const { return ntColumnRef; }
524532
virtual bool prepare( QgsExpression* parent, const QgsFields& fields );
525-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
533+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
526534
virtual QString dump() const;
527535

528536
virtual QStringList referencedColumns() const { return QStringList( mName ); }
@@ -553,7 +561,7 @@ class CORE_EXPORT QgsExpression
553561
~NodeCondition() { delete mElseExp; foreach ( WhenThen* cond, mConditions ) delete cond; }
554562

555563
virtual NodeType nodeType() const { return ntCondition; }
556-
virtual QVariant eval( QgsExpression* parent, QgsFeature* f );
564+
virtual QVariant eval( QgsExpression* parent, const QgsFeature* f );
557565
virtual bool prepare( QgsExpression* parent, const QgsFields& fields );
558566
virtual QString dump() const;
559567

0 commit comments

Comments
 (0)
Please sign in to comment.