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 __TLM_CORE_1_REQ_RSP_CHANNELS_FIFO_FIFO_RESIZE_HH__
2113521Sgabeblack@google.com#define __TLM_CORE_1_REQ_RSP_CHANNELS_FIFO_FIFO_RESIZE_HH__
2213521Sgabeblack@google.com
2313521Sgabeblack@google.com// Resize interface.
2413521Sgabeblack@google.comnamespace tlm
2513521Sgabeblack@google.com{
2613521Sgabeblack@google.com
2713521Sgabeblack@google.comtemplate <typename T>
2813521Sgabeblack@google.cominline void
2913521Sgabeblack@google.comtlm_fifo<T>::nb_expand(unsigned int n)
3013521Sgabeblack@google.com{
3113521Sgabeblack@google.com    if (m_size >= 0) {
3213521Sgabeblack@google.com        m_expand = true;
3313521Sgabeblack@google.com        m_size += n;
3413521Sgabeblack@google.com        request_update();
3513521Sgabeblack@google.com    }
3613521Sgabeblack@google.com}
3713521Sgabeblack@google.com
3813521Sgabeblack@google.comtemplate <typename T>
3913521Sgabeblack@google.cominline void
4013521Sgabeblack@google.comtlm_fifo<T>::nb_unbound(unsigned int n)
4113521Sgabeblack@google.com{
4213521Sgabeblack@google.com    m_expand = true;
4313521Sgabeblack@google.com    m_size = -n;
4413521Sgabeblack@google.com
4513521Sgabeblack@google.com    if (buffer.size() < static_cast<int>(n)) {
4613521Sgabeblack@google.com        buffer.resize(n);
4713521Sgabeblack@google.com    }
4813521Sgabeblack@google.com
4913521Sgabeblack@google.com    request_update();
5013521Sgabeblack@google.com}
5113521Sgabeblack@google.com
5213521Sgabeblack@google.comtemplate <typename T>
5313521Sgabeblack@google.cominline bool
5413521Sgabeblack@google.comtlm_fifo<T>::nb_reduce(unsigned int n)
5513521Sgabeblack@google.com{
5613521Sgabeblack@google.com    if (m_size < 0) {
5713521Sgabeblack@google.com        return false;
5813521Sgabeblack@google.com    }
5913521Sgabeblack@google.com
6013521Sgabeblack@google.com    return nb_bound(size() - n);
6113521Sgabeblack@google.com}
6213521Sgabeblack@google.com
6313521Sgabeblack@google.comtemplate <typename T>
6413521Sgabeblack@google.cominline bool
6513521Sgabeblack@google.comtlm_fifo<T>::nb_bound(unsigned int new_size)
6613521Sgabeblack@google.com{
6713521Sgabeblack@google.com    bool ret = true;
6813521Sgabeblack@google.com
6913521Sgabeblack@google.com    if (static_cast<int>(new_size) < used()) {
7013521Sgabeblack@google.com        new_size = used();
7113521Sgabeblack@google.com        ret = false;
7213521Sgabeblack@google.com    }
7313521Sgabeblack@google.com
7413521Sgabeblack@google.com    m_size = new_size;
7513521Sgabeblack@google.com    return ret;
7613521Sgabeblack@google.com}
7713521Sgabeblack@google.com
7813521Sgabeblack@google.com} // namespace tlm
7913521Sgabeblack@google.com
8013521Sgabeblack@google.com#endif /* __TLM_CORE_1_REQ_RSP_CHANNELS_FIFO_FIFO_RESIZE_HH__ */
81