00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _CSP_KERNEL_Channel_H
00030 #define _CSP_KERNEL_Channel_H
00031
00032
00033 CSP_NAMESPACE_BEGIN(csp);
00034
00035
00040 class CSP_API Channel
00041 {
00042 public:
00043 Channel() : m_size(-1), m_rank(-1), m_closed(false) {}
00044 virtual ~Channel() {}
00045
00046 int size() const { return m_size; }
00047 int rank() const { return m_rank; }
00048 bool closed() const { return m_closed; }
00049
00050 void close() { assert(!m_closed); m_closed = true; }
00051
00055 virtual void sendInt(int destRank, int i) const = 0;
00056
00061 virtual int recvInt(int& srcRank) const = 0;
00062
00066 virtual int recvIntFrom(int srcRank) const = 0;
00067
00071 virtual void sendBytes(
00072 int destRank,
00073 const unsigned char* buf,
00074 int count) const = 0;
00075
00081 virtual unsigned char* recvBytes(int srcRank, int count) const = 0;
00082
00083 protected:
00085 Channel(const Channel&);
00086
00088 Channel& operator=(const Channel&);
00089
00091 int m_size;
00092
00094 int m_rank;
00095
00097 bool m_closed;
00098 };
00099
00100
00101 CSP_NAMESPACE_END(csp);
00102
00103
00104 #endif // _CSP_KERNEL_Channel_H
00105
00106
00107
00108