112027Sjungma@eit.uni-kl.de/***************************************************************************** 212027Sjungma@eit.uni-kl.de 312027Sjungma@eit.uni-kl.de Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412027Sjungma@eit.uni-kl.de more contributor license agreements. See the NOTICE file distributed 512027Sjungma@eit.uni-kl.de with this work for additional information regarding copyright ownership. 612027Sjungma@eit.uni-kl.de Accellera licenses this file to you under the Apache License, Version 2.0 712027Sjungma@eit.uni-kl.de (the "License"); you may not use this file except in compliance with the 812027Sjungma@eit.uni-kl.de License. You may obtain a copy of the License at 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de http://www.apache.org/licenses/LICENSE-2.0 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.de Unless required by applicable law or agreed to in writing, software 1312027Sjungma@eit.uni-kl.de distributed under the License is distributed on an "AS IS" BASIS, 1412027Sjungma@eit.uni-kl.de WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512027Sjungma@eit.uni-kl.de implied. See the License for the specific language governing 1612027Sjungma@eit.uni-kl.de permissions and limitations under the License. 1712027Sjungma@eit.uni-kl.de 1812027Sjungma@eit.uni-kl.de *****************************************************************************/ 1912027Sjungma@eit.uni-kl.de 2012027Sjungma@eit.uni-kl.de/***************************************************************************** 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de scfx_string.h - 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Robert Graulich, Synopsys, Inc. 2512027Sjungma@eit.uni-kl.de Martin Janssen, Synopsys, Inc. 2612027Sjungma@eit.uni-kl.de 2712027Sjungma@eit.uni-kl.de *****************************************************************************/ 2812027Sjungma@eit.uni-kl.de 2912027Sjungma@eit.uni-kl.de/***************************************************************************** 3012027Sjungma@eit.uni-kl.de 3112027Sjungma@eit.uni-kl.de MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3212027Sjungma@eit.uni-kl.de changes you are making here. 3312027Sjungma@eit.uni-kl.de 3412027Sjungma@eit.uni-kl.de Name, Affiliation, Date: 3512027Sjungma@eit.uni-kl.de Description of Modification: 3612027Sjungma@eit.uni-kl.de 3712027Sjungma@eit.uni-kl.de *****************************************************************************/ 3812027Sjungma@eit.uni-kl.de// $Log: scfx_string.h,v $ 3912027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:04 acg 4012027Sjungma@eit.uni-kl.de// SystemC 2.3 4112027Sjungma@eit.uni-kl.de// 4212027Sjungma@eit.uni-kl.de// Revision 1.2 2006/01/03 23:18:34 acg 4312027Sjungma@eit.uni-kl.de// Changed copyright to include 2006. 4412027Sjungma@eit.uni-kl.de// 4512027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2005/12/19 23:16:43 acg 4612027Sjungma@eit.uni-kl.de// First check in of SystemC 2.1 into its own archive. 4712027Sjungma@eit.uni-kl.de// 4812027Sjungma@eit.uni-kl.de// Revision 1.9 2005/09/15 23:02:03 acg 4912027Sjungma@eit.uni-kl.de// Added std:: prefix to appropriate methods and types to get around 5012027Sjungma@eit.uni-kl.de// issues with the Edison Front End. 5112027Sjungma@eit.uni-kl.de// 5212027Sjungma@eit.uni-kl.de// Revision 1.8 2005/06/07 17:27:02 acg 5312027Sjungma@eit.uni-kl.de// Fixed bug in scfx_string::operator += where an array reference was used 5412027Sjungma@eit.uni-kl.de// rather than the [] operator. This meant that the buffer may have been 5512027Sjungma@eit.uni-kl.de// accessed beyond its allocated storage. 5612027Sjungma@eit.uni-kl.de// 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.de#ifndef SCFX_STRING_H 5912027Sjungma@eit.uni-kl.de#define SCFX_STRING_H 6012027Sjungma@eit.uni-kl.de 6112027Sjungma@eit.uni-kl.de#include <cstdio> 6212027Sjungma@eit.uni-kl.de 6312027Sjungma@eit.uni-kl.de 6412027Sjungma@eit.uni-kl.denamespace sc_dt 6512027Sjungma@eit.uni-kl.de{ 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de// classes defined in this module 6812027Sjungma@eit.uni-kl.declass scfx_string; 6912027Sjungma@eit.uni-kl.de 7012027Sjungma@eit.uni-kl.de 7112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7212027Sjungma@eit.uni-kl.de// CLASS : scfx_string 7312027Sjungma@eit.uni-kl.de// 7412027Sjungma@eit.uni-kl.de// Simple string class for internal use. 7512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7612027Sjungma@eit.uni-kl.de 7712027Sjungma@eit.uni-kl.declass scfx_string 7812027Sjungma@eit.uni-kl.de{ 7912027Sjungma@eit.uni-kl.de void resize( std::size_t ); 8012027Sjungma@eit.uni-kl.de 8112027Sjungma@eit.uni-kl.depublic: 8212027Sjungma@eit.uni-kl.de 8312027Sjungma@eit.uni-kl.de scfx_string(); 8412027Sjungma@eit.uni-kl.de 8512027Sjungma@eit.uni-kl.de ~scfx_string(); 8612027Sjungma@eit.uni-kl.de 8712027Sjungma@eit.uni-kl.de int length() const; 8812027Sjungma@eit.uni-kl.de 8912027Sjungma@eit.uni-kl.de void clear(); 9012027Sjungma@eit.uni-kl.de 9112027Sjungma@eit.uni-kl.de char& operator [] ( int ); 9212027Sjungma@eit.uni-kl.de 9312027Sjungma@eit.uni-kl.de void append( int ); 9412027Sjungma@eit.uni-kl.de void discard( int ); 9512027Sjungma@eit.uni-kl.de void remove( int ); 9612027Sjungma@eit.uni-kl.de 9712027Sjungma@eit.uni-kl.de void operator += ( char ); 9812027Sjungma@eit.uni-kl.de void operator += ( const char* ); 9912027Sjungma@eit.uni-kl.de 10012027Sjungma@eit.uni-kl.de operator const char* (); 10112027Sjungma@eit.uni-kl.de 10212027Sjungma@eit.uni-kl.deprivate: 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.de std::size_t m_len; 10512027Sjungma@eit.uni-kl.de std::size_t m_alloc; 10612027Sjungma@eit.uni-kl.de char* m_buffer; 10712027Sjungma@eit.uni-kl.de}; 10812027Sjungma@eit.uni-kl.de 10912027Sjungma@eit.uni-kl.de 11012027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 11112027Sjungma@eit.uni-kl.de 11212027Sjungma@eit.uni-kl.deinline 11312027Sjungma@eit.uni-kl.devoid 11412027Sjungma@eit.uni-kl.descfx_string::resize( std::size_t i ) 11512027Sjungma@eit.uni-kl.de{ 11612027Sjungma@eit.uni-kl.de do { 11712027Sjungma@eit.uni-kl.de m_alloc *= 2; 11812027Sjungma@eit.uni-kl.de } while( i >= m_alloc ); 11912027Sjungma@eit.uni-kl.de 12012027Sjungma@eit.uni-kl.de char* temp = new char[m_alloc]; 12112027Sjungma@eit.uni-kl.de 12212027Sjungma@eit.uni-kl.de for( int j = 0; j < (int) m_len; ++ j ) { 12312027Sjungma@eit.uni-kl.de temp[j] = m_buffer[j]; 12412027Sjungma@eit.uni-kl.de } 12512027Sjungma@eit.uni-kl.de temp[m_len] = 0; 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de delete [] m_buffer; 12812027Sjungma@eit.uni-kl.de m_buffer = temp; 12912027Sjungma@eit.uni-kl.de} 13012027Sjungma@eit.uni-kl.de 13112027Sjungma@eit.uni-kl.de 13212027Sjungma@eit.uni-kl.deinline 13312027Sjungma@eit.uni-kl.descfx_string::scfx_string() 13412027Sjungma@eit.uni-kl.de: m_len( 0 ), m_alloc( BUFSIZ ), m_buffer( new char[m_alloc] ) 13512027Sjungma@eit.uni-kl.de{ 13612027Sjungma@eit.uni-kl.de m_buffer[m_len] = 0; 13712027Sjungma@eit.uni-kl.de} 13812027Sjungma@eit.uni-kl.de 13912027Sjungma@eit.uni-kl.de 14012027Sjungma@eit.uni-kl.deinline 14112027Sjungma@eit.uni-kl.descfx_string::~scfx_string() 14212027Sjungma@eit.uni-kl.de{ 14312027Sjungma@eit.uni-kl.de delete [] m_buffer; 14412027Sjungma@eit.uni-kl.de} 14512027Sjungma@eit.uni-kl.de 14612027Sjungma@eit.uni-kl.de 14712027Sjungma@eit.uni-kl.deinline 14812027Sjungma@eit.uni-kl.deint 14912027Sjungma@eit.uni-kl.descfx_string::length() const 15012027Sjungma@eit.uni-kl.de{ 15112027Sjungma@eit.uni-kl.de return m_len; 15212027Sjungma@eit.uni-kl.de} 15312027Sjungma@eit.uni-kl.de 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.deinline 15612027Sjungma@eit.uni-kl.devoid 15712027Sjungma@eit.uni-kl.descfx_string::clear() 15812027Sjungma@eit.uni-kl.de{ 15912027Sjungma@eit.uni-kl.de m_len = 0; 16012027Sjungma@eit.uni-kl.de m_buffer[m_len] = 0; 16112027Sjungma@eit.uni-kl.de} 16212027Sjungma@eit.uni-kl.de 16312027Sjungma@eit.uni-kl.de 16412027Sjungma@eit.uni-kl.deinline 16512027Sjungma@eit.uni-kl.dechar& 16612027Sjungma@eit.uni-kl.descfx_string::operator [] ( int i ) 16712027Sjungma@eit.uni-kl.de{ 16812027Sjungma@eit.uni-kl.de if( i >= (int) m_alloc ) { 16912027Sjungma@eit.uni-kl.de resize( i ); 17012027Sjungma@eit.uni-kl.de } 17112027Sjungma@eit.uni-kl.de return m_buffer[i]; 17212027Sjungma@eit.uni-kl.de} 17312027Sjungma@eit.uni-kl.de 17412027Sjungma@eit.uni-kl.de 17512027Sjungma@eit.uni-kl.deinline 17612027Sjungma@eit.uni-kl.devoid 17712027Sjungma@eit.uni-kl.descfx_string::append( int n ) 17812027Sjungma@eit.uni-kl.de{ 17912027Sjungma@eit.uni-kl.de m_len += n; 18012027Sjungma@eit.uni-kl.de m_buffer[m_len] = 0; 18112027Sjungma@eit.uni-kl.de} 18212027Sjungma@eit.uni-kl.de 18312027Sjungma@eit.uni-kl.deinline 18412027Sjungma@eit.uni-kl.devoid 18512027Sjungma@eit.uni-kl.descfx_string::discard( int n ) 18612027Sjungma@eit.uni-kl.de{ 18712027Sjungma@eit.uni-kl.de m_len -= n; 18812027Sjungma@eit.uni-kl.de m_buffer[m_len] = 0; 18912027Sjungma@eit.uni-kl.de} 19012027Sjungma@eit.uni-kl.de 19112027Sjungma@eit.uni-kl.deinline 19212027Sjungma@eit.uni-kl.devoid 19312027Sjungma@eit.uni-kl.descfx_string::remove( int i ) 19412027Sjungma@eit.uni-kl.de{ 19512027Sjungma@eit.uni-kl.de for( int j = i + 1; j < (int) m_len; ++ j ) 19612027Sjungma@eit.uni-kl.de m_buffer[j - 1] = m_buffer[j]; 19712027Sjungma@eit.uni-kl.de -- m_len; 19812027Sjungma@eit.uni-kl.de m_buffer[m_len] = 0; 19912027Sjungma@eit.uni-kl.de} 20012027Sjungma@eit.uni-kl.de 20112027Sjungma@eit.uni-kl.de 20212027Sjungma@eit.uni-kl.deinline 20312027Sjungma@eit.uni-kl.devoid 20412027Sjungma@eit.uni-kl.descfx_string::operator += ( char c ) 20512027Sjungma@eit.uni-kl.de{ 20612027Sjungma@eit.uni-kl.de this->operator [] ( m_len ) = c; 20712027Sjungma@eit.uni-kl.de m_len ++; 20812027Sjungma@eit.uni-kl.de this->operator [] ( m_len ) = 0; 20912027Sjungma@eit.uni-kl.de} 21012027Sjungma@eit.uni-kl.de 21112027Sjungma@eit.uni-kl.deinline 21212027Sjungma@eit.uni-kl.devoid 21312027Sjungma@eit.uni-kl.descfx_string::operator += ( const char* s ) 21412027Sjungma@eit.uni-kl.de{ 21512027Sjungma@eit.uni-kl.de while( *s ) 21612027Sjungma@eit.uni-kl.de (*this) += *s ++; 21712027Sjungma@eit.uni-kl.de} 21812027Sjungma@eit.uni-kl.de 21912027Sjungma@eit.uni-kl.de 22012027Sjungma@eit.uni-kl.deinline 22112027Sjungma@eit.uni-kl.descfx_string::operator const char*() 22212027Sjungma@eit.uni-kl.de{ 22312027Sjungma@eit.uni-kl.de m_buffer[m_len] = 0; 22412027Sjungma@eit.uni-kl.de return m_buffer; 22512027Sjungma@eit.uni-kl.de} 22612027Sjungma@eit.uni-kl.de 22712027Sjungma@eit.uni-kl.de} // namespace sc_dt 22812027Sjungma@eit.uni-kl.de 22912027Sjungma@eit.uni-kl.de 23012027Sjungma@eit.uni-kl.de#endif 23112027Sjungma@eit.uni-kl.de 23212027Sjungma@eit.uni-kl.de// Taf! 233