/*****************************************************************************

  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
  more contributor license agreements.  See the NOTICE file distributed
  with this work for additional information regarding copyright ownership.
  Accellera licenses this file to you under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with the
  License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  implied.  See the License for the specific language governing
  permissions and limitations under the License.

 *****************************************************************************/

/*****************************************************************************

  sc_fxdefs.h -

  Original Author: Martin Janssen, Synopsys, Inc.

 *****************************************************************************/

/*****************************************************************************

  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
  changes you are making here.

      Name, Affiliation, Date:
  Description of Modification:

 *****************************************************************************/

// $Log: sc_fxdefs.h,v $
// Revision 1.1.1.1  2006/12/15 20:20:04  acg
// SystemC 2.3
//
// Revision 1.3  2006/01/13 18:53:57  acg
// Andy Goodrich: added $Log command so that CVS comments are reproduced in
// the source.
//

#ifndef __SYSTEMC_EXT_DT_FX_SC_FXDEFS_HH__
#define __SYSTEMC_EXT_DT_FX_SC_FXDEFS_HH__

#include "../../utils/sc_report_handler.hh"
#include "../int/sc_nbutils.hh"

namespace sc_dt
{

// ----------------------------------------------------------------------------
//  ENUM : sc_enc
//
//  Enumeration of sign encodings.
// ----------------------------------------------------------------------------

enum sc_enc
{
    SC_TC_, // two's complement
    SC_US_ // unsigned
};

const std::string to_string(sc_enc);

inline ::std::ostream &
operator << (::std::ostream &os, sc_enc enc)
{
    return os << to_string(enc);
}


// ----------------------------------------------------------------------------
//  ENUM : sc_q_mode
//
//  Enumeration of quantization modes.
// ----------------------------------------------------------------------------

enum sc_q_mode
{
    SC_RND, // rounding to plus infinity
    SC_RND_ZERO, // rounding to zero
    SC_RND_MIN_INF, // rounding to minus infinity
    SC_RND_INF, // rounding to infinity
    SC_RND_CONV, // convergent rounding
    SC_TRN, // truncation
    SC_TRN_ZERO // truncation to zero
};

const std::string to_string(sc_q_mode);

inline ::std::ostream &
operator << (::std::ostream &os, sc_q_mode q_mode)
{
    return os << to_string(q_mode);
}


// ----------------------------------------------------------------------------
//  ENUM : sc_o_mode
//
//  Enumeration of overflow modes.
// ----------------------------------------------------------------------------

enum sc_o_mode
{
    SC_SAT, // saturation
    SC_SAT_ZERO, // saturation to zero
    SC_SAT_SYM, // symmetrical saturation
    SC_WRAP, // wrap-around (*)
    SC_WRAP_SM // sign magnitude wrap-around (*)
};

// (*) uses the number of saturated bits argument, see the documentation.

const std::string to_string( sc_o_mode );

inline ::std::ostream &
operator << (::std::ostream &os, sc_o_mode o_mode)
{
    return os << to_string(o_mode);
}


// ----------------------------------------------------------------------------
//  ENUM : sc_switch
//
//  Enumeration of switch states.
// ----------------------------------------------------------------------------

enum sc_switch
{
    SC_OFF,
    SC_ON
};

const std::string to_string(sc_switch);

inline ::std::ostream &
operator << (::std::ostream &os, sc_switch sw)
{
    return os << to_string(sw);
}


// ----------------------------------------------------------------------------
//  ENUM : sc_fmt
//
//  Enumeration of formats for character string conversion.
// ----------------------------------------------------------------------------

enum sc_fmt
{
    SC_F, // fixed
    SC_E // scientific
};

const std::string to_string(sc_fmt);

inline ::std::ostream &
operator << (::std::ostream &os, sc_fmt fmt)
{
    return os << to_string(fmt);
}


// ----------------------------------------------------------------------------
//  Built-in & default fixed-point type parameter values.
// ----------------------------------------------------------------------------

const int SC_BUILTIN_WL_ = 32;
const int SC_BUILTIN_IWL_ = 32;
const sc_q_mode SC_BUILTIN_Q_MODE_ = SC_TRN;
const sc_o_mode SC_BUILTIN_O_MODE_ = SC_WRAP;
const int SC_BUILTIN_N_BITS_ = 0;

const int SC_DEFAULT_WL_ = SC_BUILTIN_WL_;
const int SC_DEFAULT_IWL_ = SC_BUILTIN_IWL_;
const sc_q_mode SC_DEFAULT_Q_MODE_ = SC_BUILTIN_Q_MODE_;
const sc_o_mode SC_DEFAULT_O_MODE_ = SC_BUILTIN_O_MODE_;
const int SC_DEFAULT_N_BITS_ = SC_BUILTIN_N_BITS_;


// ----------------------------------------------------------------------------
//  Built-in & default fixed-point cast switch parameter values.
// ----------------------------------------------------------------------------

const sc_switch SC_BUILTIN_CAST_SWITCH_ = SC_ON;
const sc_switch SC_DEFAULT_CAST_SWITCH_ = SC_BUILTIN_CAST_SWITCH_;


// ----------------------------------------------------------------------------
//  Built-in & default fixed-point value type parameter values.
// ----------------------------------------------------------------------------

const int SC_BUILTIN_DIV_WL_ = 64;
const int SC_BUILTIN_CTE_WL_ = 64;
const int SC_BUILTIN_MAX_WL_ = 1024;


#if defined(SC_FXDIV_WL) && (SC_FXDIV_WL > 0)
const int SC_DEFAULT_DIV_WL_ = SC_FXDIV_WL;
#else
const int SC_DEFAULT_DIV_WL_ = SC_BUILTIN_DIV_WL_;
#endif

#if defined(SC_FXCTE_WL) && (SC_FXCTE_WL > 0)
const int SC_DEFAULT_CTE_WL_ = SC_FXCTE_WL;
#else
const int SC_DEFAULT_CTE_WL_ = SC_BUILTIN_CTE_WL_;
#endif

#if defined(SC_FXMAX_WL) && (SC_FXMAX_WL > 0 || SC_FXMAX_WL == -1)
const int SC_DEFAULT_MAX_WL_ = SC_FXMAX_WL;
#else
const int SC_DEFAULT_MAX_WL_ = SC_BUILTIN_MAX_WL_;
#endif


// ----------------------------------------------------------------------------
//  Dedicated error reporting and checking.
// ----------------------------------------------------------------------------

#define SC_ERROR_IF_IMPL_(cnd, id, msg) \
    do { \
        if (cnd) { \
            SC_REPORT_ERROR(id, msg); \
            sc_core::sc_abort(); /* can't recover from here */ \
        } \
    } while ( false )

#ifdef DEBUG_SYSTEMC
#   define SC_ASSERT_(cnd, msg) \
    SC_ERROR_IF_IMPL_(!(cnd), "internal error", msg)
#else
#   define SC_ASSERT_(cnd, msg) (void(0))
#endif

#define SC_ERROR_IF_(cnd,id) SC_ERROR_IF_IMPL_(cnd, id, 0)

#define SC_CHECK_WL_(wl) SC_ERROR_IF_((wl) <= 0, \
        "(E300) total wordlength <= 0 is not valid")

