1/* 2 * Copyright 2018 Google, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer; 8 * redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in the 10 * documentation and/or other materials provided with the distribution; 11 * neither the name of the copyright holders nor the names of its 12 * contributors may be used to endorse or promote products derived from 13 * this software without specific prior written permission. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * Authors: Gabe Black 28 */ 29 30#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_INOUT_IF_HH__ 31#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_INOUT_IF_HH__ 32 33#include "../core/sc_interface.hh" 34#include "sc_signal_in_if.hh" 35 36namespace sc_core 37{ 38 39enum sc_writer_policy 40{ 41 SC_ONE_WRITER, 42 SC_MANY_WRITERS 43}; 44 45template <class T> 46class sc_signal_write_if : virtual public sc_interface 47{ 48 public: 49 virtual sc_writer_policy 50 get_writer_policy() const 51 { 52 return SC_ONE_WRITER; 53 } 54 virtual void write(const T &) = 0; 55 56 protected: 57 sc_signal_write_if() : sc_interface() {} 58 59 private: 60 // Disabled 61 sc_signal_write_if(const sc_signal_write_if<T> &) : sc_interface() {} 62 sc_signal_write_if<T> & 63 operator = (const sc_signal_write_if<T> &) 64 { 65 return *this; 66 } 67}; 68 69template <class T> 70class sc_signal_inout_if : public sc_signal_in_if<T>, 71 public sc_signal_write_if<T> 72{ 73 protected: 74 sc_signal_inout_if() : sc_signal_in_if<T>(), sc_signal_write_if<T>() {} 75 76 private: 77 // Disabled 78 sc_signal_inout_if(const sc_signal_inout_if<T> &) : 79 sc_signal_in_if<T>(), sc_signal_write_if<T>() 80 {} 81 sc_signal_inout_if<T> & 82 operator = (const sc_signal_inout_if<T> &) 83 { 84 return *this; 85 } 86}; 87 88// Deprecated. 89template <class T> 90using sc_signal_out_if = sc_signal_inout_if<T>; 91 92} // namespace sc_core 93 94#endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_INOUT_IF_HH__ 95