sc_fifo_out.hh revision 13123
113481Sgiacomo.travaglini@arm.com/* 213481Sgiacomo.travaglini@arm.com * Copyright 2018 Google, Inc. 313481Sgiacomo.travaglini@arm.com * 413481Sgiacomo.travaglini@arm.com * Redistribution and use in source and binary forms, with or without 513481Sgiacomo.travaglini@arm.com * modification, are permitted provided that the following conditions are 613481Sgiacomo.travaglini@arm.com * met: redistributions of source code must retain the above copyright 713481Sgiacomo.travaglini@arm.com * notice, this list of conditions and the following disclaimer; 813481Sgiacomo.travaglini@arm.com * redistributions in binary form must reproduce the above copyright 913481Sgiacomo.travaglini@arm.com * notice, this list of conditions and the following disclaimer in the 1013481Sgiacomo.travaglini@arm.com * documentation and/or other materials provided with the distribution; 1113481Sgiacomo.travaglini@arm.com * neither the name of the copyright holders nor the names of its 1213481Sgiacomo.travaglini@arm.com * contributors may be used to endorse or promote products derived from 1313481Sgiacomo.travaglini@arm.com * this software without specific prior written permission. 1413481Sgiacomo.travaglini@arm.com * 1513481Sgiacomo.travaglini@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1613481Sgiacomo.travaglini@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1713481Sgiacomo.travaglini@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1813481Sgiacomo.travaglini@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1913481Sgiacomo.travaglini@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2013481Sgiacomo.travaglini@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2113481Sgiacomo.travaglini@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2213481Sgiacomo.travaglini@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2313481Sgiacomo.travaglini@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2413481Sgiacomo.travaglini@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2513481Sgiacomo.travaglini@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2613481Sgiacomo.travaglini@arm.com * 2713481Sgiacomo.travaglini@arm.com * Authors: Gabe Black 2813481Sgiacomo.travaglini@arm.com */ 2913481Sgiacomo.travaglini@arm.com 3013481Sgiacomo.travaglini@arm.com#ifndef __SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_HH__ 3113481Sgiacomo.travaglini@arm.com#define __SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_HH__ 3213481Sgiacomo.travaglini@arm.com 3313481Sgiacomo.travaglini@arm.com#include "../core/sc_port.hh" 3413481Sgiacomo.travaglini@arm.com#include "sc_fifo_out_if.hh" 3513481Sgiacomo.travaglini@arm.com#include "warn_unimpl.hh" 3613481Sgiacomo.travaglini@arm.com 3713481Sgiacomo.travaglini@arm.comnamespace sc_core 3813481Sgiacomo.travaglini@arm.com{ 3913481Sgiacomo.travaglini@arm.com 4013481Sgiacomo.travaglini@arm.comclass sc_event; 4113481Sgiacomo.travaglini@arm.comclass sc_event_finder; 4213481Sgiacomo.travaglini@arm.com 4313481Sgiacomo.travaglini@arm.comtemplate <class T> 4413481Sgiacomo.travaglini@arm.comclass sc_fifo_out : public sc_port<sc_fifo_out_if<T>, 0> 4513481Sgiacomo.travaglini@arm.com{ 4613481Sgiacomo.travaglini@arm.com public: 4713481Sgiacomo.travaglini@arm.com sc_fifo_out() : sc_port<sc_fifo_out_if<T>, 0>(), 4813481Sgiacomo.travaglini@arm.com _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 4913481Sgiacomo.travaglini@arm.com {} 5013481Sgiacomo.travaglini@arm.com explicit sc_fifo_out(const char *name) : 5113481Sgiacomo.travaglini@arm.com sc_port<sc_fifo_out_if<T>, 0>(name), 5213481Sgiacomo.travaglini@arm.com _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 5313481Sgiacomo.travaglini@arm.com {} 5413481Sgiacomo.travaglini@arm.com virtual ~sc_fifo_out() {} 5513481Sgiacomo.travaglini@arm.com 5613481Sgiacomo.travaglini@arm.com // Deprecated binding constructors. 5713481Sgiacomo.travaglini@arm.com explicit sc_fifo_out(const sc_fifo_out_if<T> &interface) : 5813481Sgiacomo.travaglini@arm.com sc_port<sc_fifo_out_if<T>, 0>(interface), 5913481Sgiacomo.travaglini@arm.com _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 6013481Sgiacomo.travaglini@arm.com {} 6113481Sgiacomo.travaglini@arm.com sc_fifo_out(const char *name, const sc_fifo_out_if<T> &interface) : 6213481Sgiacomo.travaglini@arm.com sc_port<sc_fifo_out_if<T>, 0>(name, interface), 6313481Sgiacomo.travaglini@arm.com _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 64 {} 65 explicit sc_fifo_out(sc_port_b<sc_fifo_out_if<T> > &parent) : 66 sc_port<sc_fifo_out_if<T>, 0>(parent), 67 _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 68 {} 69 sc_fifo_out(const char *name, sc_port_b<sc_fifo_out_if<T> > &parent) : 70 sc_port<sc_fifo_out_if<T>, 0>(name, parent), 71 _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 72 {} 73 explicit sc_fifo_out(sc_port<sc_fifo_out_if<T>, 0> &parent) : 74 sc_port<sc_fifo_out_if<T>, 0>(parent), 75 _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 76 {} 77 sc_fifo_out(const char *name, sc_port<sc_fifo_out_if<T>, 0> &parent) : 78 sc_port<sc_fifo_out_if<T>, 0>(name, parent), 79 _dataReadFinder(*this, &sc_fifo_out_if<T>::data_read_event) 80 {} 81 82 void write(const T &t) { (*this)->write(t); } 83 bool nb_write(const T &t) { return (*this)->nb_write(t); } 84 const sc_event & 85 data_read_event() const 86 { 87 return (*this)->data_read_event(); 88 } 89 sc_event_finder &data_read() const { return _dataReadFinder; } 90 int num_free() const { return (*this)->num_free(); } 91 virtual const char *kind() const { return "sc_fifo_out"; } 92 93 private: 94 // Disabled 95 sc_fifo_out(const sc_fifo_out<T> &) : sc_port<sc_fifo_out_if<T>, 0>() {} 96 sc_fifo_out<T> &operator = (const sc_fifo_out<T> &) { return *this; } 97 98 mutable sc_event_finder_t<sc_fifo_out_if<T> > _dataReadFinder; 99}; 100 101} // namespace sc_core 102 103#endif //__SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_HH__ 104