00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHSTREAMLISTIMPL_HPP
00025 #define SHSTREAMLISTIMPL_HPP
00026
00027 #include "ShStream.hpp"
00028 #include "ShChannel.hpp"
00029
00030 namespace SH {
00031
00032 template<typename T>
00033 ShStream::ShStream(const ShChannel<T>& channel)
00034 {
00035 m_nodes.push_back(channel.node());
00036 }
00037
00038 template<typename T>
00039 void ShStream::append(const ShChannel<T>& channel)
00040 {
00041 m_nodes.push_back(channel.node());
00042 }
00043
00044 template<typename T>
00045 void ShStream::prepend(const ShChannel<T>& channel)
00046 {
00047 m_nodes.push_front(channel.node());
00048 }
00049
00050
00051 template<typename T1, typename T2>
00052 ShStream combine(const ShChannel<T1>& left, const ShChannel<T2>& right)
00053 {
00054 ShStream stream(left);
00055 stream.append(right);
00056 return stream;
00057 }
00058
00059 template<typename T2>
00060 ShStream combine(const ShStream& left, const ShChannel<T2>& right)
00061 {
00062 ShStream stream = left;
00063 stream.append(right);
00064 return stream;
00065 }
00066
00067 template<typename T1>
00068 ShStream combine(const ShChannel<T1>& left, const ShStream& right)
00069 {
00070 ShStream stream = right;
00071 stream.prepend(left);
00072 return stream;
00073 }
00074
00075
00076 template<typename T1, typename T2>
00077 ShStream operator&(const ShChannel<T1>& left, const ShChannel<T2>& right)
00078 {
00079 return combine(left, right);
00080 }
00081
00082 template<typename T2>
00083 ShStream operator&(const ShStream& left, const ShChannel<T2>& right)
00084 {
00085 return combine(left, right);
00086 }
00087
00088 template<typename T1>
00089 ShStream operator&(const ShChannel<T1>& left, const ShStream& right)
00090 {
00091 return combine(left, right);
00092 }
00093
00094 }
00095 #endif