Skip to content
Snippets Groups Projects
Commit 83eadbef authored by Alain BUTEAU's avatar Alain BUTEAU
Browse files

JIRA TANGODEVIC-774

parent 01b3d1ba
No related branches found
No related tags found
No related merge requests found
#include "Observer.h"
namespace CslHexapodApi
{
Observer::~Observer ()
{
//pour chaque objet observ,
//on lui dit qu'on doit supprimer l'Observer courant
const_iterator ite = m_list.end();
for(iterator itb = m_list.begin(); itb!=ite; ++itb)
{
(*itb)->DelObs (this);
}
}
void Observer::AddObs (Observable * obs)
{
m_list.push_back (obs);
}
void Observer::DelObs(Observable * obs)
{
//on enlve l'objet observ.
iterator it = std::find (m_list.begin(), m_list.end(), obs);
if (it != m_list.end ())
m_list.erase (it);
}
void Observable::AddObs (Observer * obs)
{
//on ajoute l'Observer notre liste
m_list.push_back (obs);
//et on lui donne un nouvel objet observ.
obs->AddObs (this);
}
void Observable::DelObs (Observer * obs)
{
//mme chose que dans Observer::DelObs
iterator it = find(m_list.begin(), m_list.end(), obs);
if(it != m_list.end ())
m_list.erase (it);
}
void Observable::Notify (void)
{
//on prvient chaque Observer que l'on change de valeur
iterator itb = m_list.begin ();
const_iterator ite = m_list.end ();
for(; itb != ite ; ++itb)
{
(*itb)->Update ();
}
}
Observable::~Observable ()
{
//mme chose qu'avec Observer::~Observer
std::cout << "Observable::~Observable () <-" << std::endl;
iterator itb = m_list.begin ();
const_iterator ite = m_list.end ();
for(; itb != ite ; ++itb)
{
(*itb)->DelObs (this);
}
}
} //- namespace
#ifndef __OBSERVER_H
#define __OBSERVER_H
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
#include <string>
namespace CslHexapodApi
{
typedef double Info;
class Observable;
//*******************************************************************
//
// Class Observer : Read Pattern Description
//
// http://en.wikipedia.org/wiki/Observer_pattern
//
//*******************************************************************
class Observer
{
protected:
//- ce n'est pas necessaire pour nous
std::list<Observable*> m_list;
typedef std::list<Observable*>::iterator iterator;
typedef std::list<Observable*>::const_iterator const_iterator;
virtual ~Observer() = 0;
public:
Observer ()
{
};
virtual void Update() = 0;
void AddObs(Observable* obs);
void DelObs(Observable* obs);
};
//*******************************************************************
//
// Class Observable : Read Pattern Description
//
// http://en.wikipedia.org/wiki/Observer_pattern
//
//*******************************************************************
class Observable
{
std::list<Observer*> m_list;
typedef std::list<Observer*>::iterator iterator;
typedef std::list<Observer*>::const_iterator const_iterator;
public:
Observable ()
{
};
void AddObs (Observer* obs);
void DelObs (Observer* obs);
virtual ~Observable();
protected:
void Notify (void);
private :
};
} //- namespace
#endif //- __OBSERVER_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment