00001 /* 00002 * FIFOStream.cxx 00003 * ers 00004 * 00005 * Created by Matthias Wiesmann on 02.12.04. 00006 * Copyright 2004 CERN. All rights reserved. 00007 * 00008 */ 00009 00010 #include "ers/FIFOStream.h" 00011 #include "ers/Precondition.h" 00012 #include "ers/NotImplemented.h" 00013 #include "ers/InvalidReferenceIssue.h" 00014 #include "ers/StreamFactory.h" 00015 00016 const char* const ers::FIFOStream::FIFO_STREAM_KEY = "fifo" ; 00017 00018 namespace { 00019 ers::Stream *create_stream(const std::string &protocol, const std::string &uri) { 00020 (void) uri ; // to shut up the compiler 00021 if (protocol==ers::FIFOStream::FIFO_STREAM_KEY) return new ers::FIFOStream() ; 00022 return 0 ; 00023 } 00024 bool registered = ers::StreamFactory::instance()->register_factory(ers::FIFOStream::FIFO_STREAM_KEY,create_stream) ; 00025 } 00026 00027 00028 ers::FIFOStream::FIFOStream() : Stream() {} 00029 00030 ers::FIFOStream::FIFOStream(const FIFOStream &other) : Stream(other) { 00031 for(unsigned int i=0;i<other.m_issue_queue.size();i++) { 00032 Issue *cloned = other.m_issue_queue[i]->clone(); 00033 m_issue_queue.push_back(cloned); 00034 } // for 00035 } // FIFOStream 00036 00037 ers::FIFOStream::~FIFOStream() {} 00038 00045 void ers::FIFOStream::send(const ers::Issue *issue_ptr) { 00046 ERS_PRE_CHECK_PTR(issue_ptr); 00047 Issue *cloned = issue_ptr->clone(); 00048 m_issue_queue.push_back(cloned); 00049 } // send 00050 00056 ers::Issue *ers::FIFOStream::receive() { 00057 if (m_issue_queue.empty()) return 0 ; 00058 Issue *issue = m_issue_queue[0] ; 00059 m_issue_queue.pop_front(); 00060 return issue ; 00061 } // receive 00062 00063 void ers::FIFOStream::print_to(std::ostream& stream) const { 00064 stream << ers::FIFOStream::FIFO_STREAM_KEY << ":[" ; 00065 for(unsigned int i=0;i<m_issue_queue.size();i++) { 00066 stream << m_issue_queue[i]->what() ; 00067 if (i!=m_issue_queue.size()-1) { 00068 stream << ", " ; 00069 } // if not last 00070 } // for elements 00071 stream << "]" ; 00072 } // print_to 00073 00074