Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:04:19

0001 #ifndef DataFormats_HcalRecHit_CaloRecHitAuxSetter_h_
0002 #define DataFormats_HcalRecHit_CaloRecHitAuxSetter_h_
0003 
0004 #include <cstdint>
0005 
0006 // Useful helpers for uint32_t fields
0007 namespace CaloRecHitAuxSetter {
0008   constexpr inline void setField(uint32_t* u, const unsigned mask, const unsigned offset, const unsigned value) {
0009     *u &= ~(mask << offset);
0010     *u |= ((value & mask) << offset);
0011   }
0012 
0013   constexpr inline unsigned getField(const uint32_t u, const unsigned mask, const unsigned offset) {
0014     return (u >> offset) & mask;
0015   }
0016 
0017   constexpr inline void setBit(uint32_t* u, const unsigned bitnum, const bool b) {
0018     if (b) {
0019       *u |= (1U << bitnum);
0020     } else {
0021       *u &= ~(1U << bitnum);
0022     }
0023   }
0024 
0025   constexpr inline void orBit(uint32_t* u, const unsigned bitnum, const bool b) {
0026     if (b) {
0027       *u |= (1U << bitnum);
0028     }
0029   }
0030 
0031   constexpr inline void andBit(uint32_t* u, const unsigned bitnum, const bool b) {
0032     if (!b) {
0033       *u &= ~(1U << bitnum);
0034     }
0035   }
0036 
0037   constexpr inline bool getBit(const uint32_t u, const unsigned bitnum) { return u & (1U << bitnum); }
0038 }  // namespace CaloRecHitAuxSetter
0039 
0040 #endif  // DataFormats_HcalRecHit_CaloRecHitAuxSetter_h_