gem5 v24.0.0.0
Loading...
Searching...
No Matches
scfx_string.hh
Go to the documentation of this file.
1/*****************************************************************************
2
3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
4 more contributor license agreements. See the NOTICE file distributed
5 with this work for additional information regarding copyright ownership.
6 Accellera licenses this file to you under the Apache License, Version 2.0
7 (the "License"); you may not use this file except in compliance with the
8 License. You may obtain a copy of the License at
9
10 http://www.apache.org/licenses/LICENSE-2.0
11
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15 implied. See the License for the specific language governing
16 permissions and limitations under the License.
17
18 *****************************************************************************/
19
20/*****************************************************************************
21
22 scfx_string.h -
23
24 Original Author: Robert Graulich, Synopsys, Inc.
25 Martin Janssen, Synopsys, Inc.
26
27 *****************************************************************************/
28
29/*****************************************************************************
30
31 MODIFICATION LOG - modifiers, enter your name, affiliation, date and
32 changes you are making here.
33
34 Name, Affiliation, Date:
35 Description of Modification:
36
37 *****************************************************************************/
38// $Log: scfx_string.h,v $
39// Revision 1.1.1.1 2006/12/15 20:20:04 acg
40// SystemC 2.3
41//
42// Revision 1.2 2006/01/03 23:18:34 acg
43// Changed copyright to include 2006.
44//
45// Revision 1.1.1.1 2005/12/19 23:16:43 acg
46// First check in of SystemC 2.1 into its own archive.
47//
48// Revision 1.9 2005/09/15 23:02:03 acg
49// Added std:: prefix to appropriate methods and types to get around
50// issues with the Edison Front End.
51//
52// Revision 1.8 2005/06/07 17:27:02 acg
53// Fixed bug in scfx_string::operator += where an array reference was used
54// rather than the [] operator. This meant that the buffer may have been
55// accessed beyond its allocated storage.
56//
57
58#ifndef __SYSTEMC_EXT_DT_FX_SCFX_STRING_HH__
59#define __SYSTEMC_EXT_DT_FX_SCFX_STRING_HH__
60
61#include <cstdio>
62
63namespace sc_dt
64{
65
66// classes defined in this module
67class scfx_string;
68
69
70// ----------------------------------------------------------------------------
71// CLASS : scfx_string
72//
73// Simple string class for internal use.
74// ----------------------------------------------------------------------------
75
77{
78 void resize(std::size_t);
79
80 public:
82
84
85 int length() const;
86
87 void clear();
88
89 char & operator [] (int);
90
91 void append(int);
92 void discard(int);
93 void remove(int);
94
95 void operator += (char);
96 void operator += (const char *);
97
98 operator const char * ();
99
100 private:
101 std::size_t m_len;
102 std::size_t m_alloc;
103 char *m_buffer;
104};
105
106
107// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
108
109inline void
111{
112 do {
113 m_alloc *= 2;
114 } while (i >= m_alloc);
115
116 char *temp = new char[m_alloc];
117
118 for (int j = 0; j < (int) m_len; ++j) {
119 temp[j] = m_buffer[j];
120 }
121 temp[m_len] = 0;
122
123 delete [] m_buffer;
124 m_buffer = temp;
125}
126
128 m_len(0), m_alloc(BUFSIZ), m_buffer(new char[m_alloc])
129{
130 m_buffer[m_len] = 0;
131}
132
133inline scfx_string::~scfx_string() { delete [] m_buffer; }
134
135inline int scfx_string::length() const { return m_len; }
136
137inline void
139{
140 m_len = 0;
141 m_buffer[m_len] = 0;
142}
143
144inline char &
146{
147 if (i >= (int)m_alloc) {
148 resize(i);
149 }
150 return m_buffer[i];
151}
152
153inline void
155{
156 m_len += n;
157 m_buffer[m_len] = 0;
158}
159
160inline void
162{
163 m_len -= n;
164 m_buffer[m_len] = 0;
165}
166
167inline void
169{
170 for (int j = i + 1; j < (int)m_len; ++j)
171 m_buffer[j - 1] = m_buffer[j];
172 --m_len;
173 m_buffer[m_len] = 0;
174}
175
176inline void
178{
179 this->operator [] (m_len) = c;
180 m_len++;
181 this->operator [] (m_len) = 0;
182}
183
184inline void
186{
187 while (*s)
188 (*this) += *s++;
189}
190
191inline scfx_string::operator const char * ()
192{
193 m_buffer[m_len] = 0;
194 return m_buffer;
195}
196
197} // namespace sc_dt
198
199#endif // __SYSTEMC_EXT_DT_FX_SCFX_STRING_HH__
std::size_t m_alloc
char & operator[](int)
void operator+=(char)
void resize(std::size_t)
SwitchingFiber c

Generated on Tue Jun 18 2024 16:24:06 for gem5 by doxygen 1.11.0