summaryrefslogtreecommitdiff
path: root/src/systemc/ext/dt/int/sc_bigint.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/ext/dt/int/sc_bigint.hh')
-rw-r--r--src/systemc/ext/dt/int/sc_bigint.hh284
1 files changed, 284 insertions, 0 deletions
diff --git a/src/systemc/ext/dt/int/sc_bigint.hh b/src/systemc/ext/dt/int/sc_bigint.hh
new file mode 100644
index 000000000..bcfbcaefc
--- /dev/null
+++ b/src/systemc/ext/dt/int/sc_bigint.hh
@@ -0,0 +1,284 @@
+/*****************************************************************************
+
+ 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_bigint.h -- Template version of sc_signed. This class enables
+ compile-time bit widths for sc_signed numbers.
+
+ Original Author: Ali Dasdan, Synopsys, Inc.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ MODIFICATION LOG - modifiers, enter your name, affiliation, date and
+ changes you are making here.
+
+ Name, Affiliation, Date: Gene Bushayev, Synopsys, Inc.
+ Description of Modification: - Interface between sc_bigint and sc_bv/sc_lv.
+
+ Name, Affiliation, Date:
+ Description of Modification:
+
+ *****************************************************************************/
+
+// $Log: sc_bigint.h,v $
+// Revision 1.2 2011/02/18 20:19:14 acg
+// Andy Goodrich: updating Copyright notice.
+//
+// Revision 1.1.1.1 2006/12/15 20:20:05 acg
+// SystemC 2.3
+//
+// Revision 1.3 2006/01/13 18:49:31 acg
+// Added $Log command so that CVS check in comments are reproduced in the
+// source.
+//
+
+#ifndef __SYSTEMC_EXT_DT_INT_SC_BIGINT_HH__
+#define __SYSTEMC_EXT_DT_INT_SC_BIGINT_HH__
+
+#include "sc_signed.hh"
+#include "sc_unsigned.hh"
+
+namespace sc_dt
+{
+
+// classes defined in this module
+template <int W>
+class sc_bigint;
+
+// forward class declarations
+class sc_bv_base;
+class sc_lv_base;
+class sc_fxval;
+class sc_fxval_fast;
+class sc_fxnum;
+class sc_fxnum_fast;
+
+
+// ----------------------------------------------------------------------------
+// CLASS TEMPLATE : sc_bigint<W>
+//
+// Arbitrary size signed integer type.
+// ----------------------------------------------------------------------------
+
+#ifdef SC_MAX_NBITS
+template<int W=SC_MAX_NBITS>
+#else
+template<int W>
+#endif
+class sc_bigint : public sc_signed
+{
+ public:
+ // constructors
+ sc_bigint() : sc_signed(W) {}
+ sc_bigint(const sc_bigint<W> &v) : sc_signed(W) { *this = v; }
+ sc_bigint(const sc_signed &v) : sc_signed(W) { *this = v; }
+ sc_bigint(const sc_signed_subref &v) : sc_signed(W) { *this = v; }
+
+ template< class T >
+ sc_bigint(const sc_generic_base<T> &a) : sc_signed(W)
+ {
+ a->to_sc_signed(*this);
+ }
+
+ sc_bigint(const sc_unsigned &v) : sc_signed(W) { *this = v; }
+ sc_bigint(const sc_unsigned_subref &v) : sc_signed(W) { *this = v; }
+ sc_bigint(const char *v) : sc_signed(W) { *this = v; }
+ sc_bigint(int64 v) : sc_signed(W) { *this = v; }
+ sc_bigint(uint64 v) : sc_signed(W) { *this = v; }
+ sc_bigint(long v) : sc_signed(W) { *this = v; }
+ sc_bigint(unsigned long v) : sc_signed(W) { *this = v; }
+ sc_bigint(int v) : sc_signed(W) { *this = v; }
+ sc_bigint(unsigned int v) : sc_signed(W) { *this = v; }
+ sc_bigint(double v) : sc_signed(W) { *this = v; }
+ sc_bigint(const sc_bv_base &v) : sc_signed(W) { *this = v; }
+ sc_bigint(const sc_lv_base &v) : sc_signed(W) { *this = v; }
+
+ explicit sc_bigint(const sc_fxval &v) : sc_signed(W) { *this = v; }
+ explicit sc_bigint(const sc_fxval_fast &v) : sc_signed(W) { *this = v; }
+ explicit sc_bigint(const sc_fxnum &v) : sc_signed(W) { *this = v; }
+ explicit sc_bigint(const sc_fxnum_fast &v) : sc_signed(W) { *this = v; }
+
+#ifndef SC_MAX_NBITS
+ // destructor
+ ~sc_bigint() {}
+#endif
+
+ // assignment operators
+ sc_bigint<W> &
+ operator = (const sc_bigint<W> &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_signed &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_signed_subref &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ template< class T >
+ sc_bigint<W> &
+ operator = (const sc_generic_base<T> &a)
+ {
+ a->to_sc_signed(*this);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_unsigned &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_unsigned_subref &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const char *v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (int64 v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (uint64 v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (long v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (unsigned long v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (int v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (unsigned int v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &operator = (double v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+
+ sc_bigint<W> &
+ operator = (const sc_bv_base &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_lv_base &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_int_base &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_uint_base &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_fxval &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_fxval_fast& v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_fxnum &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+
+ sc_bigint<W> &
+ operator = (const sc_fxnum_fast &v)
+ {
+ sc_signed::operator = (v);
+ return *this;
+ }
+};
+
+} // namespace sc_dt
+
+#endif // __SYSTEMC_EXT_DT_INT_SC_BIGINT_HH__