1:/*
   2: * Programmins graphical user interfaces
   3: * Example: Observable.cpp
   4: * Jarkko Leponiemi 2003
   5: */
   6:
   7:#include "Observable.h"
   8:
   9:Observable::Observable()
  10:{
  11:  obs_num = 0;
  12:  observers = new ObserverPtr[10];
  13:}
  14:
  15:Observable::~Observable()
  16:{
  17:  delete [] observers;
  18:}
  19:
  20:void Observable::AddObserver(ObserverPtr o)
  21:{
  22:  if (obs_num < 10) {
  23:    observers[obs_num++] = o;
  24:  }
  25:}
  26:
  27:void Observable::RemoveObserver(ObserverPtr o)
  28:{
  29:  int found = -1;
  30:  for (int i = 0; i < obs_num; i++) {
  31:    if (observers[i] == o) {
  32:      found = 1;
  33:      break;
  34:    }
  35:  }
  36:  if (found != -1) {
  37:    obs_num--;
  38:    for (int i = found; i < obs_num; i++) {
  39:      observers[i] = observers[i+1];
  40:    }
  41:  }
  42:}
  43:
  44:void Observable::NotifyObservers(int type, void *args) {
  45:  for (int i = 0; i < obs_num; i++) {
  46:    observers[i]->Update(this, type, args);
  47:  }
  48:}