00001 #ifndef __INSTANTIO_BASICOUTSLOT_H
00002 #define __INSTANTIO_BASICOUTSLOT_H
00003
00004 #ifdef _MSC_VER
00005 # pragma once
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "InstantIODef.h"
00027 #include "Slot.h"
00028 #include <string>
00029 #include <set>
00030 #ifdef _MSC_VER
00031 # pragma warning (push)
00032 # pragma warning (disable: 4251)
00033 #endif
00034
00035
00036 namespace InstantIO
00037 {
00038
00039
00040 class BasicInSlot;
00041
00042
00052 class INSTANTIO_DLLMAPPING BasicOutSlot: public Slot
00053 {
00054 public:
00055
00078 class INSTANTIO_DLLMAPPING Listener
00079 {
00080 public:
00081
00083 virtual ~Listener();
00084
00094 virtual void startOutSlot(BasicOutSlot &outSlot);
00095
00105 virtual void stopOutSlot(BasicOutSlot &outSlot);
00106 };
00107
00111 virtual ~BasicOutSlot();
00112
00117 virtual Direction getDirection() const;
00118
00138 void addListener(Listener &listener);
00139
00147 void removeListener(Listener &listener);
00148
00155 void invalidateValue();
00156
00176 virtual void connect(BasicInSlot *inSlot) = 0;
00177
00193 virtual void disconnect(BasicInSlot *inSlot) = 0;
00194
00195 protected:
00196
00204 explicit BasicOutSlot(const std::string &description = std::string());
00205
00214 virtual void startOutSlot();
00215
00224 virtual void stopOutSlot();
00225
00227
00228 bool valueIsValid_;
00229
00230 private:
00231
00233 typedef std::set<Listener*> ListenerSet;
00234
00236
00237 ListenerSet listeners_;
00238
00240 BasicOutSlot(const BasicOutSlot &);
00241
00243 const BasicOutSlot &operator=(const BasicOutSlot &);
00244 };
00245
00246
00247 }
00248
00249
00250 #ifdef _MSC_VER
00251 # pragma warning (pop)
00252 #endif
00253
00254 #endif //__INSTANTIO_BASICOUTSLOT_H