ATLAS Offline Software
Loading...
Searching...
No Matches
bitPATTERN.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7using namespace std;
8
9bitPATTERN::bitPATTERN(const std::string& name,const PATTERNidentity& id,int size) :
11 m_id(id),
13{
14 m_digits = new const RPCdigit* [m_size];
15 reset();
16}
17
19 RPCtrigDataObject(0,pattern.name()),
20 m_id(pattern.id()),
21 m_size(pattern.size())
22{
23 m_digits = new const RPCdigit* [m_size];
24 reset();
25 for(int i=0;i<m_size;++i) m_digits[i] = pattern[i];
26}
27
29{
30 delete [] m_digits;
31}
32
34// cppcheck-suppress operatorEqVarError; m_size not assigned
36{
37 if(pattern.size() != m_size) return *this;
38
39 reset();
40
41 m_id = pattern.id();
42 for(int i=0;i<m_size;++i) m_digits[i] = pattern[i];
43 return *this;
44}
45
46bool
48{
49 if(m_id < pattern.id()) return true;
50 else return false;
51}
52
53void
54bitPATTERN::set(const RPCdigit* digit, int bit)
55{
56 if(bit >= m_size || bit < 0) return;
57 m_digits[bit] = digit;
58}
59
60void
62{
63 if(bit >= m_size || bit < 0) return;
64 m_digits[bit] = 0;
65}
66
67
68void
70{
71 for(int i=0;i<m_size;++i)
72 {
73 m_digits[i] = 0;
74 }
75}
76
77bool
79{
80 for(int i=0;i<m_size;++i)
81 {
82 if (m_digits[i]) return true;
83 }
84 return false;
85}
86
87bool
88bitPATTERN::test(int bit) const
89{
90 if(bit >= m_size || bit < 0) return false;
91 if (m_digits[bit]) return true;
92 else return false;
93}
94
95const RPCdigit*
97{
98 if(bit >= m_size || bit < 0) return 0;
99 else return m_digits[bit];
100}
101
104{
105 if(pattern.size() != m_size) return *this;
106 bitPATTERN result(name(),id(),m_size);
107
108 for(int i=0;i<m_size;++i)
109 {
110 if ( m_digits[i] && pattern.test(i) ) result.set(m_digits[i],i);
111 }
112
113 return result;
114}
115
118{
119 if(pattern.size() != m_size) return *this;
120 for(int i=0;i<m_size;++i)
121 {
122 if ( !(m_digits[i] && pattern.test(i)) ) m_digits[i] = 0;
123 }
124 return *this;
125}
126
129{
130 if(pattern.size() != m_size) return *this;
131 bitPATTERN result(name(),id(),m_size);
132
133 for(int i=0;i<m_size;++i)
134 {
135 if ( m_digits[i] || pattern.test(i) )
136 {
137 if(m_digits[i]) result.set(m_digits[i],i);
138 else result.set(pattern[i],i);
139 }
140 }
141
142 return result;
143}
144
147{
148 if(pattern.size() != m_size) return *this;
149 for(int i=0;i<m_size;++i)
150 {
151 if ( !(m_digits[i] || pattern.test(i)) ) m_digits[i] = 0;
152 else if(!m_digits[i]) m_digits[i] = pattern[i];
153 }
154 return *this;
155}
156
157
160{
161 if(pattern.size() != m_size) return *this;
162 bitPATTERN result(name(),id(),m_size);
163
164 for(int i=0;i<m_size;++i)
165 {
166 if ( (m_digits[i] || pattern.test(i)) &&
167 !(m_digits[i] && pattern.test(i)) )
168 {
169 if(m_digits[i]) result.set(m_digits[i],i);
170 else result.set(pattern[i],i);
171 }
172 }
173
174 return result;
175}
176
179{
180 if(pattern.size() != m_size) return *this;
181 for(int i=0;i<m_size;++i)
182 {
183 if ( !((m_digits[i] || pattern.test(i)) &&
184 !(m_digits[i] && pattern.test(i)) ) ) m_digits[i] = 0;
185 else if(!m_digits[i]) m_digits[i] = pattern[i];
186 }
187 return *this;
188}
189
192{
193 if(num <= 0) return *this;
194 for(int i=0;i<num;++i) shift_left();
195 return *this;
196}
197
200{
201 if(num <= 0) return *this;
202 for(int i=0;i<num;++i) shift_right();
203 return *this;
204}
205
206void
208{
209 for(int i=1;i<m_size;++i) m_digits[i-1] = m_digits[i];
210 m_digits[m_size-1] = 0;
211}
212
213void
215{
216 for(int i=m_size-2;i>=0;--i) m_digits[i+1] = m_digits[i];
217 m_digits[0] = 0;
218}
219
220void bitPATTERN::dump (uint32_t& first_32_pattern ,
221 uint32_t& second_32_pattern ) const
222{
223 first_32_pattern = 0x0;
224 second_32_pattern = 0x0;
225
226 if (m_size!=32 && m_size!=64) return;
227
228 for (int i=0; i<32; ++i)
229 {
230 if (m_digits[i]) first_32_pattern |= (0x1<<i);
231 }
232
233 if (m_size == 64)
234 {
235 for (int i=32; i<64; ++i)
236 {
237 if (m_digits[i]) second_32_pattern |= (0x1<<(i-32));
238 }
239 }
240}
241
242
243void bitPATTERN::Print(ostream& stream,bool detail) const
244{
245 stream << name() << " (" << size() << ") ";
246
247 if(any()) stream << "*> ";
248 else stream << " > ";
249
250 for(int i=0;i<size();++i)
251 {
252 if(test(i)) stream << "1";
253 else stream << "0";
254 }
255
256
257 stream << endl;
258
259 if(detail )
260 {
261 stream << "gives input to " << id() << endl;
262 for(int i=0;i<size();++i)
263 {
264 if(test(i))
265 {
266 stream << "bit " << i << " raised by:" << endl;
267 (*this)[i]->Print(stream,false);
268 }
269 }
270 }
271}
const std::string & name() const
Definition BaseObject.h:23
RPCtrigDataObject(int, const std::string &)
bitPATTERN(const std::string &, const PATTERNidentity &, int)
Definition bitPATTERN.cxx:9
const PATTERNidentity & id(void) const
Definition bitPATTERN.h:39
bitPATTERN & operator<<(int)
void set(const RPCdigit *, int)
void reset(void)
void Print(std::ostream &, bool detail) const
bool test(int) const
bool operator<(const bitPATTERN &)
bitPATTERN & operator|=(const bitPATTERN &)
void dump(uint32_t &, uint32_t &) const
bitPATTERN & operator=(const bitPATTERN &)
void shift_right(void)
void unset(int)
const RPCdigit ** m_digits
Definition bitPATTERN.h:17
bool any(void) const
int size(void) const
Definition bitPATTERN.h:41
PATTERNidentity m_id
Definition bitPATTERN.h:15
bitPATTERN & operator>>(int)
void shift_left(void)
bitPATTERN operator&(const bitPATTERN &) const
bitPATTERN operator^(const bitPATTERN &) const
bitPATTERN & operator^=(const bitPATTERN &)
bitPATTERN operator|(const bitPATTERN &) const
bitPATTERN & operator&=(const bitPATTERN &)
const RPCdigit * operator[](int) const
STL namespace.