113521Sgabeblack@google.com/*****************************************************************************
213521Sgabeblack@google.com
313521Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
413521Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
513521Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
613521Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
713521Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
813521Sgabeblack@google.com  License.  You may obtain a copy of the License at
913521Sgabeblack@google.com
1013521Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1113521Sgabeblack@google.com
1213521Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1313521Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1413521Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1513521Sgabeblack@google.com  implied.  See the License for the specific language governing
1613521Sgabeblack@google.com  permissions and limitations under the License.
1713521Sgabeblack@google.com
1813521Sgabeblack@google.com *****************************************************************************/
1913521Sgabeblack@google.com
2013521Sgabeblack@google.com#ifndef __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_PORTS_NONBLOCKING_PORT_HH__
2113521Sgabeblack@google.com#define __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_PORTS_NONBLOCKING_PORT_HH__
2213521Sgabeblack@google.com
2313586Sgabeblack@google.com#include "../interfaces/core_ifs.hh"
2413586Sgabeblack@google.com#include "event_finder.hh"
2513521Sgabeblack@google.com
2613521Sgabeblack@google.comnamespace tlm
2713521Sgabeblack@google.com{
2813521Sgabeblack@google.com
2913521Sgabeblack@google.comtemplate <typename T>
3013521Sgabeblack@google.comclass tlm_nonblocking_get_port :
3113521Sgabeblack@google.com    public sc_core::sc_port<tlm_nonblocking_get_if<T>, 1>
3213521Sgabeblack@google.com{
3313521Sgabeblack@google.com  public:
3413521Sgabeblack@google.com    typedef tlm_nonblocking_get_if<T> get_if_type;
3513521Sgabeblack@google.com
3613521Sgabeblack@google.com    tlm_nonblocking_get_port(const char *port_name) :
3713521Sgabeblack@google.com        sc_core::sc_port<tlm_nonblocking_get_if<T>, 1>(port_name)
3813521Sgabeblack@google.com    {}
3913521Sgabeblack@google.com
4013521Sgabeblack@google.com    sc_core::sc_event_finder &
4113521Sgabeblack@google.com    ok_to_get() const
4213521Sgabeblack@google.com    {
4313521Sgabeblack@google.com        return *new tlm_event_finder_t<get_if_type, T >(
4413521Sgabeblack@google.com                *this, &get_if_type::ok_to_get);
4513521Sgabeblack@google.com    }
4613521Sgabeblack@google.com};
4713521Sgabeblack@google.com
4813521Sgabeblack@google.comtemplate <typename T>
4913521Sgabeblack@google.comclass tlm_nonblocking_peek_port :
5013521Sgabeblack@google.com    public sc_core::sc_port<tlm_nonblocking_peek_if<T>, 1>
5113521Sgabeblack@google.com{
5213521Sgabeblack@google.com  public:
5313521Sgabeblack@google.com    typedef tlm_nonblocking_peek_if<T> peek_if_type;
5413521Sgabeblack@google.com
5513521Sgabeblack@google.com    tlm_nonblocking_peek_port(const char *port_name) :
5613521Sgabeblack@google.com        sc_core::sc_port<tlm_nonblocking_peek_if<T>, 1>(port_name)
5713521Sgabeblack@google.com    {}
5813521Sgabeblack@google.com
5913521Sgabeblack@google.com    sc_core::sc_event_finder &
6013521Sgabeblack@google.com    ok_to_peek() const
6113521Sgabeblack@google.com    {
6213521Sgabeblack@google.com        return *new tlm_event_finder_t<peek_if_type, T>(
6313521Sgabeblack@google.com                *this, &peek_if_type::ok_to_peek);
6413521Sgabeblack@google.com    }
6513521Sgabeblack@google.com};
6613521Sgabeblack@google.com
6713521Sgabeblack@google.comtemplate <typename T>
6813521Sgabeblack@google.comclass tlm_nonblocking_put_port :
6913521Sgabeblack@google.com    public sc_core::sc_port<tlm_nonblocking_put_if<T>, 1>
7013521Sgabeblack@google.com{
7113521Sgabeblack@google.com  public:
7213521Sgabeblack@google.com    typedef tlm_nonblocking_put_if<T> put_if_type;
7313521Sgabeblack@google.com
7413521Sgabeblack@google.com    tlm_nonblocking_put_port(const char *port_name) :
7513521Sgabeblack@google.com        sc_core::sc_port<tlm_nonblocking_put_if<T>, 1>(port_name)
7613521Sgabeblack@google.com    {}
7713521Sgabeblack@google.com
7813521Sgabeblack@google.com    sc_core::sc_event_finder &
7913521Sgabeblack@google.com    ok_to_put() const
8013521Sgabeblack@google.com    {
8113521Sgabeblack@google.com        return *new tlm_event_finder_t<put_if_type, T>(
8213521Sgabeblack@google.com                *this, &put_if_type::ok_to_put);
8313521Sgabeblack@google.com    }
8413521Sgabeblack@google.com};
8513521Sgabeblack@google.com
8613521Sgabeblack@google.com} // namespace tlm
8713521Sgabeblack@google.com
8813521Sgabeblack@google.com#endif /* __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_PORTS_NONBLOCKING_PORT_HH__ */
89