ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonCablings
MuonCablingTools
src
dbline.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
MuonCablingTools/dbline.h
"
6
7
#include <type_traits>
8
9
#include "
AthenaKernel/getMessageSvc.h
"
10
#include "GaudiKernel/MsgStream.h"
11
12
#include <charconv>
13
#include <iostream>
14
#include <string_view>
15
19
20
void
DBline::reset_data
(
void
) {
21
m_data
.clear();
22
m_pos
= 0;
23
m_backup
.clear();
24
}
25
void
DBline::reset_status
(
void
) {
26
GoodExtraction
();
27
m_empty
=
false
;
28
}
29
void
DBline::reset
(
void
) {
30
reset_data
();
31
reset_status
();
32
}
33
37
38
void
DBline::GoodExtraction
(
void
) {
m_extraction
=
extracted
; }
39
void
DBline::BadExtraction
(
void
) {
40
m_extraction
=
not_extracted
;
41
if
(!
m_backup
.empty()) {
42
m_data
= std::move(
m_backup
);
43
m_backup
.clear();
44
}
45
}
46
50
51
void
DBline::erase_comment
() {
52
const
size_t
pos =
m_data
.find(
'#'
);
53
if
(pos != std::string::npos)
m_data
.erase(pos);
54
}
55
56
void
DBline::GetToken
(
size_t
pos, std::string_view
token
) {
57
GoodExtraction
();
58
m_data
.erase(pos,
token
.length());
59
m_pos
= pos;
60
}
61
62
void
DBline::GetLine
(std::istream& input) {
63
if
(!
check_data
()) {
64
MsgStream log(
Athena::getMessageSvc
(
true
),
"DBline"
);
65
log << MSG::WARNING <<
"line "
<< std::setw(4) <<
m_line
<<
" -|"
<<
m_data
.c_str() <<
" .. not understood!"
<<
endmsg
;
66
}
67
reset
();
68
if
(input.eof()) {
69
m_fail
=
true
;
70
return
;
71
}
72
m_line
++;
73
std::getline(input,
m_data
);
74
erase_comment
();
75
check_data
();
76
if
(input.eof())
m_fail
=
true
;
77
}
78
82
83
template
<
class
type>
void
DBline::GetValue
(
type
& value) {
84
if
(!
m_extraction
||
m_fail
)
return
;
85
const
size_t
start =
m_data
.find_first_not_of(
' '
,
m_pos
);
86
if
(start == std::string::npos) {
87
BadExtraction
();
88
return
;
89
}
90
size_t
stop =
m_data
.find_first_of(
' '
, start + 1);
91
if
(stop == std::string::npos) stop =
m_data
.size();
92
93
if
constexpr
(std::is_unsigned_v<type>) {
94
unsigned
long
temp = std::stoul(
m_data
.substr(start, stop - start),
nullptr
,
m_base
);
95
value = temp;
96
}
else
{
97
int
temp = std::stoi(
m_data
.substr(start, stop - start),
nullptr
,
m_base
);
98
value = temp;
99
}
100
m_data
.erase(
m_pos
, stop -
m_pos
);
101
check_data
();
102
}
103
104
void
DBline::GetValue
(std::string& value) {
105
if
(!
m_extraction
||
m_fail
)
return
;
106
const
size_t
start =
m_data
.find_first_not_of(
' '
,
m_pos
);
107
if
(start == std::string::npos) {
108
BadExtraction
();
109
return
;
110
}
111
size_t
stop =
m_data
.find_first_of(
' '
, start + 1);
112
if
(stop == std::string::npos) stop =
m_data
.size();
113
114
value =
m_data
.substr(start, stop - start);
115
116
m_data
.erase(
m_pos
, stop -
m_pos
);
117
check_data
();
118
}
119
120
void
DBline::GetStr
(std::string&
str
) {
121
GetValue
(
str
);
122
quote
pos =
check_quote
(
str
);
123
if
(pos ==
no_quote
) {
return
; }
124
if
(pos ==
begin_quote
) {
125
const
size_t
pos =
m_data
.find(
'"'
,
m_pos
);
126
if
(pos == std::string::npos) {
127
str
.clear();
128
BadExtraction
();
129
return
;
130
}
131
str
.append(
m_data
,
m_pos
, pos);
132
m_data
.erase(
m_pos
, (pos -
m_pos
) + 1);
133
}
else
{
134
str
.clear();
135
BadExtraction
();
136
}
137
}
138
139
DBline::quote
DBline::check_quote
(std::string&
str
)
const
{
140
const
size_t
pos =
str
.find(
'"'
);
141
if
(pos == std::string::npos)
142
return
no_quote
;
143
else
if
(pos == 0) {
144
str
.erase(0, 1);
145
return
begin_quote
;
146
}
else
if
(pos ==
str
.length() - 1) {
147
str
.erase(pos, 1);
148
return
end_quote
;
149
}
150
return
error
;
151
}
152
156
157
void
DBline::connect
(std::ifstream&
file
) {
158
if
((&
file
) !=
m_file
) {
159
m_line
= 0;
160
m_fail
= 0;
161
m_stream
=
nullptr
;
162
m_file
= &
file
;
163
}
164
}
165
166
void
DBline::connect
(std::istream& stream) {
167
if
((&stream) !=
m_stream
) {
168
m_line
= 0;
169
m_fail
= 0;
170
m_file
=
nullptr
;
171
m_stream
= &stream;
172
}
173
}
174
178
179
DBline
&
DBline::token
(std::string_view
token
) {
180
if
(
m_extraction
)
m_backup
=
m_data
;
181
if
(
check_data
()) {
182
BadExtraction
();
183
return
*
this
;
184
}
185
const
size_t
pos =
m_data
.find(
token
);
186
187
if
(pos != std::string::npos) {
188
const
size_t
finalpos = pos +
token
.length();
189
char
prev = (pos) ?
m_data
[pos - 1] :
' '
;
190
char
foll = (finalpos <
m_data
.length()) ?
m_data
[finalpos] :
' '
;
191
if
(prev ==
' '
&& foll ==
' '
)
192
GetToken
(pos,
token
);
193
else
194
BadExtraction
();
195
}
else
196
BadExtraction
();
197
return
*
this
;
198
}
199
200
template
<
class
type>
DBline
&
DBline::token
(std::string_view
str
,
type
t) {
201
const
size_t
pos =
str
.find(
'#'
);
202
if
(pos != std::string::npos) {
203
const
std::string rep = std::to_string(t);
204
205
std::string new_token{
str
};
206
new_token.replace(pos, rep.length(), rep);
207
token
(new_token);
208
}
else
209
token
(
str
);
210
211
return
*
this
;
212
}
213
214
template
<
class
type>
DBline
&
DBline::token
(std::string_view
str
,
type
t,
int
/*size*/
) {
215
const
size_t
pos =
str
.find(
'#'
);
216
if
(pos != std::string::npos) {
217
std::ostringstream rep;
218
rep << std::setw(2) << std::setfill(
'0'
) << t;
219
220
std::string new_token{
str
};
221
new_token.replace(pos, rep.str().length(), rep.str());
222
token
(new_token);
223
}
else
224
token
(
str
);
225
226
return
*
this
;
227
}
228
229
void
DBline::go_until
(std::string_view
token
) {
230
if
(
m_file
)
do
231
GetLine
(*
m_file
);
232
while
(
m_data
.find(
token
) == std::string::npos);
233
if
(
m_stream
)
do
234
GetLine
(*
m_stream
);
235
while
(
m_data
.find(
token
) == std::string::npos);
236
}
237
241
DBline
&
DBline::reset_fmt
(
void
) {
242
m_base
= 10;
243
flags(
m_default
);
244
return
*
this
;
245
}
246
250
251
DBline
&
DBline::operator>>
(std::string&
str
) {
252
GetStr
(
str
);
253
return
*
this
;
254
}
255
DBline
&
DBline::operator>>
(
int
& i) {
256
GetValue
(i);
257
return
*
this
;
258
}
259
DBline
&
DBline::operator>>
(uint8_t& i8) {
260
GetValue
(i8);
261
return
*
this
;
262
}
263
DBline
&
DBline::operator>>
(uint16_t& i16) {
264
GetValue
(i16);
265
return
*
this
;
266
}
267
DBline
&
DBline::operator>>
(uint32_t& i32) {
268
GetValue
(i32);
269
return
*
this
;
270
}
271
DBline
&
DBline::operator>>
(uint64_t& i64) {
272
GetValue
(i64);
273
return
*
this
;
274
}
275
279
280
DBline
&
DBline::operator>>
(
const
DBfmt
& f) {
281
flags(f.flags());
282
const
std::ios_base::fmtflags
fmt
= f.flags() & std::ios_base::basefield;
283
switch
(
fmt
) {
284
case
std::ios::hex:
m_base
= 16;
break
;
285
case
std::ios::oct:
m_base
= 8;
break
;
286
default
:
m_base
= 10;
287
}
288
return
*
this
;
289
}
290
294
295
DBline
&
DBline::operator>>
(std::string_view
token
) {
296
if
(!
m_extraction
||
check_data
() ||
m_fail
)
return
*
this
;
297
const
size_t
pos =
m_data
.find(
token
,
m_pos
);
298
if
(pos != std::string::npos)
299
GetToken
(pos,
token
);
300
else
301
BadExtraction
();
302
return
*
this
;
303
}
304
308
309
DBline
&
DBline::operator++
() {
310
if
(
m_file
)
GetLine
(*
m_file
);
311
if
(
m_stream
)
GetLine
(*
m_stream
);
312
return
*
this
;
313
}
314
315
DBline
&
DBline::operator++
(
int
i) {
316
for
(
int
j = -1; j < i; j++) {
317
if
(
m_file
)
GetLine
(*
m_file
);
318
if
(
m_stream
)
GetLine
(*
m_stream
);
319
}
320
return
*
this
;
321
}
322
323
DBline
&
DBline::operator+
(
int
i) {
324
for
(
int
j = 0; j < i; j++) {
325
if
(
m_file
)
GetLine
(*
m_file
);
326
if
(
m_stream
)
GetLine
(*
m_stream
);
327
}
328
return
*
this
;
329
}
330
334
335
DBline::operator bool() {
return
!(
m_fail
| !
static_cast<
bool
>
(
m_extraction
)); }
336
bool
DBline::operator!
() {
return
m_fail
| !
static_cast<
bool
>
(
m_extraction
); }
337
DBline::operator
DBstatus
() {
return
m_extraction
; }
338
342
343
DBline
&
DBline::operator()
(std::string_view
str
) {
344
token
(
str
);
345
return
*
this
;
346
}
347
348
DBline
&
DBline::operator()
(std::string_view
str
,
int
n) {
349
token
(
str
, n);
350
return
*
this
;
351
}
352
353
DBline
&
DBline::operator()
(std::string_view
str
,
int
n,
int
s) {
354
token
(
str
, n, s);
355
return
*
this
;
356
}
357
359
360
DBline::DBline
() {
361
this->unsetf(std::ios::skipws | std::ios::left | std::ios::right | std::ios::internal | std::ios::oct | std::ios::hex |
362
std::ios::showbase | std::ios::showpoint | std::ios::uppercase | std::ios::scientific | std::ios::fixed |
363
std::ios::showpos | std::ios::boolalpha);
364
m_default
= flags();
365
m_dbfmt_hex
.setf(std::ios::hex, std::ios::basefield);
366
m_dbfmt_oct
.setf(std::ios::oct, std::ios::basefield);
367
m_dbfmt_dec
.setf(std::ios::dec, std::ios::basefield);
368
}
369
370
DBline::DBline
(std::ifstream&
file
) :
371
DBline
() {
372
m_file
= &
file
;
373
}
374
375
DBline::DBline
(std::istream& stream) :
376
DBline
() {
377
m_stream
= &stream;
378
}
379
380
DBline
&
DBline::operator<<
(std::ifstream&
file
) {
381
connect
(
file
);
382
GetLine
(
file
);
383
return
*
this
;
384
}
385
386
DBline
&
DBline::operator<<
(std::istream& input) {
387
connect
(input);
388
GetLine
(input);
389
return
*
this
;
390
}
391
395
396
std::ifstream&
operator>>
(std::ifstream&
file
,
DBline
& db) {
397
db.connect(
file
);
398
db.GetLine(
file
);
399
return
file
;
400
}
401
402
std::istream&
operator>>
(std::istream& stream,
DBline
& db) {
403
db.connect(stream);
404
db.GetLine(stream);
405
return
stream;
406
}
407
408
std::ostream&
operator<<
(std::ostream& stream,
DBline
& db) {
409
stream << db.m_data;
410
return
stream;
411
}
412
413
DBstatus
operator|
(
DBstatus
s1,
DBstatus
s2) {
414
if
(s1 || s2)
return
extracted
;
415
return
not_extracted
;
416
}
417
418
DBstatus
operator&
(
DBstatus
s1,
DBstatus
s2) {
419
if
(s1 && s2)
return
extracted
;
420
return
not_extracted
;
421
}
422
423
DBfmt::DBfmt
() {
424
this->setf(std::ios::unitbuf | std::ios::dec);
425
this->unsetf(std::ios::skipws | std::ios::left | std::ios::right | std::ios::internal | std::ios::oct | std::ios::hex |
426
std::ios::showbase | std::ios::showpoint | std::ios::uppercase | std::ios::scientific | std::ios::fixed |
427
std::ios::showpos | std::ios::boolalpha);
428
}
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
fmt
const char *const fmt
Definition
TripleGaussCollFit.cxx:84
DBfmt
Definition
dbline.h:250
DBfmt::DBfmt
DBfmt()
Definition
dbline.cxx:423
DBline::operator>>
DBline & operator>>(std::string &str)
Definition
dbline.cxx:251
DBline::m_fail
bool m_fail
Definition
dbline.h:265
DBline::quote
enum DBline::exist_quote quote
DBline::operator++
DBline & operator++()
Definition
dbline.cxx:309
DBline::operator+
DBline & operator+(int i)
Definition
dbline.cxx:323
DBline::connect
void connect(std::ifstream &file)
Definition
dbline.cxx:157
DBline::BadExtraction
void BadExtraction(void)
Definition
dbline.cxx:39
DBline::m_base
int m_base
Definition
dbline.h:268
DBline::check_data
bool check_data(void)
Definition
dbline.h:364
DBline::reset_status
void reset_status(void)
Definition
dbline.cxx:25
DBline::check_quote
quote check_quote(std::string &) const
Definition
dbline.cxx:139
DBline::GoodExtraction
void GoodExtraction(void)
Definition
dbline.cxx:38
DBline::end_quote
@ end_quote
Definition
dbline.h:257
DBline::no_quote
@ no_quote
Definition
dbline.h:257
DBline::begin_quote
@ begin_quote
Definition
dbline.h:257
DBline::m_line
int m_line
Definition
dbline.h:264
DBline::reset_fmt
DBline & reset_fmt(void)
Definition
dbline.cxx:241
DBline::m_data
std::string m_data
Definition
dbline.h:262
DBline::m_pos
unsigned long int m_pos
Definition
dbline.h:263
DBline::m_dbfmt_oct
DBfmt m_dbfmt_oct
Definition
dbline.h:295
DBline::m_dbfmt_hex
DBfmt m_dbfmt_hex
Definition
dbline.h:294
DBline::m_extraction
DBstatus m_extraction
Definition
dbline.h:267
DBline::m_dbfmt_dec
DBfmt m_dbfmt_dec
Definition
dbline.h:296
DBline::operator<<
DBline & operator<<(std::istream &input)
Definition
dbline.cxx:386
DBline::GetToken
void GetToken(size_t pos, std::string_view token)
Definition
dbline.cxx:56
DBline::m_stream
std::istream * m_stream
Definition
dbline.h:261
DBline::m_default
std::ios::fmtflags m_default
Definition
dbline.h:259
DBline::GetStr
void GetStr(std::string &)
Definition
dbline.cxx:120
DBline::m_empty
bool m_empty
Definition
dbline.h:266
DBline::erase_comment
void erase_comment(void)
Definition
dbline.cxx:51
DBline::GetValue
void GetValue(type &value)
Definition
dbline.cxx:83
DBline::m_backup
std::string m_backup
Definition
dbline.h:262
DBline::go_until
void go_until(std::string_view token)
Definition
dbline.cxx:229
DBline::operator()
DBline & operator()(std::string_view)
Definition
dbline.cxx:343
DBline::m_file
std::ifstream * m_file
Definition
dbline.h:260
DBline::DBline
DBline()
Definition
dbline.cxx:360
DBline::reset
void reset(void)
Definition
dbline.cxx:29
DBline::operator!
bool operator!()
Definition
dbline.cxx:336
DBline::reset_data
void reset_data(void)
Definition
dbline.cxx:20
DBline::token
DBline & token(std::string_view)
Definition
dbline.cxx:179
DBline::GetLine
void GetLine(std::istream &input)
Definition
dbline.cxx:62
operator&
DBstatus operator&(DBstatus s1, DBstatus s2)
Definition
dbline.cxx:418
operator|
DBstatus operator|(DBstatus s1, DBstatus s2)
Definition
dbline.cxx:413
operator>>
std::ifstream & operator>>(std::ifstream &file, DBline &db)
Definition
dbline.cxx:396
operator<<
std::ostream & operator<<(std::ostream &stream, DBline &db)
Definition
dbline.cxx:408
dbline.h
not_extracted
@ not_extracted
Definition
dbline.h:248
extracted
@ extracted
Definition
dbline.h:248
DBstatus
enum result_extraction DBstatus
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition
getMessageSvc.cxx:20
error
Definition
IImpactPoint3dEstimator.h:72
str
Definition
BTagTrackIpAccessor.cxx:11
type
file
TFile * file
Definition
tile_monitor.h:29
Generated on
for ATLAS Offline Software by
1.17.0