sc_attribute.cpp revision 12027
18012Ssaidi@eecs.umich.edu/*****************************************************************************
28029Snate@binkert.org
38029Snate@binkert.org  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
48029Snate@binkert.org  more contributor license agreements.  See the NOTICE file distributed
58013Sbinkertn@umich.edu  with this work for additional information regarding copyright ownership.
68029Snate@binkert.org  Accellera licenses this file to you under the Apache License, Version 2.0
78029Snate@binkert.org  (the "License"); you may not use this file except in compliance with the
88029Snate@binkert.org  License.  You may obtain a copy of the License at
98029Snate@binkert.org
108029Snate@binkert.org    http://www.apache.org/licenses/LICENSE-2.0
118029Snate@binkert.org
128029Snate@binkert.org  Unless required by applicable law or agreed to in writing, software
138029Snate@binkert.org  distributed under the License is distributed on an "AS IS" BASIS,
148029Snate@binkert.org  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
158029Snate@binkert.org  implied.  See the License for the specific language governing
168013Sbinkertn@umich.edu  permissions and limitations under the License.
178029Snate@binkert.org
188029Snate@binkert.org *****************************************************************************/
198029Snate@binkert.org
208029Snate@binkert.org/*****************************************************************************
218029Snate@binkert.org
228029Snate@binkert.org  sc_attribute.cpp -- Attribute classes.
238029Snate@binkert.org
248029Snate@binkert.org  Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21
258029Snate@binkert.org
268029Snate@binkert.org CHANGE LOG APPEARS AT THE END OF THE FILE
278029Snate@binkert.org *****************************************************************************/
288013Sbinkertn@umich.edu
297977Shsul@eecs.umich.edu#include "sysc/kernel/sc_attribute.h"
307977Shsul@eecs.umich.edu
318013Sbinkertn@umich.edunamespace sc_core {
327977Shsul@eecs.umich.edu
337977Shsul@eecs.umich.edu// ----------------------------------------------------------------------------
348013Sbinkertn@umich.edu//  CLASS : sc_attr_base
358013Sbinkertn@umich.edu//
367978Sbinkertn@umich.edu//  Attribute base class.
377978Sbinkertn@umich.edu// ----------------------------------------------------------------------------
388028Sblakeg@umich.edu
398013Sbinkertn@umich.edu// constructors
407977Shsul@eecs.umich.edu
417977Shsul@eecs.umich.edusc_attr_base::sc_attr_base( const std::string& name_ )
427977Shsul@eecs.umich.edu: m_name( name_ )
437977Shsul@eecs.umich.edu{}
447977Shsul@eecs.umich.edu
458013Sbinkertn@umich.edusc_attr_base::sc_attr_base( const sc_attr_base& a )
468013Sbinkertn@umich.edu: m_name( a.m_name )
478018Smserrano@umich.edu{}
488018Smserrano@umich.edu
497977Shsul@eecs.umich.edu
507977Shsul@eecs.umich.edu// destructor (does nothing)
518013Sbinkertn@umich.edu
527977Shsul@eecs.umich.edusc_attr_base::~sc_attr_base()
538013Sbinkertn@umich.edu{}
548013Sbinkertn@umich.edu
558013Sbinkertn@umich.edu
567977Shsul@eecs.umich.edu// get the name
578013Sbinkertn@umich.educonst std::string&
588013Sbinkertn@umich.edusc_attr_base::name() const
598013Sbinkertn@umich.edu{
608013Sbinkertn@umich.edu    return m_name;
618013Sbinkertn@umich.edu}
627977Shsul@eecs.umich.edu
637977Shsul@eecs.umich.edu
648013Sbinkertn@umich.edu// ----------------------------------------------------------------------------
657977Shsul@eecs.umich.edu//  CLASS : sc_attr_cltn
668010Ssaidi@eecs.umich.edu//
677977Shsul@eecs.umich.edu//  Attribute collection class. Stores pointers to attributes.
687977Shsul@eecs.umich.edu//  Note: iterate over the collection by using iterators.
697977Shsul@eecs.umich.edu// ----------------------------------------------------------------------------
708013Sbinkertn@umich.edu
718013Sbinkertn@umich.edu// constructors
728013Sbinkertn@umich.edu
738013Sbinkertn@umich.edusc_attr_cltn::sc_attr_cltn() : m_cltn()
748013Sbinkertn@umich.edu{}
758009Ssaidi@eecs.umich.edu
768009Ssaidi@eecs.umich.edusc_attr_cltn::sc_attr_cltn( const sc_attr_cltn& a )
777977Shsul@eecs.umich.edu: m_cltn( a.m_cltn )
788016Sbinkertn@umich.edu{}
798013Sbinkertn@umich.edu
808013Sbinkertn@umich.edu
818013Sbinkertn@umich.edu// destructor
827977Shsul@eecs.umich.edusc_attr_cltn::~sc_attr_cltn()
837977Shsul@eecs.umich.edu{
848015Sbinkertn@umich.edu    remove_all();
858013Sbinkertn@umich.edu}
867977Shsul@eecs.umich.edu
878013Sbinkertn@umich.edu
887977Shsul@eecs.umich.edu// add attribute to the collection.
898013Sbinkertn@umich.edu// returns 'true' if the name of the attribute is unique,
907977Shsul@eecs.umich.edu// returns 'false' otherwise (attribute is not added).
917977Shsul@eecs.umich.edu
927977Shsul@eecs.umich.edubool
938013Sbinkertn@umich.edusc_attr_cltn::push_back( sc_attr_base* attribute_ )
948013Sbinkertn@umich.edu{
958013Sbinkertn@umich.edu    if( attribute_ == 0 ) {
968013Sbinkertn@umich.edu	return false;
978013Sbinkertn@umich.edu    }
988013Sbinkertn@umich.edu    for( int i = m_cltn.size() - 1; i >= 0; -- i ) {
997977Shsul@eecs.umich.edu	if( attribute_->name() == m_cltn[i]->name() ) {
1007977Shsul@eecs.umich.edu	    return false;
1017977Shsul@eecs.umich.edu	}
1027977Shsul@eecs.umich.edu    }
1037977Shsul@eecs.umich.edu    m_cltn.push_back( attribute_ );
1047977Shsul@eecs.umich.edu    return true;
1057977Shsul@eecs.umich.edu}
1067977Shsul@eecs.umich.edu
1078013Sbinkertn@umich.edu
1087977Shsul@eecs.umich.edu// get attribute by name.
1097977Shsul@eecs.umich.edu// returns pointer to attribute, or 0 if name does not exist.
1108013Sbinkertn@umich.edu
1118013Sbinkertn@umich.edusc_attr_base*
1127977Shsul@eecs.umich.edusc_attr_cltn::operator [] ( const std::string& name_ )
1137977Shsul@eecs.umich.edu{
1147977Shsul@eecs.umich.edu    for( int i = m_cltn.size() - 1; i >= 0; -- i ) {
1158013Sbinkertn@umich.edu	if( name_ == m_cltn[i]->name() ) {
1168013Sbinkertn@umich.edu	    return m_cltn[i];
1177978Sbinkertn@umich.edu	}
1188015Sbinkertn@umich.edu    }
1197978Sbinkertn@umich.edu    return 0;
1207978Sbinkertn@umich.edu}
1218013Sbinkertn@umich.edu
1228013Sbinkertn@umich.educonst sc_attr_base*
1237977Shsul@eecs.umich.edusc_attr_cltn::operator [] ( const std::string& name_ ) const
1248015Sbinkertn@umich.edu{
1257977Shsul@eecs.umich.edu    for( int i = m_cltn.size() - 1; i >= 0; -- i ) {
1267977Shsul@eecs.umich.edu	if( name_ == m_cltn[i]->name() ) {
1277978Sbinkertn@umich.edu	    return m_cltn[i];
1287978Sbinkertn@umich.edu	}
1298013Sbinkertn@umich.edu    }
1308013Sbinkertn@umich.edu    return 0;
1318013Sbinkertn@umich.edu}
1327977Shsul@eecs.umich.edu
1337978Sbinkertn@umich.edu
1347977Shsul@eecs.umich.edu// remove attribute by name.
1357977Shsul@eecs.umich.edu// returns pointer to attribute, or 0 if name does not exist.
1368013Sbinkertn@umich.edu
1378013Sbinkertn@umich.edusc_attr_base*
1387977Shsul@eecs.umich.edusc_attr_cltn::remove( const std::string& name_ )
1398013Sbinkertn@umich.edu{
1408015Sbinkertn@umich.edu    for( int i = m_cltn.size() - 1; i >= 0; -- i ) {
1417977Shsul@eecs.umich.edu	if( name_ == m_cltn[i]->name() ) {
1428013Sbinkertn@umich.edu	    sc_attr_base* attribute = m_cltn[i];
1438013Sbinkertn@umich.edu	    std::swap( m_cltn[i], m_cltn.back() );
1448013Sbinkertn@umich.edu	    m_cltn.pop_back();
1458015Sbinkertn@umich.edu	    return attribute;
1468013Sbinkertn@umich.edu	}
1478001Ssaidi@eecs.umich.edu    }
1488015Sbinkertn@umich.edu    return 0;
1498015Sbinkertn@umich.edu}
1508015Sbinkertn@umich.edu
1518015Sbinkertn@umich.edu
1528015Sbinkertn@umich.edu// remove all attributes
1538015Sbinkertn@umich.edu
1548015Sbinkertn@umich.eduvoid
1558015Sbinkertn@umich.edusc_attr_cltn::remove_all()
1568015Sbinkertn@umich.edu{
1578015Sbinkertn@umich.edu    m_cltn.clear();
1588015Sbinkertn@umich.edu}
1598015Sbinkertn@umich.edu
1608015Sbinkertn@umich.edu} // namespace sc_core
1618015Sbinkertn@umich.edu
1628015Sbinkertn@umich.edu// $Log: sc_attribute.cpp,v $
1638015Sbinkertn@umich.edu// Revision 1.7  2011/08/26 20:46:08  acg
1647977Shsul@eecs.umich.edu//  Andy Goodrich: moved the modification log to the end of the file to
1658013Sbinkertn@umich.edu//  eliminate source line number skew when check-ins are done.
1668013Sbinkertn@umich.edu//
1678013Sbinkertn@umich.edu// Revision 1.6  2011/08/24 22:05:50  acg
1688013Sbinkertn@umich.edu//  Torsten Maehne: initialization changes to remove warnings.
1697977Shsul@eecs.umich.edu//
1708013Sbinkertn@umich.edu// Revision 1.5  2011/02/18 20:27:14  acg
1718013Sbinkertn@umich.edu//  Andy Goodrich: Updated Copyrights.
1728013Sbinkertn@umich.edu//
1738016Sbinkertn@umich.edu// Revision 1.4  2011/02/13 21:47:37  acg
1747977Shsul@eecs.umich.edu//  Andy Goodrich: update copyright notice.
1758016Sbinkertn@umich.edu//
1768016Sbinkertn@umich.edu// Revision 1.3  2010/07/22 20:02:33  acg
1777977Shsul@eecs.umich.edu//  Andy Goodrich: bug fixes.
1787977Shsul@eecs.umich.edu//
1797977Shsul@eecs.umich.edu// Revision 1.2  2008/05/22 17:06:24  acg
1807977Shsul@eecs.umich.edu//  Andy Goodrich: updated copyright notice to include 2008.
1817977Shsul@eecs.umich.edu//
1828013Sbinkertn@umich.edu// Revision 1.1.1.1  2006/12/15 20:20:05  acg
1838013Sbinkertn@umich.edu// SystemC 2.3
1848013Sbinkertn@umich.edu//
1858013Sbinkertn@umich.edu// Revision 1.4  2006/01/16 22:27:08  acg
1868013Sbinkertn@umich.edu// Test of $Log comment.
1878013Sbinkertn@umich.edu//
1888013Sbinkertn@umich.edu// Revision 1.3  2006/01/13 18:44:29  acg
1898013Sbinkertn@umich.edu// Added $Log to record CVS changes into the source.
1908013Sbinkertn@umich.edu
1918013Sbinkertn@umich.edu// Taf!
1928013Sbinkertn@umich.edu