ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Control
AthContainers
Root
PackedParameters.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// $Id$
12
13
14
#include "
AthContainers/PackedParameters.h
"
15
16
17
namespace
SG
{
18
19
25
PackedParameters::PackedParameters
()
26
:
m_nbits
(8 * sizeof(uint32_t)),
27
m_nmantissa
(23),
28
m_scale
(0),
29
m_flags
(0)
30
{
31
}
32
33
44
PackedParameters::PackedParameters
(uint8_t
nbits
, uint8_t
flags
)
45
:
m_nbits
(
nbits
),
46
m_flags
(
flags
)
47
{
48
m_nmantissa
=
nbits
;
49
if
(
isSigned
() &&
m_nmantissa
> 0) --
m_nmantissa
;
50
if
(
hasScale
())
51
m_scale
= 1;
52
else
53
m_scale
= 0;
54
}
55
56
69
bool
PackedParameters::setNbits
(uint8_t
nbits
)
70
{
71
if
(
nbits <= 0 || nbits >
32)
return
false
;
72
uint8_t navail =
nbits
;
73
if
(
isSigned
()) --navail;
74
if
(navail == 0)
return
false
;
75
m_nbits
=
nbits
;
76
if
(
m_nmantissa
> navail)
77
m_nmantissa
= navail;
78
return
true
;
79
}
80
81
95
bool
PackedParameters::setNmantissa
(uint8_t
nmantissa
)
96
{
97
uint8_t navail =
m_nbits
;
98
if
(
isSigned
()) --navail;
99
if
(
nmantissa <= 0 || nmantissa >
navail)
return
false
;
100
m_nmantissa
=
nmantissa
;
101
return
true
;
102
}
103
104
116
bool
PackedParameters::setScale
(
float
scale
)
117
{
118
m_scale
=
scale
;
119
if
(
m_scale
== 0 ||
m_scale
== 1)
120
m_flags
&=
~FLAG_HAS_SCALE
;
121
else
122
m_flags
|=
FLAG_HAS_SCALE
;
123
return
true
;
124
}
125
126
138
bool
PackedParameters::setSigned
(
bool
flag)
139
{
140
if
(!flag) {
141
m_flags
&=
~FLAG_IS_SIGNED
;
142
return
true
;
143
}
144
145
if
(
m_nbits
== 1)
return
false
;
146
if
(
m_nmantissa
+ 1 >
m_nbits
)
147
m_nmantissa
=
m_nbits
- 1;
148
m_flags
|=
FLAG_IS_SIGNED
;
149
return
true
;
150
}
151
152
161
bool
PackedParameters::setRounding
(
bool
flag)
162
{
163
if
(flag)
164
m_flags
|=
FLAG_ROUNDING
;
165
else
166
m_flags
&=
~FLAG_ROUNDING
;
167
return
true
;
168
}
169
170
180
bool
PackedParameters::setFloat
(
bool
flag)
181
{
182
if
(flag)
183
m_flags
|=
FLAG_IS_FLOAT
;
184
else
185
m_flags
&=
~FLAG_IS_FLOAT
;
186
return
true
;
187
}
188
189
197
bool
PackedParameters::isValidOption
(
const
AuxDataOption
& option)
198
{
199
if
(option.name() ==
"nbits"
||
200
option.name() ==
"nmantissa"
||
201
option.name() ==
"scale"
||
202
option.name() ==
"signed"
||
203
option.name() ==
"rounding"
||
204
option.name() ==
"float"
)
205
{
206
return
true
;
207
}
208
return
false
;
209
}
210
211
222
bool
PackedParameters::setOption
(
const
AuxDataOption
& option)
223
{
224
if
(option.name() ==
"nbits"
)
225
return
setNbits
(option.intVal());
226
227
else
if
(option.name() ==
"nmantissa"
)
228
return
setNmantissa
(option.intVal());
229
230
else
if
(option.name() ==
"scale"
)
231
return
setScale
(option.floatVal());
232
233
else
if
(option.name() ==
"signed"
)
234
return
setSigned
(option.intVal() != 0);
235
236
else
if
(option.name() ==
"rounding"
)
237
return
setRounding
(option.intVal() != 0);
238
239
else
if
(option.name() ==
"float"
)
240
return
setFloat
(option.intVal() != 0);
241
242
return
false
;
243
}
244
245
246
}
// namespace SG
PackedParameters.h
Describe how the contents of a PackedContainer are to be saved.
SG::AuxDataOption
Hold information about an option setting request.
Definition
AuxDataOption.h:37
SG::PackedParameters::isValidOption
static bool isValidOption(const AuxDataOption &option)
Test to see if option is a recognized packing option.
Definition
PackedParameters.cxx:197
SG::PackedParameters::FLAG_ROUNDING
@ FLAG_ROUNDING
Definition
PackedParameters.h:270
SG::PackedParameters::FLAG_IS_FLOAT
@ FLAG_IS_FLOAT
Definition
PackedParameters.h:268
SG::PackedParameters::FLAG_IS_SIGNED
@ FLAG_IS_SIGNED
Definition
PackedParameters.h:267
SG::PackedParameters::FLAG_HAS_SCALE
@ FLAG_HAS_SCALE
Definition
PackedParameters.h:269
SG::PackedParameters::m_flags
uint8_t m_flags
Additional flags.
Definition
PackedParameters.h:286
SG::PackedParameters::hasScale
bool hasScale() const
Should floats be rescaled before writing?
SG::PackedParameters::setRounding
bool setRounding(bool flag)
Set the rounding mode.
Definition
PackedParameters.cxx:161
SG::PackedParameters::setNbits
bool setNbits(uint8_t nbits)
Set the number of bits to be used for each element.
Definition
PackedParameters.cxx:69
SG::PackedParameters::isSigned
bool isSigned() const
Are elements being written as signed numbers?
SG::PackedParameters::setOption
bool setOption(const AuxDataOption &option)
Set a packing option.
Definition
PackedParameters.cxx:222
SG::PackedParameters::setFloat
bool setFloat(bool flag)
Set the floating-point flag.
Definition
PackedParameters.cxx:180
SG::PackedParameters::setNmantissa
bool setNmantissa(uint8_t nmantissa)
Set the number of mantissa bits used in the packed representation.
Definition
PackedParameters.cxx:95
SG::PackedParameters::nbits
uint8_t nbits() const
The number of bits used to store each element.
SG::PackedParameters::m_nmantissa
uint8_t m_nmantissa
The number of bits for the mantissa of floating-point representations.
Definition
PackedParameters.h:280
SG::PackedParameters::setScale
bool setScale(float scale)
Set the scale to use when packing floating-point data.
Definition
PackedParameters.cxx:116
SG::PackedParameters::m_scale
float m_scale
If nonzero, divide floating-point numbers by this before writing.
Definition
PackedParameters.h:283
SG::PackedParameters::nmantissa
uint8_t nmantissa() const
The number of bits used for the mantissa portion of a float-point representation, excluding a sign bi...
SG::PackedParameters::setSigned
bool setSigned(bool flag)
Set the signedness flag for the packed representation.
Definition
PackedParameters.cxx:138
SG::PackedParameters::scale
float scale() const
Return the scale for floating-point numbers.
SG::PackedParameters::PackedParameters
PackedParameters()
Default constructor.
Definition
PackedParameters.cxx:25
SG::PackedParameters::m_nbits
uint8_t m_nbits
The number of bits to use for each element.
Definition
PackedParameters.h:276
SG::PackedParameters::flags
uint8_t flags() const
Additional flags describing the packing.
SG
Forward declaration.
Definition
CaloCellPacker_400_500.h:32
Generated on
for ATLAS Offline Software by
1.17.0