VarBoolAndBool::VarBoolAndBool( intf_thread_t *pIntf, VarBool &rVar1,
VarBool &rVar2 ):
- VarBool( pIntf ), m_rVar1( rVar1 ), m_rVar2( rVar2 )
+ VarBool( pIntf ), m_rVar1( rVar1 ), m_rVar2( rVar2 ),
+ m_value( rVar1.get() && rVar2.get() )
{
m_rVar1.addObserver( this );
m_rVar2.addObserver( this );
void VarBoolAndBool::onUpdate( Subject<VarBool> &rVariable, void *arg )
{
- notify();
+ if( m_value != ( m_rVar1.get() && m_rVar2.get() ) )
+ {
+ m_value = ( m_rVar1.get() && m_rVar2.get() );
+ notify();
+ }
}
VarBoolOrBool::VarBoolOrBool( intf_thread_t *pIntf, VarBool &rVar1,
VarBool &rVar2 ):
- VarBool( pIntf ), m_rVar1( rVar1 ), m_rVar2( rVar2 )
+ VarBool( pIntf ), m_rVar1( rVar1 ), m_rVar2( rVar2 ),
+ m_value( rVar1.get() || rVar2.get() )
{
m_rVar1.addObserver( this );
m_rVar2.addObserver( this );
void VarBoolOrBool::onUpdate( Subject<VarBool> &rVariable , void*arg)
{
- notify();
+ if( m_value != ( m_rVar1.get() || m_rVar2.get() ) )
+ {
+ m_value = ( m_rVar1.get() || m_rVar2.get() );
+ notify();
+ }
}
public:
VarBoolAndBool( intf_thread_t *pIntf, VarBool &rVar1, VarBool &rVar2 );
virtual ~VarBoolAndBool();
- virtual bool get() const { return m_rVar1.get() && m_rVar2.get(); }
+ virtual bool get() const { return m_value; }
// Called when one of the observed variables is changed
void onUpdate( Subject<VarBool> &rVariable, void* );
private:
/// Boolean variables
VarBool &m_rVar1, &m_rVar2;
+ bool m_value;
};
public:
VarBoolOrBool( intf_thread_t *pIntf, VarBool &rVar1, VarBool &rVar2 );
virtual ~VarBoolOrBool();
- virtual bool get() const { return m_rVar1.get() || m_rVar2.get(); }
+ virtual bool get() const { return m_value; }
// Called when one of the observed variables is changed
void onUpdate( Subject<VarBool> &rVariable, void* );
private:
/// Boolean variables
VarBool &m_rVar1, &m_rVar2;
+ bool m_value;
};