Expression: Added ExpressionModifier class, used as base class for visitors that may modify its expressions.
This commit is contained in:
parent
8c943d0ad7
commit
095c823fda
|
@ -46,6 +46,25 @@ public:
|
|||
virtual void visit(Expression * e) = 0;
|
||||
};
|
||||
|
||||
template<class P> class AppExport ExpressionModifier : public ExpressionVisitor {
|
||||
public:
|
||||
ExpressionModifier(P & _prop)
|
||||
: prop(_prop) { }
|
||||
|
||||
virtual ~ExpressionModifier() { }
|
||||
|
||||
void setExpressionChanged() {
|
||||
if (!signaller)
|
||||
signaller = boost::shared_ptr<typename AtomicPropertyChangeInterface<P>::AtomicPropertyChange>(AtomicPropertyChangeInterface<P>::getAtomicPropertyChange(prop));
|
||||
}
|
||||
|
||||
bool getChanged() const { return signaller != 0; }
|
||||
|
||||
protected:
|
||||
P & prop;
|
||||
boost::shared_ptr<typename AtomicPropertyChangeInterface<P>::AtomicPropertyChange> signaller;
|
||||
};
|
||||
|
||||
/**
|
||||
* Base class for expressions.
|
||||
*
|
||||
|
|
|
@ -212,6 +212,7 @@ template<class P> class AtomicPropertyChangeInterface {
|
|||
protected:
|
||||
AtomicPropertyChangeInterface() : signalCounter(0) { }
|
||||
|
||||
public:
|
||||
class AtomicPropertyChange {
|
||||
public:
|
||||
AtomicPropertyChange(P & prop) : mProp(prop) {
|
||||
|
@ -234,6 +235,8 @@ protected:
|
|||
P & mProp; /**< Referenced to property we work on */
|
||||
};
|
||||
|
||||
static AtomicPropertyChange * getAtomicPropertyChange(P & prop) { return new AtomicPropertyChange(prop); }
|
||||
|
||||
private:
|
||||
|
||||
int signalCounter; /**< Counter for invoking transaction start/stop */
|
||||
|
|
Loading…
Reference in New Issue
Block a user