#define SC_CHECK_N_BITS_(n_bits) \
    SC_ERROR_IF_((n_bits) < 0, "number of bits < 0 is not valid")

#define SC_CHECK_DIV_WL_(div_wl) \
    SC_ERROR_IF_((div_wl) <= 0, "division wordlength <= 0 is not valid")

#define SC_CHECK_CTE_WL_(cte_wl) \
    SC_ERROR_IF_((cte_wl) <= 0, "constant wordlength <= 0 is not valid")

#define SC_CHECK_MAX_WL_(max_wl) \
    SC_ERROR_IF_((max_wl) <= 0 && (max_wl) != -1, \
            "maximum wordlength <= 0 and != -1 is not valid")


// ----------------------------------------------------------------------------
//  Generic observer macros.
// ----------------------------------------------------------------------------

#define SC_OBSERVER_(object, observer_type, event) \
{ \
    if ((object).observer() != 0) { \
        observer_type observer = (object).lock_observer(); \
        observer->event((object)); \
        (object).unlock_observer(observer); \
    } \
}

#define SC_OBSERVER_DEFAULT_(observer_type) \
{ \
    if (m_observer == 0 && observer_type::default_observer != 0) \
        m_observer = (*observer_type::default_observer)(); \
}

} // namespace sc_dt

#endif // __SYSTEMC_EXT_DT_FX_SC_FXDEFS_HH__
