112853Sgabeblack@google.com/*****************************************************************************
212853Sgabeblack@google.com
312853Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412853Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
512853Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
612853Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
712853Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
812853Sgabeblack@google.com  License.  You may obtain a copy of the License at
912853Sgabeblack@google.com
1012853Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1112853Sgabeblack@google.com
1212853Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1312853Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1412853Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512853Sgabeblack@google.com  implied.  See the License for the specific language governing
1612853Sgabeblack@google.com  permissions and limitations under the License.
1712853Sgabeblack@google.com
1812853Sgabeblack@google.com *****************************************************************************/
1912853Sgabeblack@google.com
2012853Sgabeblack@google.com/*****************************************************************************
2112853Sgabeblack@google.com
2212853Sgabeblack@google.com  sc_bv.h -- Arbitrary size bit vector class.
2312853Sgabeblack@google.com
2412853Sgabeblack@google.com  Original Author: Gene Bushuyev, Synopsys, Inc.
2512853Sgabeblack@google.com
2612853Sgabeblack@google.com *****************************************************************************/
2712853Sgabeblack@google.com
2812853Sgabeblack@google.com/*****************************************************************************
2912853Sgabeblack@google.com
3012853Sgabeblack@google.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3112853Sgabeblack@google.com  changes you are making here.
3212853Sgabeblack@google.com
3312853Sgabeblack@google.com      Name, Affiliation, Date:
3412853Sgabeblack@google.com  Description of Modification:
3512853Sgabeblack@google.com
3612853Sgabeblack@google.com *****************************************************************************/
3712853Sgabeblack@google.com
3812853Sgabeblack@google.com// $Log: sc_bv.h,v $
3912853Sgabeblack@google.com// Revision 1.1.1.1  2006/12/15 20:20:04  acg
4012853Sgabeblack@google.com// SystemC 2.3
4112853Sgabeblack@google.com//
4212853Sgabeblack@google.com// Revision 1.3  2006/01/13 18:53:53  acg
4312853Sgabeblack@google.com// Andy Goodrich: added $Log command so that CVS comments are reproduced in
4412853Sgabeblack@google.com// the source.
4512853Sgabeblack@google.com//
4612853Sgabeblack@google.com
4712853Sgabeblack@google.com#ifndef __SYSTEMC_EXT_DT_BIT_SC_BV_HH__
4812853Sgabeblack@google.com#define __SYSTEMC_EXT_DT_BIT_SC_BV_HH__
4912853Sgabeblack@google.com
5012853Sgabeblack@google.com#include "sc_bv_base.hh"
5112853Sgabeblack@google.com
5212853Sgabeblack@google.comnamespace sc_dt
5312853Sgabeblack@google.com{
5412853Sgabeblack@google.com
5512853Sgabeblack@google.com// classes defined in this module
5612853Sgabeblack@google.comtemplate <int W>
5712853Sgabeblack@google.comclass sc_bv;
5812853Sgabeblack@google.com
5912853Sgabeblack@google.com
6012853Sgabeblack@google.com// ----------------------------------------------------------------------------
6112853Sgabeblack@google.com//  CLASS TEMPLATE : sc_bv<W>
6212853Sgabeblack@google.com//
6312853Sgabeblack@google.com//  Arbitrary size bit vector class.
6412853Sgabeblack@google.com// ----------------------------------------------------------------------------
6512853Sgabeblack@google.com
6612853Sgabeblack@google.comtemplate <int W>
6712853Sgabeblack@google.comclass sc_bv : public sc_bv_base
6812853Sgabeblack@google.com{
6912853Sgabeblack@google.com  public:
7012853Sgabeblack@google.com    // constructors
7112853Sgabeblack@google.com    sc_bv() :sc_bv_base(W) {}
7212853Sgabeblack@google.com
7312853Sgabeblack@google.com    explicit sc_bv(bool init_value) : sc_bv_base(init_value, W) {}
7412853Sgabeblack@google.com
7512853Sgabeblack@google.com    explicit sc_bv(char init_value) : sc_bv_base((init_value != '0'), W) {}
7612853Sgabeblack@google.com
7712853Sgabeblack@google.com    sc_bv(const char *a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
7812853Sgabeblack@google.com    sc_bv(const bool *a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
7912853Sgabeblack@google.com    sc_bv(const sc_logic *a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
8012853Sgabeblack@google.com    sc_bv(const sc_unsigned &a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
8112853Sgabeblack@google.com    sc_bv(const sc_signed &a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
8212853Sgabeblack@google.com    sc_bv(const sc_uint_base &a) : sc_bv_base(W)
8312853Sgabeblack@google.com    {
8412853Sgabeblack@google.com        sc_bv_base::operator = (a);
8512853Sgabeblack@google.com    }
8612853Sgabeblack@google.com    sc_bv(const sc_int_base &a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
8712853Sgabeblack@google.com    sc_bv(unsigned long a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
8812853Sgabeblack@google.com    sc_bv(long a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
8912853Sgabeblack@google.com    sc_bv(unsigned int a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
9012853Sgabeblack@google.com    sc_bv(int a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
9112853Sgabeblack@google.com    sc_bv(uint64 a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
9212853Sgabeblack@google.com    sc_bv(int64 a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
9312853Sgabeblack@google.com
9412853Sgabeblack@google.com    template <class X>
9512853Sgabeblack@google.com    sc_bv(const sc_proxy<X> &a) : sc_bv_base(W) { sc_bv_base::operator = (a); }
9612853Sgabeblack@google.com    sc_bv(const sc_bv<W> &a) : sc_bv_base(a) {}
9712853Sgabeblack@google.com
9812853Sgabeblack@google.com    // assignment operators
9912853Sgabeblack@google.com    template <class X>
10012853Sgabeblack@google.com    sc_bv<W> &
10112853Sgabeblack@google.com    operator = (const sc_proxy<X> &a)
10212853Sgabeblack@google.com    {
10312853Sgabeblack@google.com        sc_bv_base::operator = (a);
10412853Sgabeblack@google.com        return *this;
10512853Sgabeblack@google.com    }
10612853Sgabeblack@google.com
10712853Sgabeblack@google.com    sc_bv<W> &
10812853Sgabeblack@google.com    operator = (const sc_bv<W> &a)
10912853Sgabeblack@google.com    {
11012853Sgabeblack@google.com        sc_bv_base::operator = (a);
11112853Sgabeblack@google.com        return *this;
11212853Sgabeblack@google.com    }
11312853Sgabeblack@google.com
11412853Sgabeblack@google.com    sc_bv<W> &
11512853Sgabeblack@google.com    operator = (const char *a)
11612853Sgabeblack@google.com    {
11712853Sgabeblack@google.com        sc_bv_base::operator = (a);
11812853Sgabeblack@google.com        return *this;
11912853Sgabeblack@google.com    }
12012853Sgabeblack@google.com
12112853Sgabeblack@google.com    sc_bv<W> &
12212853Sgabeblack@google.com    operator = (const bool *a)
12312853Sgabeblack@google.com    {
12412853Sgabeblack@google.com        sc_bv_base::operator = (a);
12512853Sgabeblack@google.com        return *this;
12612853Sgabeblack@google.com    }
12712853Sgabeblack@google.com
12812853Sgabeblack@google.com    sc_bv<W> &
12912853Sgabeblack@google.com    operator = (const sc_logic *a)
13012853Sgabeblack@google.com    {
13112853Sgabeblack@google.com        sc_bv_base::operator = (a);
13212853Sgabeblack@google.com        return *this;
13312853Sgabeblack@google.com    }
13412853Sgabeblack@google.com
13512853Sgabeblack@google.com    sc_bv<W> &
13612853Sgabeblack@google.com    operator = (const sc_unsigned &a)
13712853Sgabeblack@google.com    {
13812853Sgabeblack@google.com        sc_bv_base::operator = (a);
13912853Sgabeblack@google.com        return *this;
14012853Sgabeblack@google.com    }
14112853Sgabeblack@google.com
14212853Sgabeblack@google.com    sc_bv<W> &
14312853Sgabeblack@google.com    operator = (const sc_signed &a)
14412853Sgabeblack@google.com    {
14512853Sgabeblack@google.com        sc_bv_base::operator = (a);
14612853Sgabeblack@google.com        return *this;
14712853Sgabeblack@google.com    }
14812853Sgabeblack@google.com
14912853Sgabeblack@google.com    sc_bv<W> &
15012853Sgabeblack@google.com    operator = (const sc_uint_base &a)
15112853Sgabeblack@google.com    {
15212853Sgabeblack@google.com        sc_bv_base::operator = (a);
15312853Sgabeblack@google.com        return *this;
15412853Sgabeblack@google.com    }
15512853Sgabeblack@google.com
15612853Sgabeblack@google.com    sc_bv<W> &
15712853Sgabeblack@google.com    operator = (const sc_int_base &a)
15812853Sgabeblack@google.com    {
15912853Sgabeblack@google.com        sc_bv_base::operator = (a);
16012853Sgabeblack@google.com        return *this;
16112853Sgabeblack@google.com    }
16212853Sgabeblack@google.com
16312853Sgabeblack@google.com    sc_bv<W> &
16412853Sgabeblack@google.com    operator = (unsigned long a)
16512853Sgabeblack@google.com    {
16612853Sgabeblack@google.com        sc_bv_base::operator = (a);
16712853Sgabeblack@google.com        return *this;
16812853Sgabeblack@google.com    }
16912853Sgabeblack@google.com
17012853Sgabeblack@google.com    sc_bv<W> &
17112853Sgabeblack@google.com    operator = (long a)
17212853Sgabeblack@google.com    {
17312853Sgabeblack@google.com        sc_bv_base::operator = (a);
17412853Sgabeblack@google.com        return *this;
17512853Sgabeblack@google.com    }
17612853Sgabeblack@google.com
17712853Sgabeblack@google.com    sc_bv<W> &
17812853Sgabeblack@google.com    operator = (unsigned int a)
17912853Sgabeblack@google.com    {
18012853Sgabeblack@google.com        sc_bv_base::operator = (a);
18112853Sgabeblack@google.com        return *this;
18212853Sgabeblack@google.com    }
18312853Sgabeblack@google.com
18412853Sgabeblack@google.com    sc_bv<W> &
18512853Sgabeblack@google.com    operator = (int a)
18612853Sgabeblack@google.com    {
18712853Sgabeblack@google.com        sc_bv_base::operator = (a);
18812853Sgabeblack@google.com        return *this;
18912853Sgabeblack@google.com    }
19012853Sgabeblack@google.com
19112853Sgabeblack@google.com    sc_bv<W> &
19212853Sgabeblack@google.com    operator = (uint64 a)
19312853Sgabeblack@google.com    {
19412853Sgabeblack@google.com        sc_bv_base::operator = (a);
19512853Sgabeblack@google.com        return *this;
19612853Sgabeblack@google.com    }
19712853Sgabeblack@google.com
19812853Sgabeblack@google.com    sc_bv<W> &
19912853Sgabeblack@google.com    operator = (int64 a)
20012853Sgabeblack@google.com    {
20112853Sgabeblack@google.com        sc_bv_base::operator = (a);
20212853Sgabeblack@google.com        return *this;
20312853Sgabeblack@google.com    }
20412853Sgabeblack@google.com};
20512853Sgabeblack@google.com
20612853Sgabeblack@google.com} // namespace sc_dt
20712853Sgabeblack@google.com
20812853Sgabeblack@google.com#endif // __SYSTEMC_EXT_DT_BIT_SC_BV_HH__
209