00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00020 #ifndef SHCHANNEL_HPP
00021 #define SHCHANNEL_HPP
00022
00023 #include "ShChannelNode.hpp"
00024 #include "ShProgram.hpp"
00025 #include "ShGeneric.hpp"
00026
00027 namespace SH {
00028
00034 template<typename T>
00035 class ShChannel : public ShMetaForwarder {
00036 public:
00038 ShChannel();
00040 ShChannel(const ShMemoryPtr& memory, int count);
00041
00043 void memory(const ShMemoryPtr& memory, int count);
00044
00046 int count() const;
00048 ShPointer<const ShMemory> memory() const;
00050 ShMemoryPtr memory();
00051
00054 T operator()() const;
00055
00057 template<typename T2>
00058 T operator[](const ShGeneric<1, T2>& index) const;
00059
00061 ShChannelNodePtr node();
00063 const ShChannelNodePtr node() const;
00064
00066 ShChannel& operator=(const ShProgram& program);
00067
00068 private:
00070 ShChannelNodePtr m_node;
00071 };
00072
00077 template<typename T>
00078 ShProgram connect(const ShChannel<T>& channel, const ShProgram& program);
00079
00084 template<typename T>
00085 ShProgram operator<<(const ShProgram& program, const ShChannel<T>& channel);
00086
00087 }
00088
00089 #include "ShChannelImpl.hpp"
00090
00091 #endif