gem5
v20.1.0.0
systemc
ext
dt
fx
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
138
scfx_string::clear
()
139
{
140
m_len
= 0;
141
m_buffer
[
m_len
] = 0;
142
}
143
144
inline
char
&
145
scfx_string::operator []
(
int
i
)
146
{
147
if
(
i
>= (
int
)
m_alloc
) {
148
resize
(
i
);
149
}
150
return
m_buffer
[
i
];
151
}
152
153
inline
void
154
scfx_string::append
(
int
n
)
155
{
156
m_len
+=
n
;
157
m_buffer
[
m_len
] = 0;
158
}
159
160
inline
void
161
scfx_string::discard
(
int
n
)
162
{
163
m_len
-=
n
;
164
m_buffer
[
m_len
] = 0;
165
}
166
167
inline
void
168
scfx_string::remove
(
int
i
)
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
177
scfx_string::operator +=
(
char
c
)
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