#pragma once #ifndef _NB_DATASINK #define _NB_DATASINK namespace nb { template class SinkBase { using InputType = T; public: virtual bool in(const T&) = 0; protected: SinkBase(); }; /* template class Sink : public SinkBase { public: Sink& operator=(const Sink&) = 0; template virtual bool in(const U&) = 0; protected: Sink(); }; */ template class SourceBase { using OutputType = T; public: SourceBase& operator=(const SourceBase&) = 0; virtual bool out(T*) = 0; protected: SourceBase(); SinkBase* _sink; }; template class Pipe : public SinkBase, public SourceBase{ using Input = SourceBase; using Output = SinkBase; public: Pipe(Sink& sink) : Input::_sink{&sink} {} bool in(const T&) = 0; protected: using Input::_sink; }; /* template class Source : SourceBase { public: Source& operator=(const Source&) = 0; template virtual bool out(const U&) = 0; protected: Source(); }; */ } // namespace nb #endif // _NB_DATASINK