Changed the Rain TLP interface to use lists for output streams as I'd originally intended

This commit is contained in:
Neil Brown 2008-05-21 00:20:29 +00:00
parent 0b1708c241
commit 0627ff2b4f
2 changed files with 40 additions and 3 deletions

View File

@ -136,15 +136,17 @@ cppgenTopLevel s
call genStructured s (\m _ -> tell ["\n#error Invalid top-level item: ",show m])
(name, chans) <- tlpInterface
tell ["int main (int argc, char** argv) { csp::Start_CPPCSP();"]
(chanType, writer, reader) <-
(chanTypeRead, chanTypeWrite, writer, reader) <-
do st <- getCompState
case csFrontend st of
FrontendOccam -> return ("tockSendableArrayOfBytes",
"tockSendableArrayOfBytes",
"StreamWriterByteArray",
"StreamReaderByteArray")
_ -> return ("uint8_t", "StreamWriter", "StreamReader")
_ -> return ("uint8_t", "tockList<uint8_t>/**/","StreamWriterList", "StreamReader")
tell ["csp::One2OneChannel<",chanType,"> in,out,err;"]
tell ["csp::One2OneChannel<",chanTypeRead,"> in;"]
tell ["csp::One2OneChannel<",chanTypeWrite,"> out,err;"]
tell [" csp::Run( csp::InParallel ",
"(new ",writer,"(std::cout,out.reader())) ",
"(new ",writer,"(std::cerr,err.reader())) ",

View File

@ -398,6 +398,41 @@ public:
}
};
class StreamWriterList : public csp::CSProcess
{
private:
std::ostream& out;
csp::Chanin< tockList<uint8_t> > in;
protected:
virtual void run()
{
try
{
tockList<uint8_t> cs;
while (true)
{
in >> cs;
for (tockList<uint8_t>::iterator it = cs.beginSeqEach();it != cs.limitIterator();it++)
{
out << *it;
}
out.flush();
}
}
catch (csp::PoisonException& e)
{
in.poison();
}
out.flush();
}
public:
inline StreamWriterList(std::ostream& _out,const csp::Chanin< tockList<uint8_t> >& _in)
: out(_out),in(_in)
{
}
};
// Time addition and subtraction:
inline csp::Time occam_plus_time (const csp::Time& a, const csp::Time& b, const char *)