Salome HOME
d155e3360e73915c094d43d633449061d0a15056
[modules/kernel.git] / src / Communication / Receiver.hxx
1 #ifndef _RECEIVER_HXX_
2 #define _RECEIVER_HXX_
3
4 #include "SALOME_Comm_i.hxx"
5
6 /*! Abstract class factorizing common methods of all the receivers. All of the receivers have to inheritate from it.
7  */
8 template<class T,class senderPtr, class senderSrv>
9 class Receiver
10 {
11 public:
12   virtual T *getValue(long &size)=0;
13   virtual ~Receiver() {}
14 protected:
15   virtual T *getValue(long &size,senderPtr sender);
16   static inline T *getLocalValue(long &size,senderSrv* servant);
17   virtual T *getDistValue(long &size)=0;
18 };
19
20 template<class T,class senderPtr, class senderSrv>
21 T *Receiver<T,senderPtr,senderSrv>::getLocalValue(long &size,senderSrv* servant)
22 {
23   const T *src=(const T *)servant->getData(size);
24   long lgr=size*servant->getSizeOf();
25   void *ret=new char[lgr];
26   memcpy(ret,src,lgr);
27   return (T *)ret;
28   //return (void *)servant->getData(size);
29 }
30
31 template<class T,class senderPtr, class senderSrv>
32 T *Receiver<T,senderPtr,senderSrv>::getValue(long &size,senderPtr sender)
33 {
34   senderSrv* data=senderSrv::find(sender);
35   if(data)
36     return getLocalValue(size,data);
37   else
38     return getDistValue(size);
39 }
40
41 #endif
42