gem5  v20.1.0.0
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 
63 namespace sc_dt
64 {
65 
66 // classes defined in this module
67 class scfx_string;
68 
69 
70 // ----------------------------------------------------------------------------
71 // CLASS : scfx_string
72 //
73 // Simple string class for internal use.
74 // ----------------------------------------------------------------------------
75 
76 class scfx_string
77 {
78  void resize(std::size_t);
79 
80  public:
81  scfx_string();
82 
83  ~scfx_string();
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 
109 inline void
110 scfx_string::resize(std::size_t i)
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 
127 inline scfx_string::scfx_string() :
128  m_len(0), m_alloc(BUFSIZ), m_buffer(new char[m_alloc])
129 {
130  m_buffer[m_len] = 0;
131 }
132 
133 inline scfx_string::~scfx_string() { delete [] m_buffer; }
134 
135 inline int scfx_string::length() const { return m_len; }
136 
137 inline void
139 {
140  m_len = 0;
141  m_buffer[m_len] = 0;
142 }
143 
144 inline char &
146 {
147  if (i >= (int)m_alloc) {
148  resize(i);
149  }
150  return m_buffer[i];
151 }
152 
153 inline void
155 {
156  m_len += n;
157  m_buffer[m_len] = 0;
158 }
159 
160 inline void
162 {
163  m_len -= n;
164  m_buffer[m_len] = 0;
165 }
166 
167 inline 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 
176 inline void
178 {
179  this->operator [] (m_len) = c;
180  m_len++;
181  this->operator [] (m_len) = 0;
182 }
183 
184 inline void
185 scfx_string::operator += (const char *s)
186 {
187  while (*s)
188  (*this) += *s++;
189 }
190 
191 inline 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__
sc_dt::scfx_string::m_alloc
std::size_t m_alloc
Definition: scfx_string.hh:134
sc_dt
Definition: sc_bit.cc:67
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
sc_dt::scfx_string::scfx_string
scfx_string()
Definition: scfx_string.hh:159
sc_dt::scfx_string::~scfx_string
~scfx_string()
Definition: scfx_string.hh:165
sc_dt::scfx_string::clear
void clear()
Definition: scfx_string.hh:170
sc_dt::scfx_string::resize
void resize(std::size_t)
Definition: scfx_string.hh:142
sc_dt::scfx_string::operator[]
char & operator[](int)
Definition: scfx_string.hh:177
sc_dt::scfx_string::length
int length() const
Definition: scfx_string.hh:167
ArmISA::n
Bitfield< 31 > n
Definition: miscregs_types.hh:450
ArmISA::j
Bitfield< 24 > j
Definition: miscregs_types.hh:54
sc_dt::scfx_string::m_buffer
char * m_buffer
Definition: scfx_string.hh:135
sc_dt::scfx_string::discard
void discard(int)
Definition: scfx_string.hh:193
sc_dt::scfx_string::m_len
std::size_t m_len
Definition: scfx_string.hh:133
sc_dt::scfx_string::operator+=
void operator+=(char)
Definition: scfx_string.hh:209
sc_dt::scfx_string::append
void append(int)
Definition: scfx_string.hh:186
sc_dt::scfx_string::remove
void remove(int)
Definition: scfx_string.hh:200
ArmISA::c
Bitfield< 29 > c
Definition: miscregs_types.hh:50
ArmISA::s
Bitfield< 4 > s
Definition: miscregs_types.hh:556

Generated on Wed Sep 30 2020 14:02:15 for gem5 by doxygen 1.8.17