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