ATLAS Offline Software
Loading...
Searching...
No Matches
BadChanContainerHashed.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef BadChanContainerHashed_H
6#define BadChanContainerHashed_H
7
8template <class Chan, class State, class Hasher>
10public:
11
12 typedef std::pair<Chan,State> BadChanEntry;
13 typedef std::vector<BadChanEntry> BadChanVec;
14 typedef typename BadChanVec::const_iterator const_iterator;
15 typedef typename BadChanVec::size_type size_type;
16
17public:
18
20
21 explicit BadChanContainerHashed( const Hasher& h) : m_hasher(h) {}
22
24
25 State status( const Chan& channel) const;
26
27 State status( const Chan& feb, int ch) const {return m_vec.at( m_hasher.hash( feb, ch));}
28
29 const_iterator begin() const {return m_bcv.begin();}
30 const_iterator end() const {return m_bcv.end();}
31 size_type size() const {return m_bcv.size();}
32
34 void clear() {m_vec.clear(); m_bcv.clear();}
35
36 void set( const BadChanVec& cont);
37
38 void setHasher( const Hasher& hasher) { m_hasher = hasher;}
39
40private:
41
42 typedef unsigned int HashType;
43
44 std::vector<State> m_vec;
45 Hasher m_hasher;
47
48 // these methods should move to a Hasher class
49 HashType hash( Chan ch) const {return m_hasher.hash(ch);}
50 // Chan unhash( HashType h) const;
51 HashType maxHash() const {return m_hasher.maxHash();}
52
53};
54
55template <class Chan, class State, class Hasher>
56inline State BadChanContainerHashed<Chan,State,Hasher>::status( const Chan& channel) const
57{
58 return m_vec[ hash( channel)];
59}
60
61template <class Chan, class State, class Hasher>
63{
64 State good; // default constructed state is good
65 if (m_vec.size() == maxHash()) {
66 for (typename std::vector<State>::iterator i=m_vec.begin(); i!=m_vec.end(); ++i) {
67 *i = good; // reset all channels to good
68 }
69 }
70 else {
71 std::vector<State> tmp( maxHash(), good); // all channels good
72 m_vec.swap(tmp);
73 }
74 for (typename BadChanVec::const_iterator i=cont.begin(); i!=cont.end(); ++i) {
75 // m_vec.at( hash( i->first)) = i->second; // skip invalid hash values
76 HashType h = hash( i->first);
77 if (h < maxHash()) m_vec[h] = i->second;
78 }
79
80 m_bcv = cont;
81}
82
83
84#endif
std::vector< size_t > vec
Header file for AthHistogramAlgorithm.
BadChanContainerHashed(const Hasher &h)
const_iterator begin() const
State status(const Chan &feb, int ch) const
std::vector< BadChanEntry > BadChanVec
void setHasher(const Hasher &hasher)
State status(const Chan &channel) const
BadChanVec::size_type size_type
BadChanContainerHashed(const BadChanVec &vec)
BadChanVec::const_iterator const_iterator
std::pair< Chan, State > BadChanEntry
void set(const BadChanVec &cont)
const_iterator end() const
void clear()
Deletes the contents and sets size to 0 (same as stl::vector<T>::clear())
HashType hash(Chan ch) const