Go to the documentation of this file.00001
00011
00012
00013
00014
00015 #include <iostream>
00016 #include "../../include/ecl/sigslots_lite.hpp"
00017
00018
00019
00020
00024 class Foo : public ecl::lite::MemberSlots<const char*,Foo>,
00025 public ecl::lite::MemberSlots<void,Foo,2>
00026 {
00027 public:
00028 Foo() {}
00029
00030 void f(const char* str) {
00031 std::cout << "Foo::f() " << str << std::endl;
00032 }
00033 void h() {
00034 std::cout << "Foo::h()" << std::endl;
00035 }
00036 };
00037
00038 void f(const char* str) {
00039 std::cout << "f(char*) " << str << std::endl;
00040 }
00041
00042 void g(const char* str) {
00043 std::cout << "g(char*) " << str << std::endl;
00044 }
00045
00046 void h() {
00047 std::cout << "h()" << std::endl;
00048 }
00049
00050
00051
00052
00053
00054 template<>
00055 const unsigned int ecl::lite::GlobalSlots<const char*>::capacity = 4;
00056
00057 template<>
00058 const unsigned int ecl::lite::GlobalSlots<void>::capacity = 2;
00059
00064
00065
00066
00067
00068 int main(int argc, char **argv) {
00069
00070 Foo foo;
00071
00072 std::cout << std::endl;
00073 std::cout << "***********************************************************" << std::endl;
00074 std::cout << " Data Sigslots" << std::endl;
00075 std::cout << "***********************************************************" << std::endl;
00076 std::cout << std::endl;
00077
00078 ecl::lite::Signal<const char*,2> dual_slot_signal;
00079 ecl::lite::Signal<const char*> lone_signal1, lone_signal2;
00080
00081 ecl::lite::connect(dual_slot_signal,f);
00082 ecl::lite::connect(dual_slot_signal,g);
00083 dual_slot_signal.emit("one signal, two global slots");
00084 std::cout << std::endl;
00085
00086 ecl::lite::connect(lone_signal1,&Foo::f,foo);
00087 lone_signal1.emit("direct member slot connection");
00088 std::cout << std::endl;
00089
00090 ecl::lite::connect(lone_signal2,&Foo::f,foo);
00091 lone_signal1.emit("multiple signals, one slot connection - I");
00092 lone_signal2.emit("multiple signals, one slot connection - II");
00093 std::cout << std::endl;
00094
00095 std::cout << std::endl;
00096 std::cout << "***********************************************************" << std::endl;
00097 std::cout << " Void Sigslots" << std::endl;
00098 std::cout << "***********************************************************" << std::endl;
00099 std::cout << std::endl;
00100
00101 ecl::lite::Signal<void> void_signal, member_void_signal;
00102 connect(member_void_signal,&Foo::h, foo);
00103 connect(void_signal,h);
00104 void_signal.emit();
00105 member_void_signal.emit();
00106
00107 std::cout << std::endl;
00108 std::cout << "***********************************************************" << std::endl;
00109 std::cout << " Storage" << std::endl;
00110 std::cout << "***********************************************************" << std::endl;
00111 std::cout << std::endl;
00112
00113 std::cout << "GlobalSlots<const char*> Stored : " << ecl::lite::global_slots_stored<const char*>() << std::endl;
00114 std::cout << "GlobalSlots<const char*> Capacity: " << ecl::lite::global_slots_capacity<const char*>() << std::endl;
00115 std::cout << std::endl;
00116 std::cout << "GlobalSlots<void> Stored : " << ecl::lite::global_slots_stored<void>() << std::endl;
00117 std::cout << "GlobalSlots<void> Capacity: " << ecl::lite::global_slots_capacity<void>() << std::endl;
00118 std::cout << std::endl;
00119
00120 std::cout << "MemberSlots<const char*> Stored(foo) : " << ecl::lite::member_slots_stored<const char*>(foo) << std::endl;
00121 std::cout << "MemberSlots<const char*> Capacity(Foo): " << ecl::lite::member_slots_capacity<const char*>(foo) << std::endl;
00122 std::cout << std::endl;
00123 std::cout << "MemberSlots<void> Stored(foo) : " << ecl::lite::member_slots_stored<void>(foo) << std::endl;
00124 std::cout << "MemberSlots<void> Capacity(Foo): " << ecl::lite::member_slots_capacity<void>(foo) << std::endl;
00125 std::cout << std::endl;
00126
00127 ecl::lite::Signal<const char*,2> signal_storage_test;
00128 std::cout << "Incrementally adding slots to signal<const char*,2>" << std::endl;
00129 std::cout << " capacity: " << signal_storage_test.capacity() << std::endl;
00130 std::cout << " stored : " << signal_storage_test.stored() << std::endl;
00131 connect(signal_storage_test,f);
00132 std::cout << " stored : " << signal_storage_test.stored() << std::endl;
00133 connect(signal_storage_test,g);
00134 std::cout << " stored : " << signal_storage_test.stored() << std::endl;
00135 std::cout << std::endl;
00136
00137 std::cout << std::endl;
00138 std::cout << "***********************************************************" << std::endl;
00139 std::cout << " Error Handling" << std::endl;
00140 std::cout << "***********************************************************" << std::endl;
00141 std::cout << std::endl;
00142
00143 ecl::lite::sigslots::Error error;
00144 std::cout << "Adding two slots to a single slot capacity signal." << std::endl;
00145 ecl::lite::Signal<const char*> one_shot_signal;
00146 std::cout << " Connecting a first slot" << std::endl;
00147 error = connect(one_shot_signal,f);
00148 if ( error.flag() != ecl::lite::sigslots::NoError ) {
00149 std::cout << " " << error.what() << std::endl;
00150 }
00151 std::cout << " Connecting a second slot" << std::endl;
00152 error = connect(one_shot_signal,f);
00153 if ( error.flag() != ecl::lite::sigslots::NoError ) {
00154 std::cout << " " << error.what() << std::endl;
00155 }
00156 std::cout << std::endl;
00157
00158 std::cout << "Adding two slots to a single slot capacity MemberSlots interface." << std::endl;
00159 ecl::lite::Signal<const char*> two_shot_signal;
00160 Foo foo_new;
00161 std::cout << " Connecting a first slot" << std::endl;
00162 error = connect(two_shot_signal, &Foo::f, foo_new);
00163 if ( error.flag() != ecl::lite::sigslots::NoError ) {
00164 std::cout << " " << error.what() << std::endl;
00165 }
00166 std::cout << " Connecting a second slot" << std::endl;
00167 error = connect(two_shot_signal, &Foo::f, foo_new);
00168 if ( error.flag() != ecl::lite::sigslots::NoError ) {
00169 std::cout << " " << error.what() << std::endl;
00170 }
00171
00172 std::cout << std::endl;
00173 std::cout << "***********************************************************" << std::endl;
00174 std::cout << " Passed" << std::endl;
00175 std::cout << "***********************************************************" << std::endl;
00176 std::cout << std::endl;
00177
00178 return 0;
00179 }