// C RunTime Header Files
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
#include <stdint.h>
#include <time.h>
// C++ Headers
#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
#include <algorithm>
// Windows Headers
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
// Project Headers
#include "Tweakables.h"
class ObservableData
{
public:
std::vector<Observer*> m_observers;
};
Observable::Observable()
{
m_data = new ObservableData;
}
Observable::~Observable()
{
delete m_data;
}
void Observable::registerObserver(Observer& a_observer)
{
m_data->m_observers.push_back(&a_observer);
}
void Observable::unregisterObserver(Observer& a_observer)
{
std::vector<Observer*>& vec = m_data->m_observers;
vec.erase(std::remove(vec.begin(), vec.end(), &a_observer), vec.end());
}
void Observable::notifyObservers(const char* a_message) const
{
for (unsigned i = 0; i < m_data->m_observers.size(); ++i)
{
m_data->m_observers[i]->notify(*this, a_message);
}
}