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
00027 #ifndef SHSTREAMLISTIMPL_HPP
00028 #define SHSTREAMLISTIMPL_HPP
00029
00030 #include "ShStream.hpp"
00031 #include "ShChannel.hpp"
00032
00033 namespace SH {
00034
00035 template<typename T>
00036 ShStream::ShStream(const ShChannel<T>& channel)
00037 {
00038 m_nodes.push_back(channel.node());
00039 }
00040
00041 template<typename T>
00042 void ShStream::append(const ShChannel<T>& channel)
00043 {
00044 m_nodes.push_back(channel.node());
00045 }
00046
00047 template<typename T>
00048 void ShStream::prepend(const ShChannel<T>& channel)
00049 {
00050 m_nodes.push_front(channel.node());
00051 }
00052
00053
00054 template<typename T1, typename T2>
00055 ShStream combine(const ShChannel<T1>& left, const ShChannel<T2>& right)
00056 {
00057 ShStream stream(left);
00058 stream.append(right);
00059 return stream;
00060 }
00061
00062 template<typename T2>
00063 ShStream combine(const ShStream& left, const ShChannel<T2>& right)
00064 {
00065 ShStream stream = left;
00066 stream.append(right);
00067 return stream;
00068 }
00069
00070 template<typename T1>
00071 ShStream combine(const ShChannel<T1>& left, const ShStream& right)
00072 {
00073 ShStream stream = right;
00074 stream.prepend(left);
00075 return stream;
00076 }
00077
00078
00079 template<typename T1, typename T2>
00080 ShStream operator&(const ShChannel<T1>& left, const ShChannel<T2>& right)
00081 {
00082 return combine(left, right);
00083 }
00084
00085 template<typename T2>
00086 ShStream operator&(const ShStream& left, const ShChannel<T2>& right)
00087 {
00088 return combine(left, right);
00089 }
00090
00091 template<typename T1>
00092 ShStream operator&(const ShChannel<T1>& left, const ShStream& right)
00093 {
00094 return combine(left, right);
00095 }
00096
00097 }
00098 #endif