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