00001
00002
00003
00004
00005 #ifndef __SHAREDSENDER_H__
00006 #define __SHAREDSENDER_H__
00007
00008 #ifndef __ProcessFramework_h__
00009 #error Never include this file directly. Include ProcessFramework.h instead.
00010 #endif
00011
00012 #include "Platform/ProcessFramework.h"
00013
00014
00015
00016
00017 template<class T> class SharedSender : public SenderBase<T>
00018 {
00019 private:
00020 RCRegion* package;
00021
00022 protected:
00023
00024
00025
00026 void preparePackage() {}
00027
00028
00029
00030
00031
00032 void setPackage(const ObserverID& receiver)
00033 {
00034 if(package->NumberOfReference() == 1)
00035 VERIFY(SetData(receiver,package) == oSUCCESS);
00036 }
00037
00038
00039
00040
00041
00042 void freePackage() {}
00043
00044 public:
00045
00046
00047
00048
00049
00050
00051
00052 SharedSender(PlatformProcess* process,const char* senderName,bool blocking)
00053 : SenderBase<T>(process,senderName,blocking)
00054 {
00055 package = new RCRegion(sizeof(T));
00056 getShared() = T();
00057 }
00058
00059
00060
00061
00062 ~SharedSender()
00063 {
00064 package->RemoveReference();
00065 }
00066
00067
00068
00069
00070
00071 T& getShared() {return *(T*) package->Base();}
00072
00073
00074
00075
00076
00077 const T& getShared() const {return *(T*) package->Base();}
00078 };
00079
00080
00081
00082
00083
00084
00085
00086 #define SHARED_SENDER(type) \
00087 SharedSender<type> the##type##Sender
00088
00089 #endif