#include "code/observable.h" #include "code/return.h" template observable_t::observable_t( observable_t::configuration_t* configuration_p ) { configuration_m = configuration_p; } template void observable_t::observe( observer_t* observer_p ) { observer_p->on_change(configuration_m->value_m); observers_m.push_back(observer_p); } template void_t observable_t::unobserve( observer_t* observer_p ) { observable_t::error_t error_l = observable_t::error_t::not_observing; for (int i = 0; i < observers_m.size(); i++) { if (observers_m[i] == observer_p) { observers_m.erase(i); error_l = observable_t::error_t::none; break; } } void_t void_l; void_l.error_m = error_l; return void_l; } template V observable_t::get_value( ) { return value_m; } template void_t observable_t::change( V* value_p ) { configuration_m->value_m = value_p; for (int i = 0; i < observers_m.size(); i++) { observer_m = observers_m[i]; observer_m->on_change(configuration_m->value_m); } void_t void_l; void_l.error_m = observable_t::error_t::none; return void_l; } template return_t observable_factory_t::create( observable_t::configuration_t* configuration_p ) { observable_t* observable_l = new observable_t( configuration_p ); return_t return_l; return_l.error_m = observable_t::error_t::none; return_l.value_m = observable_l; return return_l; }